В современной разработке машинного обучения принято упаковывать обучающее приложение в контейнер, который затем развертывается в вычислительной инфраструктуре для обучения. Однако перед распространением образа контейнера крайне важно выполнить простой тест локально, чтобы убедиться, что все работает правильно.

В этом руководстве я объясню, как настроить локальный компьютер для запуска контейнера Docker с доступом к вашим локальным графическим процессорам. Я продемонстрирую процесс установки на компьютере с Ubuntu 20.04, оснащенном графическим процессором Nvidia RTX 2060 12G, CUDA версии 11.8 и cuDNN. версия 8.6.0.

Вот пошаговое руководство по достижению этого:

Предпосылки

  • Докер
  • Драйвер Nvidia
  • Инструментарий CUDA
  • cuDNN
  • Набор инструментов NVIDIA для контейнеров

Установить Докер

Вы можете следовать официальной документации для установки Docker Desktop. Это приложение включает в себя Docker Engine, клиент Docker CLI, Docker Compose и другие инструменты, которые позволяют создавать и совместно использовать контейнерные приложения.

Установить драйвер Нвидиа

Перед установкой драйвера Nvidia убедитесь, что версия драйвера совместима с набором инструментов CUDA, который вы собираетесь установить. Вы можете проверить официальную документацию для получения информации о совместимости. Чтобы определить требуемую версию набора инструментов CUDA, обратитесь к платформе машинного обучения, которую вы будете использовать. Более подробная информация представлена ​​в разделе Инструментарий CUDA ниже.

После этого вы можете перейти на страницу загрузки драйверов, где необходимо указать характеристики вашей машины. После того, как вы ввели данные, нажмите кнопку Поиск, чтобы начать загрузку драйвера.

Установите инструментарий CUDA

На машине с Ubuntu рекомендуется установить необходимые системные пакеты, такие как build-essential, прежде чем приступать к установке CUDA Toolkit.

sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev

Перед установкой драйвера обязательно перепроверьте требуемые версии cuDNN и CUDA Toolkit, указанные платформой машинного обучения, которую вы собираетесь использовать. Спецификации версии ниже взяты из библиотеки TensorFlow. В этом случае убедитесь, что соблюдены следующие требования к версии:

После проверки требований к версии перейдите на страницу загрузки и выберите характеристики вашей машины. Выбрав соответствующие настройки, нажмите кнопку deb(network), чтобы получить скрипт для установки CUDA Toolkit.

На этом этапе вам необходимо изменить сценарий установки, чтобы указать версию CUDA Toolkit, которую вы хотите загрузить. Ниже приведен исходный сценарий, который вы, скорее всего, получите после указания характеристик вашей машины.

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

Ниже приведен пример установки CUDA Toolkit 11.8. Вам нужно будет изменить последнюю строку, добавив номер версии к cuda.

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-11.8

После этого вам нужно будет настроить PATH и LD_LIBRARY_PATH так, чтобы они указывали на только что установленный набор инструментов CUDA, в данном случае это cuda-11.8. Если вы устанавливаете другую версию, обязательно обновите ее до соответствующей версии. Это гарантирует, что ваша система сможет правильно найти и использовать установленный набор инструментов CUDA.

echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

После того, как вы выполнили эти шаги и настроили переменные среды, необходимо перезагрузить компьютер. Перезагрузка гарантирует, что все изменения и конфигурации, связанные с CUDA Toolkit и переменными среды, вступят в силу. После перезагрузки ваш компьютер должен быть готов к использованию установленного набора инструментов CUDA и графического процессора для задач машинного обучения.

Установить cuDNN

Установка cuDNN относительно проста и включает копирование определенных файлов в каталоги include и lib64 CUDA Toolkit. Чтобы скачать cuDNN, вы можете посетить страницу Архив cuDNN. Убедитесь, что загружаемая вами версия cuDNN соответствует версии, указанной вашей платформой машинного обучения.

Чтобы загрузить пакет cuDNN, получите его в виде файла tar и извлеките его содержимое после завершения загрузки. После извлечения запустите следующий скрипт, чтобы скопировать необходимые файлы в соответствующие каталоги CUDA Toolkit. Убедитесь, что указанный путь указывает на правильный каталог установки CUDA Toolkit.

sudo cp -P <extracted_cudnn_path>/include/cudnn.h /usr/local/cuda-11.8/include
sudo cp -P <extracted_cudnn_path>/lib64/libcudnn* /usr/local/cuda-11.8/lib64/
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*

Теперь у вас установлены и CUDA Toolkit, и cuDNN.

Установите Nvidia Container Toolkit

Чтобы настроить контейнер Docker для использования локальных устройств GPU, вам необходимо настроить Nvidia Container Toolkit. Если вы не используете Docker, вы можете следовать официальному руководству по установке инструментария.

Чтобы установить NVIDIA Container Toolkit, выполните следующую команду:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit-base

Чтобы подтвердить установку, выполните следующую команду:

nvidia-ctk --version

Чтобы настроить Nvidia Container Toolkit, выполните следующую команду:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

Затем вам нужно будет настроить демон Docker для распознавания среды выполнения контейнеров NVIDIA, отредактировав файл конфигурации демона Docker. Откройте файл в текстовом редакторе:

sudo nvidia-ctk runtime configure --runtime=docker

Наконец, чтобы перезапустить демон Docker, выполните следующую команду:

$ sudo systemctl restart docker

Протестируйте установку

После завершения настройки Nvidia Container Toolkit и Docker вы можете протестировать свою установку, запустив базовый контейнер CUDA.

$ sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

Докерфайл

В качестве дополнительной информации ниже показано, как Dockerfile настраивается.

FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04

RUN apt-get update --yes --quiet && DEBIAN_FRONTEND=noninteractive apt-get install --yes --quiet --no-install-recommends \
    software-properties-common \
    build-essential apt-utils \
    wget curl vim git ca-certificates kmod \
    nvidia-driver-525 \
    && rm -rf /var/lib/apt/lists/*

RUN add-apt-repository --yes ppa:deadsnakes/ppa && apt-get update --yes --quiet
RUN DEBIAN_FRONTEND=noninteractive apt-get install --yes --quiet --no-install-recommends \
    python3.10 \
    python3.10-dev \
    python3.10-distutils \
    python3.10-lib2to3 \
    python3.10-gdbm \
    python3.10-tk \
    pip

RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 999 \
    && update-alternatives --config python3 && ln -s /usr/bin/python3 /usr/bin/python

RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10

COPY requirements.txt /requirements.txt
COPY finetune.py /finetune.py

RUN python3 -m pip install --upgrade pip && \
    python3 -m pip install --no-cache-dir -r /requirements.txt

ENTRYPOINT [ "python3", "finetune.py" ]