Перейти к основному содержимому
Запустить GPU-accelerated приложение в Docker-контейнере на сервере
Последнее изменение:

Запустить 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-контейнере.

  2. Создайте собственный Docker-образ с CUDA.

1. Запустить сэмпл pytorch-cuda в Docker-контейнере

Запустить PyTorch нужно для использования GPU с CUDA Toolkit в Docker-контейнере вашего приложения.

  1. Откройте CLI.

  2. Убедитесь, что 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 |
    +-----------------------------------------------------------------------------------------+
  3. Запустите контейнер из каталога контейнеров NVIDIA Container Registry:

    sudo docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:<pytorch_version>-py3 bash

    Укажите <pytorch_version> — версию PyTorch.

  4. Убедитесь, что в контейнере установлен 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
  5. Убедитесь, что в контейнере установлена версия 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

  1. Запустите готовый контейнер:

    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
  2. Установите 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
  3. Убедитесь, что в 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')]
  4. Выйдите из оболочки, не прерывая контейнер: нажмите Ctrl + P, а затем Ctrl + Q.

  5. Проверьте, что контейнер запущен:

    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.

  6. Создайте образ:

    docker commit <container_id> <image_tag>

    Укажите:

    • <container_id> — ID контейнера, который вы скопировали на шаге 5;
    • <image_tag> — тег образа.

    Если образ создался, выведется хеш образа. Пример вывода:

    sha256:a7ff970295e5dd37ef441fcf0462752715c95cece2729ddcc774a8aaa0773bce
  7. Создайте и запустите собственный контейнер из образа:

    docker run --rm -it <image_tag> bash

    Укажите <image_tag> — тег образа, который вы создали на шаге 6.

    Здесь --rm — флаг, который удалит контейнер после выхода из оболочки bash контейнера.