Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Dockerfiles and manual for easy build of docker image with CUDA10.X and cuDNN7.6 to run TensorFlow/PyTorch on the nvidia GPU in docker-container.

License

Notifications You must be signed in to change notification settings

dbklim/docker_image_with_cuda10_cudnn7

Repository files navigation

Docker image with CUDA 10 and cuDNN 7

Проект содержит bash-скрипты для подготовки хост-машины для предоставления доступа к GPU в docker контейнерах. Подготовка состоит из:

  1. Установка драйвера для NVIDIA GPU необходимой версии
  2. Установка nvidia-container-toolkit
  3. Сборка базового docker образа с CUDA 10.X и cuDNN 7.6

Внимание! Все нижеописанные инструкции предназначены для Ubuntu 16.04-20.04. В других ОС работоспособность не гарантируется!

Примечание: после клонирования проекта, скорее всего нужно будет предоставить скриптам права на запуск. Это можно сделать следующим способом (находясь в папке с проектом):

chmod +x *.sh

Зависимости

Для успешной подготовки хост-машины требуется установленный Docker версии 19.03 или выше.

Для установки Docker в Ubuntu 16.04-20.04 воспользуйтесь официальной инструкцией или скриптом install_docker-ubuntu.sh:

sudo ./install_docker-ubuntu.sh

Так же можно вручную в терминале выполнить (краткая выжимка из официальной инструкции):

sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -y
sudo apt-get -y update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose

Подготовка хост-машины одним скриптом

Для выполнения всех действий сразу можно воспользоваться скриптом install_all.sh. Поддерживается CUDA версии 10.0, 10.1 и 10.2. Для того, что бы указать конкретную версию CUDA, нужно передать аргумент при запуске:

sudo ./install_all.sh [cuda10.0|cuda10.1|cuda10.2]

Значения аргумента (если не передавать аргумент - использовать значение cuda10.2):

  • cuda10.0: установка nvidia-driver-440, nvidia-container-toolkit и сборка docker-образа с CUDA 10.0 и cuDNN 7.6 на основе Ubuntu 19.10 с меткой cuda10.0_cudnn7.6:devel
  • cuda10.1: установка nvidia-driver-440, nvidia-container-toolkit и сборка docker-образа с CUDA 10.1 и cuDNN 7.6 на основе Ubuntu 19.10 с меткой cuda10.1_cudnn7.6:devel
  • cuda10.2: установка nvidia-driver-440, nvidia-container-toolkit и сборка docker-образа с CUDA 10.2 и cuDNN 7.6 на основе Ubuntu 19.10 с меткой cuda10.2_cudnn7.6:devel

После выполнения скрипта необходмо перезагрузить хост-машину. Проверить работоспособность можно следующим образом:

sudo docker run --gpus all -ti --rm cuda10.2_cudnn7.6:devel nvidia-smi

Результат должен быть такой же, как и в разделе 1 ниже.


1. Установка драйвера для видеокарты NVIDIA

Для работы с CUDA 10.X необходим драйвер для видеокарты определённой версии (источник):

  • CUDA 10.0: драйвер версии 410.48 или выше
  • CUDA 10.1: драйвер версии 418.39 или выше
  • CUDA 10.2: драйвер версии 440.33 или выше

Установить драйвер нужной версии можно следующими способами:

  1. Самостоятельно, загрузив необходимый пакет с официального сайта nvidia
  2. Воспользоваться скриптом install_nvidia-driver.sh, который в качестве аргумента принимает версию драйвера (если не передавать аргумент - установить версию 440):
sudo ./install_nvidia-driver.sh [410|418|440|...]
  1. Вручную в терминале выполнить:
sudo add-apt-repository -y ppa:graphics-drivers/ppa
sudo apt-get -y update
sudo apt-get -y install nvidia-driver-440

После установки необходимо перезагрузить хост-машину. Что бы убедиться, что драйвер успешно установлен, можно вызвать в терминале nvidia-smi. Результат должен быть примерно следующий:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.59       Driver Version: 440.59       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:08:00.0 Off |                  N/A |
| 39%   42C    P0    18W / 250W |      0MiB / 11019MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

2. Установка nvidia-container-toolkit

Что бы видеокарта была доступна в docker-контейнере, необходимо установить nvidia-container-toolkit. Сделать это можно следующими способами:

  1. Воспользоваться скриптом install_nvidia-container-toolkit.sh:
sudo ./install_nvidia-container-toolkit.sh
  1. Вручную в терминале выполнить (краткая выжимка из репозитория):
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
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 -y update
sudo apt-get -y install nvidia-container-toolkit
sudo systemctl restart docker

