Для одного проекта нам понадобилось использовать ресурсы видеокарты (не майнинг).
Для начала нам понадобится сервер с NVIDIA GPU. У Hetzner есть сервера c GeForce® GTX 1080
Требования:
OS | CentOS 7.3 |
Docker | Docker version 17.06.0-ce |
NVIDIA Drivers | latest |
Качаем и устанавливаем драйвера для видеокарты:
После загрузки устанавливаем драйвер и выполняем все шаги
1 |
./NVIDIA-Linux-x86_64-<major_version>.<minor_version>.run |
Принцип работы nvidia-docker:
Устанавливаем nvidia-docker и nvidia-docker-plugin . Подробней можно узнать на nvidia github
1 2 |
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm sudo rpm -i /tmp/nvidia-docker*.rpm && rm /tmp/nvidia-docker*.rpm |
Запускаем сервис:
1 |
sudo systemctl start nvidia-docker |
Проверяем:
1 |
nvidia-docker run --rm nvidia/cuda nvidia-smi |
Должны получить вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Thu Jul 27 13:44:07 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.20 Driver Version: 375.20 | |-------------------------------+----------------------+----------------------+ | 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 GTX 1080 Off | 0000:01:00.0 Off | N/A | | 33% 36C P8 11W / 180W | 0MiB / 8145MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ |
Так мы сможем использовать ресурсы видеокарты, но если нам нужно использовать какой то оркестратор то nvidia-docker запустить не получится, так как это надстройка над докером.
Docker контейнер с поддержкой GPU в оркестраторе.
*Docker Swarm не подходит так как в docker-compose V3 отсутствует возможность пробросить во внутрь устройства.
С официального сайта:
Мы запустили контейнер в Rancher кластере.
Теперь подробней что на самом деле представляет собой nvidia-docker. Это сервис который создает docker volume и монтирует устройства в контейнер.
Что б у знать что создал и что смонтировал, запускаем команду:
1 |
curl -s http://localhost:3476/docker/cli |
Получаем вывод:
—volume-driver=nvidia-docker
—volume=nvidia_driver_375.20:/usr/local/nvidia:ro
—device=/dev/nvidiactl
—device=/dev/nvidia-uvm
—device=/dev/nvidia-uvm-tools
—device=/dev/nvidia0
Для математических вычислений мы используем библиотеку для Python — tensorflow-gpu (TensorFlow)
Пишем Dockerfile, базовый образ берем c Docker Hub Nvidia/CUDA
1 2 3 4 5 |
FROM nvidia/cuda:8.0-cudnn5-runtime-centos7 RUN pip install tensorflow-gpu ENTRYPOINT ["python", "math.py"] |
Напишем docker-compose для сборки и запуска контейнера с вычислениями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
version: '2' services: math: build: . volumes: - nvidia_driver_375.20:/usr/local/nvidia:ro devices: - /dev/nvidiactl - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia0 volumes: nvidia_driver_375.20: driver: nvidia-docker external: true |
Запускаем Docker контейнер:
1 |
docker-compose up -d |
Если все сделано правильно, то при запуске команды:
1 |
nvidia-docker run --rm nvidia/cuda nvidia-smi |
Получим вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Thu Jul 27 15:12:40 2017 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.20 Driver Version: 375.20 | |-------------------------------+----------------------+----------------------+ | 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 GTX 1080 Off | 0000:01:00.0 Off | N/A | | 39% 53C P2 86W / 180W | 7813MiB / 8145MiB | 56% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 27798 C python 7803MiB | +-----------------------------------------------------------------------------+ |
В процессах видно что python использует 56% GPU
Таким образом мы научили Docker работать с видеокартами GeForce.