Как передать графический процессор NVIDIA в контейнеры Proxmox VE 8 для ускорения CUDA/AI и транскодирования мультимедиа

Kak Peredat Graficeskij Processor Nvidia V Kontejnery Proxmox Ve 8 Dla Uskorenia Cuda Ai I Transkodirovania Mul Timedia



Если на вашем сервере Proxmox VE установлен графический процессор NVIDIA, вы можете передать его в контейнер Proxmox VE LXC и использовать в контейнере для ускорения CUDA/AI (например, TensorFlow, PyTorch). Вы также можете использовать графический процессор NVIDIA для перекодирования мультимедиа, потоковой передачи видео и т. д. в контейнере Proxmox VE LXC с установленным Plex Media Server или NextCloud (например).

В этой статье мы покажем вам, как передать графический процессор NVIDIA в контейнер Proxmox VE 8 LXC, чтобы вы могли использовать его для ускорения CUDA/AI, перекодирования мультимедиа или других задач, требующих графического процессора NVIDIA.







Тема содержания:

Установка драйверов графического процессора NVIDIA на Proxmox VE 8

Чтобы передать графический процессор NVIDIA в контейнер Proxmox VE LXC, на вашем сервере Proxmox VE 8 должны быть установлены драйверы графического процессора NVIDIA. Если вам нужна помощь в установке последней версии официальных драйверов NVIDIA GPU на ваш сервер Proxmox VE 8, прочитайте эту статью .



Проверка автоматической загрузки модулей ядра NVIDIA GPU в Proxmox VE 8

После того как на вашем сервере Proxmox VE 8 установлены драйверы графического процессора NVIDIA, вы должны убедиться, что модули ядра NVIDIA графического процессора загружаются автоматически во время загрузки.



Сначала создайте новый файл, например «nvidia.conf», в каталоге «/etc/modules-load.d/» и откройте его в текстовом редакторе nano.





$ нано / и т. д. / модули-load.d / nvidia.conf

Добавьте следующие строки и нажмите + Икс затем «Y» и <Ввод> чтобы сохранить файл «nvidia.conf» :



Нвидиа

nvidia_uvm

Чтобы изменения вступили в силу, обновите файл «initramfs» следующей командой:

$ обновление-initramfs

По какой-то причине Proxmox VE 8 не создает необходимые файлы устройств NVIDIA GPU в каталоге «/dev/». Без этих файлов устройств контейнеры Promox VE 8 LXC не смогут использовать графический процессор NVIDIA.

Чтобы убедиться, что Proxmox VE 8 создает файлы устройств NVIDIA GPU в каталоге «/dev/» во время загрузки, создайте файл правил udev «70-nvidia.rules» в каталоге «/etc/udev/rules.d/». каталог и откройте его с помощью текстового редактора nano следующим образом:

$ нано / и т. д. / удев / правила.д / 70 -nvidia.rules

Введите следующие строки в файл «70-nvidia.rules» и нажмите + Икс затем «Y» и <Ввод> чтобы сохранить файл:

# создаем необходимые файлы устройств NVIDIA в /dev/*

ЯДРО == 'Нвидиа' , ВЫПУСК+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''

ЯДРО == 'nvidia_uvm' , ВЫПУСК+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

Чтобы изменения вступили в силу, перезагрузите сервер Proxmox VE 8 следующим образом:

$ перезагрузить

После загрузки вашего сервера Proxmox VE 8 модули ядра NVIDIA должны загрузиться автоматически, как вы можете видеть на следующем снимке экрана:

$ лсмод | схватить Нвидиа

Необходимые файлы устройств NVIDIA также должны быть помещены в каталог «/dev» вашего сервера Proxmox VE 8. Обратите внимание на идентификаторы CGroup файлов устройств NVIDIA. Вы должны разрешить эти идентификаторы CGroup в контейнере LXC, через который вы хотите передавать графические процессоры NVIDIA с вашего сервера Proxmox VE 8. В нашем случае идентификаторы CGroup — 195, 237 и 226.

$ лс -левый / разработчик / Нвидиа *

$ лс -левый / разработчик / дри

Создание контейнера Proxmox VE 8 LXC для сквозной передачи графического процессора NVIDIA

В этой статье для демонстрации мы использовали контейнер Ubuntu 22.04 LTS Proxmox VE 8 LXC, поскольку библиотеки NVIDIA CUDA и NVIDIA cuDNN легко установить в Ubuntu 22.04 LTS из репозиториев пакетов Ubuntu, и легче проверить, работает ли ускорение NVIDIA CUDA. . Если хотите, вы можете использовать и другие дистрибутивы Linux. В этом случае команды установки NVIDIA CUDA и NVIDIA cuDNN будут различаться. Обязательно следуйте инструкциям по установке NVIDIA CUDA и NVIDIA cuDNN для желаемого дистрибутива Linux.

