Запустить GPU-accelerated приложение в Docker-контейнере на сервере
Docker-контейнеры можно использовать н а облачных серверах с GPU для гибкого управления GPU-accelerated приложениями без дополнительной настройки окружения.
Контейнизированная среда позволит:
- оптимально потреблять ресурсы — на одном сервере можно запускать множество приложений, которые другой среде требуют настройки разных окружений;
- избежать проблем с версионированием CUDA Toolkit для ваших приложений.
В Selectel доступны готовые образы с CUDA Toolkit последних минорных версий 11–12 и Docker для запуска GPU-accelerated приложений в контейнеризированных средах:
- Ubuntu 24.04 LTS 64-bit CUDA 11.8 Docker;
- Ubuntu 24.04 LTS 64-bit CUDA 12.8 Docker;
- Ubuntu 22.04 LTS 64-bit CUDA 11.8 Docker;
- Ubuntu 22.04 LTS 64-bit CUDA 12.8 Docker.
Требования к облачному серверу
У облачного сервера должны быть:
- конфигурация сервера с GPU;
- образ, из которого создан сервер, с предустановленными GPU-драйверами, CUDA Toolkit и Docker;
- сетевой или локальный диск сервера размером более 40 ГБ.
Запустить GPU-accelerated приложение в Docker-контейнере на сервере
1. Запустить сэмпл pytorch-cuda в Docker-контейнере
Запустить PyTorch нужно для использования GPU с CUDA Toolkit в Docker-контейнере вашего приложения.
-
Откройте CLI.
-
Убедитесь, что GPU на сервере работает корректно:
nvidia-smi
В ответе появится список версий NVIDIA-SMI, драйверов и CUDA, совместимая с текущей версией драйвера, но не установленная в системе. Например:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Tesla T4 Off | 00000000:00:06.0 Off | 0 |
| N/A 41C P8 10W / 70W | 0MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+ -
Запустите контейнер из каталога контейнеров NVIDIA Container Registry:
sudo docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:<pytorch_version>-py3 bash
Укажите
<pytorch_version>
— версию PyTorch. -
Убедитесь, что в контейнере установлен CUDA Toolkit и GPU доступна для вычисле ний:
import torch
print("CUDA Available: ", torch.cuda.is_available())
print("Number of GPUs: ", torch.cuda.device_count())Пример вывода:
CUDA Available: True
Number of GPUs: 1 -
Убедитесь, что в контейнере установлена версия CUDA Runtime 12.1, которая нужна для запуска PyTorch текущей версии:
conda list | grep cud
Пример вывода:
libcudnn9-cuda-12 9.1.1.17 0 nvidia
cuda-cudart 12.1.105 0 nvidia
cuda-cupti 12.1.105 0 nvidia
cuda-libraries 12.1.0 0 nvidia
cuda-nvrtc 12.1.105 0 nvidia
cuda-nvtx 12.1.105 0 nvidia
cuda-opencl 12.3.101 0 nvidia
cuda-runtime 12.1.0 0 nvidiaНа ОС сервера установка CUDA Runtime не требуется.
2. Создать собственный Docker-образ с CUDA
-
Запустите готовый контейнер:
docker run --gpus all -it --rm nvcr.io/nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04
В контейнере будут предустановлены CUDA Toolkit, CUDA Runtime и libcudnn совместимых версий:
cuda-cudart-12-8 12.8.90-1 amd64 CUDA Runtime native Libraries
cuda-nvcc-12-8 12.8.93-1 amd64 CUDA nvcc
cuda-toolkit-config-common 12.8.90-1 all Common config package for CUDA Toolkit.
libcudnn9-cuda-12 9.8.0.87-1 amd64 cuDNN runtime libraries for CUDA 12.8 -
Установите Python 3:
apt update && apt -y install python3 python3-pip
python3 -m pip config set global.break-system-packages true
python3 -m pip install tensorflow -
Убедитесь, что в Docker-контейнере доступен GPU:
python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000]))); gpu_available = tf.test.is_gpu_available(); print('GPU is availlable: ', gpu_available)"
Пример вывода:
I0000 00:00:1743408862.613883 910 gpu_device.cc:2019] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 4287 MB memory: -> device: 0, name: NVIDIA RTX A2000, pci bus id: 0000:00:06.0, compute capability: 8.6
tf.Tensor(-1418.5072, shape=(), dtype=float32)
Available GPUs: [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')] -
Выйдите из оболочки, не прерывая контейнер: нажмите
Ctrl + P
, а затемCtrl + Q
. -
Проверьте, что контейнер запущен:
docker ps a
Пример вывода:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20d557a37bdd nvcr.io/nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04 "/opt/nvidia/nvidia_…" 24 minutes ago Up 24 minutes nifty_shternВ столбце параметра
CONTAINER ID
скопируйте ID контейнера, который вы запустили на шаге 1. -
Создайте образ:
docker commit <container_id> <image_tag>
Укажите:
<container_id>
— ID контейнера, который вы скопировали на шаге 5;<image_tag>
— тег образа.
Если образ создался, выведется хеш образа. Пример вывода:
sha256:a7ff970295e5dd37ef441fcf0462752715c95cece2729ddcc774a8aaa0773bce
-
Создайте и запустите собственный контейнер из образа:
docker run --rm -it <image_tag> bash
Укажите
<image_tag>
— тег образа, который вы создали на шаге 6.Здесь
--rm
— флаг, который удалит контейнер после выхода из оболочкиbash
контейнера.