Jupyter+Keras+ Nvidia Docker with GPU on Google Cloud in an instant

As a machine learning engineer, making environments by myself to try machine learning task is really important. The more convenient public cloud services such as AWS and GCP is getting, The more important the ability to do that I think.

Today, I would like to describe a kit which I made to make an environment with jupyter notebook, keras and Nvidia docker with GPU on google cloud in an instant.

Motivation

I wanted an environment to build deep learning models with jupyter and GPU. There were a couple of candidates to be that.docker-machine would be best for that. Unfortunately, we can’t make an GCP instance with GPUs with docker-machine yet. I wait and see the issue. Google Datalab also would be a great candidate for that. But I don’t know it has complete compatibility with jupyter notebook. However, either of them is not enough to satisfy my requirements.

GitHub Repository

As a result of my research to build a GCP with GPU, I decided to make one by myself. You can of course use it in an instant.

Features

  • Make a GPU instance on GCP with nvidia docker
  • Run jupyter as a docker container in the GPU instance
  • Set a SSH tunnel to access jupyter from a web browser
  • Install python library to the container via pip (Optional)
  • Upload your files to the instance from your local machine
  • Download files from the instance to your local machine
  • Delete the instance

Make a GPU instance on GCP with nvidia docker

make create-instance allows us to make a GPU instance on GPU with nvidia docker, running a startup script. Before executing the command, I recommend you to edit Makefile to set INSTANCE_NAME to your instance name and GCP_PROJECT_ID to your GCP project ID. You can also set them when creating an instance. It takes 5 minutes or so to create an instance.

make create-instance \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx

The below YAML file is to create an anaconda environment for the docker container with jupyter, keras and so on. You don’t need to install them by your self, because the docker image already includes them.

Run jupyter as a docker container in the GPU instance

After creating an instance, you must run jupyter notebook with make run-jupyter.

make run-jupyter \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx

Set a SSH tunnel to access jupyter from a web browser

In order to access the jupyter which you launched, you have to have a SSH tunnel. When you got it, you can access http://localhost:18888 via a web browser on your local machine. When you don't set any value with make ssh-tunnel, the port is the default value. The default of JUPYTER_PORT is 18888.

make ssh-tunnel \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx \
JUPYTER_PORT=18888

Install python library to the container via pip

If you would like to install additional python libraries to a docker container which jupyter is runnning, first add ones to requirements.txt , then execute make pip-install.

make run-jupyter \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx

Upload your files to the instance from your local machine

If you would like to upload your files which include notebooks and data, make upload-files allows us to do that, setting FROM to your path. The files will be uploaded under /src inthe GCP instalce. The directory is mounted by /src in a docker container.

make upload-files \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx \
FROM=/path/to/your/files

Download files from the instance to your local machine

When you save models under /src/outputs in a docker container, you can download them with make download-outputs . You have to set TO to a path where you want to download.

make download-outputs \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx \
TO=/path/to/your/destination

Delete the instance

Please don’t forget to delete the instance, when you finish making your models.

make delete-instance \
INSTANCE_NAME="test-gpu-instance" \
GCP_PROJECT_ID=xxx-xxx-xxx

Conclusion

I made a kit to making an GCP instance with GPU, jupyter, keras and so on in an instant. I hope it would help you with your machine learning life.