Если вам нужна помощь в создании контейнера Proxmox VE 8 LXC, прочитайте эту статью .

Настройка контейнера LXC для сквозной передачи NVIDIA GPU на Promox VE 8

Чтобы настроить контейнер LXC (скажем, контейнер 102) для сквозной передачи NVIDIA GPU, откройте файл конфигурации контейнера LXC из оболочки Proxmox VE с помощью текстового редактора nano следующим образом:

$ нано / и т. д. / пве / lxc / 102 .conf

Введите следующие строки в конце файла конфигурации контейнера LXC:

lxc.cgroup.devices.allow: c 195 : * РВМ

lxc.cgroup.devices.allow: c 237 : * РВМ

lxc.cgroup.devices.allow: c 226 : * РВМ

lxc.mount.entry: / разработчик / nvidia0          dev / nvidia0          нет связывать ,необязательный, создавать '=' файл

lxc.mount.entry: / разработчик / nvidiactl        dev / nvidiactl        нет связывать ,необязательный, создавать '=' файл

lxc.mount.entry: / разработчик / nvidia-modeset   dev / nvidia-modeset   нет связывать ,необязательный, создавать '=' файл

lxc.mount.entry: / разработчик / nvidia-uvm       dev / nvidia-uvm       нет связывать ,необязательный, создавать '=' файл

lxc.mount.entry: / разработчик / Разработчик nvidia-uvm-tools / nvidia-uvm-tools нет связывать ,необязательный, создавать '=' файл

lxc.mount.entry: / разработчик / дри              дев / дри              нет связывать ,необязательный, создавать '=' ты

Обязательно замените идентификаторы CGroup в строках «lxc.cgroup.devices.allow» файла конфигурации контейнера LXC. Как только вы закончите, нажмите + Икс за которым следует буква 'Y' и <Ввод> чтобы сохранить файл конфигурации контейнера LXC.

Теперь запустите контейнер LXC с панели управления Proxmox VE 8.

Если передача NVIDIA GPU прошла успешно, контейнер LXC должен запуститься без каких-либо ошибок, и вы должны увидеть файлы устройств NVIDIA в каталоге «/dev» контейнера.

$ лс -левый / разработчик / Нвидиа *

$ лс -левый / разработчик / дри

Установка драйверов графического процессора NVIDIA в контейнере Proxmox VE 8 LXC

Для демонстрации мы используем контейнер Ubuntu 22.04 LTS LXC на нашем сервере Proxmox VE 8. Если вы используете другой дистрибутив Linux в контейнере LXC, ваши команды будут немного отличаться от наших. Поэтому обязательно настройте команды в зависимости от дистрибутива Linux, который вы используете в контейнере.

Вы можете найти версию драйверов NVIDIA GPU, установленную на вашем сервере Proxmox VE 8, с помощью команды «nvidia-smi». Как видите, на нашем сервере Proxmox VE 8 установлены драйверы NVIDIA GPU версии 535.146.02. Итак, мы также должны установить драйверы NVIDIA GPU версии 535.146.02 в наш контейнер LXC.

$ nvidia-smi

Сначала установите CURL в контейнер LXC следующим образом:

$ подходящее обновление && подходящий установить завиток

CURL должен быть установлен в контейнере LXC.

Чтобы установить драйверы графического процессора NVIDIA версии 535.146.02 (скажем), экспортируйте переменную среды NVIDIA_VERSION и запустите команду CURL (в контейнере), чтобы загрузить необходимую версию установочного файла драйверов графического процессора NVIDIA.

$ экспорт NVIDIA_VERSION '=' '535.146.02'

$ локон 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .бегать'

Правильную версию установочного файла драйверов графического процессора NVIDIA следует загрузить в контейнер LXC, как показано на следующем снимке экрана:

Теперь добавьте исполняемое разрешение в файл установщика драйверов NVIDIA GPU в контейнере следующим образом:

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

Чтобы установить драйверы графического процессора NVIDIA в контейнер, запустите файл установщика драйверов графического процессора NVIDIA с параметром «-no-kernel-module». вариант следующий:

$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-ядерный-модуль

Когда вы увидите эту опцию, выберите «ОК» и нажмите <Ввод> .

Выберите «ОК» и нажмите <Ввод> .

Выберите «Да» и нажмите <Ввод> .

Выберите «ОК» и нажмите <Ввод> .

Драйверы графического процессора NVIDIA устанавливаются в контейнер LXC. Это займет несколько секунд.

