Я бы хотел, чтобы мне не пришлось писать статью об этом. Было бы неплохо, если бы Nvidia (полностью) открыла исходный код своих драйверов, чтобы они могли быть первоклассными гражданами Linux и Kubernetes. Однако на данный момент это не так, поэтому вот путь, который вам нужно пройти, чтобы заставить графический процессор Nvidia работать с Linux (я конкретно на Ubuntu 22.04).

Установка драйверов

Первым шагом, конечно же, является установка соответствующих драйверов. Я предполагаю, что вы хотите пропатчить драйверы. Исправление драйверов удаляет искусственное ограничение на 2 транскодирования, наложенное на них в настоящее время. Мы будем создавать драйверы, потому что почему бы и нет.

Прежде чем мы начнем, нам нужно убедиться, что драйвер nouveau отключен. Мы делаем это, потому что драйверы Nvidia совместимы с модулями K3, которые мы будем использовать позже. Если вам нужны более подробные сведения об этом шаге, вы можете посмотреть статью this linuxconfig.org, откуда были взяты эти инструкции.

# Add Nouveau to the modprobe blacklist
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
# If the module is in the kernel, disable it
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
# Persist these settings on each boot
sudo update-initramfs -u

Теперь мы можем начать сборку и применение драйверов. Чтобы упростить процесс, давайте установим dkms. Это поможет собрать необходимые зависимости для сборки драйверов.

sudo apt install dkms

Далее нам нужно будет скачать и установить соответствующие драйвера. Хорошо обновленный список, в котором показаны драйверы и поддерживаемые исправления, см. keylase/nvidia-patch (откуда был взят приведенный ниже код).

# Create a driver directory
sudo mkdir /opt/nvidia && cd /opt/nvidia
# Download the files (this example uses driver 515.57)
sudo wget https://international.download.nvidia.com/XFree86/Linux-x86_64/515.57/NVIDIA-Linux-x86_64-515.57.run
# Make the build script executable 
sudo chmod +x ./NVIDIA-Linux-x86_64-515.57.run
# Build the driver
sudo ./NVIDIA-Linux-x86_64-515.57.run

После установки драйвера мы сможем проверить его с помощью nvidia-smi, что должно дать результат, подобный следующему:

Исправление драйверов

Теперь мы можем пропатчить драйверы, чтобы лимит транскодирования был разблокирован. Для этого на вашем сервере должен быть установлен Git (sudo apt install git). Если у вас возникнут проблемы со следующими шагами, вам следует проверить исходный репозиторий: keylase/nvidia-patch.

# Optional if you want to start in your home directory
cd ~
# Clone down the patch scripts
git clone https://github.com/keylase/nvidia-patch.git
# Navigate into the repo folder with the patches
cd nvidia-patch
# Ensure the patch is executable
sudo chmod +x patch.sh
# Execute the patch (needs to be done in a bash shell)
sudo bash ./patch.sh

Установка среды выполнения контейнера Nvidia

Среда выполнения контейнеров Nvidia теперь включена в их проект инструментов. Для этого нам нужно добавить ключ подписи в менеджер пакетов нашей системы (apt).

# Adding the signing key to apt
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
# Create a variable with our distribution string
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
# Install the appropriate package list for our distribution
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

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

sudo apt-get update \
    && sudo apt-get install -y nvidia-container-toolkit

После завершения установки вы успешно установили среду выполнения контейнера! Мы почти на финишной прямой! К этому моменту мы установили наши драйверы Nvidia, установили нашу специальную среду выполнения контейнеров, которая позволит нам использовать GPU с контейнерами. Теперь нам нужно настроить K3 для использования этой среды выполнения контейнера с CRI containerd (интерфейсом среды выполнения контейнера).

Настройка containerd для использования Nvidia-Container-Runtime

Наконец, последние шаги, чтобы заставить наш GPU работать с Kubernetes. Здесь мы собираемся внести некоторые изменения в containerd CRI, чтобы он использовал нашу новую среду выполнения nvidia-contianer. Чтобы просмотреть оригинальную документацию, ознакомьтесь с руководством Nvidia здесь.

Мы начнем с открытия /etc/containerd/config.toml в выбранном вами текстовом редакторе (например, vi, vim, nano). Открыв его, мы добавим следующий блок:

Кроме того, если есть лонг, который содержит `disabled_plugins = [“cri”]`, нам нужно будет закомментировать его, поставив перед ним #. Теперь мы можем перезапустить службу containerd, и она готова к гонкам!

sudo systemctl restart containerd

Теперь вы должны иметь возможность планировать узлы для запроса ресурсов графического процессора! Обязательно следите за дополнительными руководствами, и если вам нравится этот тип контента, загляните на мой YouTube!