Запустить GPU-accelerated приложение в Docker-контейнере на облачном сервере
Docker-контейнеры можно использовать на облачных серверах с GPU для гибкого управления GPU-accelerated приложениями без дополнительной настройки окружения.
Контейнеризированная среда позволит:
- оптимально потреблять ресурсы — на одном сервере можно запускать множество приложений, которые другой среде требуют настройки разных окружений;
- избежать проблем с версионированием CUDA Toolkit для ваших приложений.
В Selectel доступны готовые образы с Docker для запуска GPU-accelerated приложений в контейнеризированных средах:
- Ubuntu 24.04 LTS 64-bit GPU Driver 535 Docker;
- Ubuntu 24.04 LTS 64-bit GPU Driver 580 Docker;
- Ubuntu 22.04 LTS 64-bit GPU Driver 535 Docker;
- Ubuntu 22.04 LTS 64-bit GPU Driver 580 Docker.
Требования к облачному серверу
У облачного сервера должны быть:
- конфигурация сервера с GPU;
- образ, из которого создан сервер, с предустановленными GPU-драйверами и Docker;
- сетевой или локальный диск сервера размером более 40 ГБ.
Запустить GPU-accelerated приложение в Docker-контейнере на сервере
1. Запустить сэмпл pytorch-cuda в Docker-контейнере
Запустите PyTorch внутри Docker-контейнера с поддержкой GPU.
-
Откройте 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 torchprint("CUDA Available: ", torch.cuda.is_available())print("Number of GPUs: ", torch.cuda.device_count())Пример вывода:
CUDA Available: TrueNumber of GPUs: 1 -
Убедитесь, что в контейнере установлена версия CUDA Runtime 12.1, которая нужна для запуска PyTorch текущей версии:
conda list | grep cudПример вывода:
libcudnn9-cuda-12 9.1.1.17 0 nvidiacuda-cudart 12.1.105 0 nvidiacuda-cupti 12.1.105 0 nvidiacuda-libraries 12.1.0 0 nvidiacuda-nvrtc 12.1.105 0 nvidiacuda-nvtx 12.1.105 0 nvidiacuda-opencl 12.3.101 0 nvidiacuda-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 Librariescuda-nvcc-12-8 12.8.93-1 amd64 CUDA nvcccuda-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-pippython3 -m pip config set global.break-system-packages truepython3 -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.6tf.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 NAMES20d557a37bdd 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контейнера.