Technology

Docker based Jupyter Notebook on B200 M5 with Tesla P6

We have a fresh system, let's install Docker.  Here we are using CentOS 7.5 and logged in as root. First make sure your date/clock is correct, if not, fix:
date +%Y%m%d -s "20180917"
date +%T -s "13:39:00"
hwclock -w
Install Docker
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
systemctl enable docker
Install NVIDIA Docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \
  sudo tee /etc/yum.repos.d/nvidia-docker.repo
Following the README we do:
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo yum install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
The output of this command should give you something like the following:
Mon Sep 17 17:51:02 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.44                 Driver Version: 396.44                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P6            Off  | 00000000:D8:00.0 Off |                    0 |
| N/A   32C    P0    27W /  90W |      0MiB / 15261MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
We can now run the python notebook to get started with Tensorflow
sudo nvidia-docker run --rm --name tf1 -p 8888:8888 \
   -p 6006:6006 tensorflow/tensorflow:latest-gpu \
   jupyter notebook --allow-root
This will give us a session.  The session will look something like this:
.
.
.
Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=259f67059411d2fcc806e06c6bd36002b3597c42e64e7b3c
Take note of the token printed out above.  Yours will look different.  Since this is running on a server, we will open an SSH tunnel to be able to talk to the Jupyter notebook
ssh -L 9999:localhost:8888 gpublade
We can now open our web browser to http://localhost:9999.  This will then redirect us to the :8888 port on the server.  This way we can access our machine.  It will ask us for a token.  Now we can put the token that was outputted when we started the docker container. After entering the token we can go through the Jupyter Notebook Tensorflow tutorials. Using Docker is a ton easier than installing everything on this server by hand.  We did omit some of the nvidia driver setup requirements found in my previous post.

References

https://www.garron.me/en/linux/set-time-date-timezone-ntp-linux-shell-gnome-command-line.html https://medium.com/@lucasrg/using-jupyter-notebook-running-on-a-remote-docker-container-via-ssh-ea2c3ebb9055 https://blog.sicara.com/tensorflow-gpu-opencv-jupyter-docker-10705b6cd1d