Что бы убедиться, что установка прошла успешно, можно выполнить в терминале:

sudo docker run --gpus all -ti --rm nvidia/cuda:10.2-base nvidia-smi

Результат должен быть такой же, как и в подразделе 1.


3. Сборка docker-образа с CUDA 10.X и cuDNN 7.6

Для работы с библиотеками машинного обучения на GPU, такими как TensorFlow и PyTorch, так же необходимы библиотеки CUDA 10.X и cuDNN 7.6. Для упрощения сборки пользовательских docker-образов, можно использовать заранее собранный docker-образ с данными библиотеками в качестве основы (т.е. в качестве базового образа).

В проекте доступны 2 вида Dockerfile: runtime и devel. Образы с меткой runtime используются для запуска уже готовых проектов на GPU, а с меткой devel - для сборки проектов из исходников с поддержкой GPU (подробно про разницу между ними можно посмотреть в репозитории nvidia-docker).

Для сборки docker-образа с CUDA 10.2 и cuDNN 7.6, находясь в папке с проектом, нужно выполнить (-f Dockerfile_cuda10.2_runtime — использовать файл Dockerfile_cuda10.2_runtime в качестве Dockerfile для сборки образа, -t — запуск в терминале, . — директория, из которой вызывается docker build (точка — значит в текущей директории находятся все файлы для образа), cuda10.2_cudnn7.6:runtime — метка образа и его версия):

sudo docker build -f Dockerfile_cuda10.2_runtime -t cuda10.2_cudnn7.6:runtime .

В качестве базовой ОС для образа используется Ubuntu 20.04.

Для сборки docker-образов с другими версиями CUDA в проекте присутствуют соответствующие Dockerfile:

Данные Dockerfiles сделаны на основе Dockerfiles из репозитория nvidia.

После успешной сборки, проверить работоспособность образа можно следующим образом (--gpus all - предоставить контейнеру доступ ко всем GPU на хост-машине, -t — запуск терминала, -i — интерактивный режим, --rm — удалить контейнер после завершения его работы):

sudo docker run --gpus all -ti --rm cuda10.2_cudnn7.6:runtime nvidia-smi

Результат должен быть такой же, как и в подразделе 1.

Примечание: размер собранного docker-образа с CUDA 10.X и cuDNN 7.6 равен 1.3-1.8 Гб для runtime и 3.1-3.8 Гб для devel.


Сборка пользовательского docker-образа с CUDA 10.X и cuDNN 7.6

Для сборки любого пользовательского docker-образа с библиотеками CUDA 10.X и cuDNN 7.6 нужно:

  1. Изменить образ, на основе которого собирается пользовательский образ, на созданный ранее cuda10.2_cudnn7.6:runtime
  2. При установке пакетов для Python использовать версии библиотек для работы на GPU, например, вместо TensorFlow использовать TensorFlow-GPU
  3. Предусмотреть в исходном коде запускаемого в docker-контейнере проекта обнаружение и использование GPU

Что бы docker-образ имел доступ к видеокарте, при запуске образа необходимо передать параметр --gpus all, например:

sudo docker run --gpus all -ti --rm my_image:version

Параметр --gpus all предоставит контейнеру доступ сразу ко всем имеющимся на хост-машине видеокартам. Что бы указать, сколько видеокарт использовать или какие именно, нужно вместо all передать 2 (использовать первые 2 видеокарты) или "device=2,3" (использовать 2 и 3 видеокарту), например:

sudo docker run --gpus '"device=1,2"' -ti --rm my_image:version

Более подробно про параметр --gpus можно посмотреть в репозитории nvidia-docker.


Динамическое выделение памяти GPU в TensorFlow-GPU

По умолчанию TensorFlow-GPU использует всю доступную видеопамять, по этому не получится одновременно запустить несколько docker-образов, использующих TensorFlow-GPU на одном GPU.

Если проект написан на Python и для работы с TensorFlow используется Keras, можно это исправить следующим образом (данный фрагмент кода необходимо добавить в самое начало .py файла, перед первым использованием TensorFlow-GPU) (источник):

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session

# Включение динамического выделения памяти GPU в TensorFlow
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

sess = tf.Session(config=config)  # применение новой конфигурации для сессии TensorFlow
set_session(sess)  # установка данной сессии TensorFlow в качестве основной для Keras

Если у вас возникнут вопросы или вы хотите сотрудничать, можете написать мне на почту: vladsklim@gmail.com или в LinkedIn.

About

Dockerfiles and manual for easy build of docker image with CUDA10.X and cuDNN7.6 to run TensorFlow/PyTorch on the nvidia GPU in docker-container.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.