Когда вы увидите это приглашение, выберите «Да» и нажмите <Ввод> .

Выберите «ОК» и нажмите <Ввод> . Драйверы графического процессора NVIDIA должны быть установлены в контейнере LXC.

Чтобы убедиться, что драйверы графического процессора NVIDIA установлены и работают, запустите команду «nvidia-smi» в контейнере LXC. Как видите, драйвер графического процессора NVIDIA версии 535.146.02 (та же версия, что установлена ​​на сервере Proxmox VE 8) установлен в контейнере LXC и правильно определил наш графический процессор NVIDIA RTX 4070.

$ nvidia-smi

Установка NVIDIA CUDA и cuDNN в контейнер Proxmox VE 8 LXC

Для демонстрации мы используем контейнер Ubuntu 22.04 LTS LXC на нашем сервере Proxmox VE 8. Если вы используете другой дистрибутив Linux в контейнере LXC, ваши команды будут немного отличаться от наших. Поэтому обязательно настройте команды в зависимости от дистрибутива Linux, который вы используете в контейнере.

Чтобы установить NVIDIA CUDA и cuDNN в контейнер Ubuntu 22.04 LTS Proxmox VE 8, выполните в контейнере следующую команду:

$ подходящий установить build-essential nvidia-cuda-toolkit nvidia-cudnn

Для подтверждения установки нажмите «Y», а затем нажмите <Ввод> .

Необходимые пакеты загружаются и устанавливаются. Это займет некоторое время.

Когда вы увидите это окно, выберите «ОК» и нажмите <Ввод> .

Выберите «Я согласен» и нажмите <Ввод> .

Установка должна продолжиться.

Установщик загружает архив библиотеки NVIDIA cuDNN с сайта NVIDIA. Это большой файл, поэтому его создание занимает много времени.

После загрузки архива библиотеки NVIDIA cuDNN установка должна продолжиться в обычном режиме.

На этом этапе NVIDIA CUDA и cuDNN должны быть установлены в контейнер Ubuntu 22.04 LTS Proxmox VE 8 LXC.

Проверка работы ускорения NVIDIA CUDA в контейнере Proxmox VE 8 LXC

Чтобы проверить, правильно ли установлена ​​NVIDIA CUDA, проверьте, доступна ли команда «nvcc» в контейнере Proxmox VE 8 следующим образом:

$ НВКК --версия

Как видите, в нашем контейнере Proxmox VE 8 установлена ​​NVIDIA CUDA 11.5.

Теперь давайте напишем, скомпилируем и запустим простую программу CUDA C и проверим, все ли работает так, как ожидалось.

Сначала создайте каталог проекта «~/code» в контейнере Proxmox VE 8, чтобы файлы были организованы.

$ мкдир ~ / код

Перейдите в каталог проекта «~/code» следующим образом:

$ CD `/ код

Создайте новый файл типа «hello.cu» в каталоге «~/code» контейнера Proxmox VE 8 и откройте его в текстовом редакторе nano:

$ нано hello.cu

Введите следующие строки кода в файл hello.cu:

#include

__global__ void SayHello ( ) {
печать ( «Привет, мир от ГПУ! \п ' ) ;
}

int главный ( ) {
печать ( «Привет, мир от процессора! \п ' ) ;

скажи привет << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;

возвращаться 0 ;
}

Как только вы закончите, нажмите + Икс за которым следует «Y» и <Ввод> чтобы сохранить файл «hello.cu».

Чтобы скомпилировать программу CUDA «hello.cu» в контейнере Proxmox VE 8, выполните следующие команды:

$ nvcc hello.cu привет

Теперь вы можете запустить программу CUDA «hello» в контейнере Proxmox VE 8 следующим образом:

$ . / привет

Если контейнер Proxmox VE 8 может использовать графический процессор NVIDIA для ускорения NVIDIA CUDA, программа напечатает две строки, как показано на следующем снимке экрана.

Если графический процессор NVIDIA недоступен из контейнера Proxmox VE 8, программа напечатает только первую строку «Hello world from CPU!», а не вторую строку.

Заключение

В этой статье мы показали вам, как передать графический процессор NVIDIA с хоста Proxmox VE 8 в контейнер Proxmox VE 8 LXC. Мы также показали вам, как установить ту же версию драйверов графического процессора NVIDIA в контейнер Proxmox VE 8, что и на хосте Proxmox VE. Наконец, мы показали вам, как установить NVIDIA CUDA и NVIDIA cuDNN в контейнер Ubuntu 22.04 LTS Proxmox VE 8, а также скомпилировать и запустить простую программу NVIDIA CUDA в контейнере Proxmox VE 8.

Использованная литература: