Setting up Nvidia CUDA environment for Tensorflow with Docker

Post date: May 05, 2019 10:29:12 PM

1. Install Nvidia driver

# The easiest way is to run "Software & Updates" -> "Additional Drivers" GUI to install nvidia driver.

# Otherwise, a terminal installation is as follows.

sudo apt install nvidia-driver-440

2. Install Docker according to [3]

3. Install CUDA docker [4]

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers

sudo docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f

sudo apt-get purge -y nvidia-docker

# Add the package repositories

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration

sudo apt-get install -y nvidia-docker2

sudo pkill -SIGHUP dockerd

# Test nvidia-smi with a CUDA image, e.g.

sudo docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

sudo docker run --runtime=nvidia --rm nvidia/cuda:10.0-base nvidia-smi

4. Install Tensorflow docker [5]

sudo docker pull <tensorflow/tensorflow:latest-gpu>

#  Start a bash shell session in the container

sudo docker run -v <hostDir>:<containerDir> --runtime=nvidia -it <tensorflow/tensorflow:latest-gpu> bash

# Install matplotlib inside docker

root@<commitID>: apt install python-tk

root@<commitID>: pip install pillow matplotlib gpustat pylru

# Commit changes in container

sudo docker commit <commitID> <tensorflow/tensorflow:latest-gpu-matplotlib>

# Start the new container

sudo docker run -u $(id -u):$(id -g) -v <hostDir>:<containerDir> --runtime=nvidia -it <tensorflow/tensorflow:latest-gpu-matplotlib> bash

e.g.

sudo docker run -u $(id -u):$(id -g) -v /:/media --runtime=nvidia -it <tensorflow/tensorflow:latest-gpu-matplotlib> bash

# Check GPU status [6]

watch -n 0.5 nvidia-smi

# Save docker image to a tar file

docker save <image_name> > <image_name.tar>

# Load docker image from a tar file

docker load < <image_name.tar>

[3] https://docs.docker.com/install/linux/docker-ce/ubuntu/

[4] https://github.com/NVIDIA/nvidia-docker

[5] https://www.tensorflow.org/install/docker#gpu_support

[6] https://stackoverflow.com/questions/8223811/top-command-for-gpus-using-cuda