From 2e35a35eb933e7564f73e9d27a97874df5276ef0 Mon Sep 17 00:00:00 2001 From: TheSt1tch Date: Sat, 9 Mar 2024 13:41:09 +0500 Subject: [PATCH] add Proxmox LXC Nvidia --- docs/images/proxmox/proxmox-nvidia-1.png | Bin 0 -> 13592 bytes docs/proxmox/nvidia-lxc.md | 318 +++++++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 319 insertions(+) create mode 100644 docs/images/proxmox/proxmox-nvidia-1.png create mode 100644 docs/proxmox/nvidia-lxc.md diff --git a/docs/images/proxmox/proxmox-nvidia-1.png b/docs/images/proxmox/proxmox-nvidia-1.png new file mode 100644 index 0000000000000000000000000000000000000000..61bd786fc5ebfd832daf5dac68a99164c52752e6 GIT binary patch literal 13592 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 mranr9p /etc/modprobe.d/blacklist-nouveau.conf +update-initramfs -u +reboot +``` +Устанавливаем пакеты, необходимые для сборки драйверов ядра NVIDIA (нужны только на хосте) +``` +apt install build-essential +``` +Установливаем заголовки pve, соответствующие вашему текущему ядру. Для старых версий нужно использовать `pve-headers-$(uname -r)` +``` +apt install proxmox-headers-$(uname -r) +``` + +Скачиваем и устанавливаем драйвер nvidia. 550.54.14 был последним на момент написания статьи. +``` +wget -O NVIDIA-Linux-x86_64-550.54.14.run https://ru.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run +chmod +x NVIDIA-Linux-x86_64-550.54.14.run +./NVIDIA-Linux-x86_64-550.54.14.run --check +./NVIDIA-Linux-x86_64-550.54.14.run +``` +!!! tip + + При установке, будет выбор что ставить дополнительно. В пунктах, перечисленных ниже, нужно ответить **No** + + - install 32bit compability drivers + - should update X config + +После установки драйверов нужно добавить несколько правил udev. Это необходимо для того, чтобы гарантировать загрузку правильных модулей ядра и создание всех соответствующих файлов устройств при загрузке. + +``` title="добавляем модули ядра" +echo -e '\n# load nvidia modules\nnvidia-drm\nnvidia-uvm' >> /etc/modules-load.d/modules.conf +``` +добавьте следующее в `/etc/udev/rules.d/70-nvidia.rules` - создаст соответствующие файлы устройств в `/dev/` во время загрузки +``` +KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'" +KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*'" +SUBSYSTEM=="module", ACTION=="add", DEVPATH=="/module/nvidia", RUN+="/usr/bin/nvidia-modprobe -m" +``` +Чтобы избежать выгрузки модуля драйвера/ядра всякий раз, когда графический процессор не используется, нужно запустить службу сохранения, предоставляемую Nvidia . Он становится доступен после установки драйвера. + +Копируем и извлекаем. +``` +cp /usr/share/doc/NVIDIA_GLX-1.0/samples/nvidia-persistenced-init.tar.bz2 . +bzip2 nvidia-persistenced-init.tar.bz2 +tar -xf nvidia-persistenced-init.tar +``` +Удаляем старый. +``` +rm /etc/systemd/system/nvidia-persistenced.service +``` +Устанавливаем. +``` +chmod +x nvidia-persistenced-init/install.sh +./nvidia-persistenced-init/install.sh +``` +Проверка, что все ОК. +``` +systemctl status nvidia-persistenced.service +rm -rf nvidia-persistenced-init* +``` +Если до этого момента не было ошибок, то можно перезагрузить хост Proxmox. После перезагрузки, введя команду `nvidia-smi`, можно увидеть информацию про видеокарту. +``` +root@pve1:~# nvidia-smi +Sat Mar 9 12:59:57 2024 ++-----------------------------------------------------------------------------------------+ +| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 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 NVIDIA GeForce GTX 1050 Ti On | 00000000:03:00.0 Off | N/A | +| 0% 35C P8 N/A / 75W | 4MiB / 4096MiB | 0% Default | +| | | N/A | ++-----------------------------------------+------------------------+----------------------+ + ++-----------------------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=========================================================================================| +| No running processes found | ++-----------------------------------------------------------------------------------------+ +``` +Проверим работу службы: +``` +root@pve1:~# systemctl status nvidia-persistenced.service +● nvidia-persistenced.service - NVIDIA Persistence Daemon + Loaded: loaded (/lib/systemd/system/nvidia-persistenced.service; enabled; vendor preset: enabled) + Active: active (running) since Sat 2024-03-09 00:38:15 +05; 12h ago + Process: 1543 ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced (code=exited, status=0/SUCCESS) + Main PID: 1546 (nvidia-persiste) + Tasks: 1 (limit: 76887) + Memory: 944.0K + CPU: 328ms + CGroup: /system.slice/nvidia-persistenced.service + └─1546 /usr/bin/nvidia-persistenced --user nvidia-persistenced + +Mar 09 00:38:14 ekb-pve1 systemd[1]: Starting NVIDIA Persistence Daemon... +Mar 09 00:38:14 ekb-pve1 nvidia-persistenced[1546]: Started (1546) +Mar 09 00:38:15 ekb-pve1 systemd[1]: Started NVIDIA Persistence Daemon. +``` +Проверим, что появились устройства в `/dev/` +``` +root@pve1:~# ls -alh /dev/nvidia* +crw-rw-rw- 1 root root 195, 0 Mar 9 00:38 /dev/nvidia0 +crw-rw-rw- 1 root root 195, 255 Mar 9 00:38 /dev/nvidiactl +crw-rw-rw- 1 root root 195, 254 Mar 9 00:38 /dev/nvidia-modeset +crw-rw-rw- 1 root root 511, 0 Mar 9 00:38 /dev/nvidia-uvm +crw-rw-rw- 1 root root 511, 1 Mar 9 00:38 /dev/nvidia-uvm-tools + +/dev/nvidia-caps: +total 0 +drwxr-xr-x 2 root root 80 Mar 9 00:38 . +drwxr-xr-x 21 root root 5.0K Mar 9 03:03 .. +cr-------- 1 root root 236, 1 Mar 9 00:38 nvidia-cap1 +cr--r--r-- 1 root root 236, 2 Mar 9 00:38 nvidia-cap2 +``` +Понять что все хорошо - есть минимум 5 файлов `/dev/nvidia*`. + +## LXC-контейнер + +Теперь, нужно добавить конфигурацию в LXC-контейнер. Останаливаем работу контейнера и вносим изменения в файле конфигурации LXC. + +Отредактируем `/etc/pve/lxc/101.conf` и добавим: +``` +lxc.cgroup2.devices.allow: c 195:* rwm +lxc.cgroup2.devices.allow: c 237:* rwm +lxc.cgroup2.devices.allow: c 240:* rwm +``` +Монтирование устройств nvidia в контейнер LXC +``` +lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file +lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file +lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file +lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file +lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file +lxc.mount.entry: /dev/nvidia-caps/nvidia-cap1 dev/nvidia-caps/nvidia-cap1 none bind,optional,create=file +lxc.mount.entry: /dev/nvidia-caps/nvidia-cap2 dev/nvidia-caps/nvidia-cap2 none bind,optional,create=file +``` +Числа в строках с `cgroup2` взяты из 5 столбца в списках устройств выше (команда `ls -alh /dev/nvidia*`) + +После запускаем контейнер и приступаем к установке драйева Nvidia. Будем ставить без драйеверов ядра. +``` +dpkg --add-architecture i386 +apt update +apt install libc6:i386 +wget -O NVIDIA-Linux-x86_64-550.54.14.run https://ru.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run +chmod +x NVIDIA-Linux-x86_64-550.54.14.run +./NVIDIA-Linux-x86_64-550.54.14.run --check +./NVIDIA-Linux-x86_64-550.54.14.run --no-kernel-module +``` +Как и для хоста, отказываем от обновления конфигурации X + +После, выполняем reboot контейнеру LXC. Проверим, что все работает используя `ls -alh /dev/nvidia*` и `nvidia-smi`. Вывод будет таким же, как и для хоста. + +## Docker контейнер + +Буду считать, что Plex уже работает, но транскодинг выполняется на процессоре. + +Нужно установить **NVIDIA Container Toolkit**: +``` +apt install -y curl +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/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | tee /etc/apt/sources.list.d/nvidia-container-toolkit.list + +apt update +apt install nvidia-container-toolkit + +systemctl daemon-reload +systemctl restart docker +``` +Проверить, что Docker работает с поддержкой GPU можно через контейнер: +``` +user@media:~$ docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi +Sat Mar 9 08:17:54 2024 ++-----------------------------------------------------------------------------------------+ +| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 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 NVIDIA GeForce GTX 1050 Ti Off | 00000000:03:00.0 Off | N/A | +| 0% 35C P8 N/A / 75W | 4MiB / 4096MiB | 0% Default | +| | | N/A | ++-----------------------------------------+------------------------+----------------------+ + ++-----------------------------------------------------------------------------------------+ +| Processes: | +| GPU GI CI PID Type Process name GPU Memory | +| ID ID Usage | +|=========================================================================================| +| No running processes found | ++-----------------------------------------------------------------------------------------+ +``` + +## Plex + GPU + +Нужно внести допстрочки в файл docker-compose, чтобы Plex начал видеть нашу видеокарту. Я приведу полный пример, как в итоге должен выглядеть файл. + +```yaml hl_lines="10-14 29 30" +version: "3.7" + +services: + plex: + container_name: plex + image: linuxserver/plex:latest + profiles: + - plex + restart: unless-stopped + deploy: + resources: + reservations: + devices: + - capabilities: [gpu] + ports: + - "32400:32400" + - "32400:32400/udp" + security_opt: + - no-new-privileges:true + volumes: + - ./plex:/config + - ./plex/temp:/transcode + - /mnt:/mnt:ro + environment: + - ADVERTISE_IP="http://172.18.1.250:32400/" + - PUID=$PUID + - PGID=$PGID + - TZ=$TZ + - VERSION=docker + - PLEX_CLAIM=$PLEX_CLAIM + - NVIDIA_VISIBLE_DEVICES=all + - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility +``` + +Проверить что все работает, можно зайдя на свой сервер Plex и запустить какой нить фильм. В статистике, будет что то типо такого: + +![](../images/proxmox/proxmox-nvidia-1.png) + +## Обновление + +Каждый раз, когда обновляется ядро, нужно переустановить драйвер на хосте Proxmox. При установке той же версии, что и стояла изначально, процесс прост: перезапустить исходную установку драйвера. В контейнере LXC ничего делать не нужно, так как версия остается той же) +``` +./NVIDIA-Linux-x86_64-550.54.14.run +reboot +``` + +### Обновление драйвера + +При обновлении драйвера Nvidia, нужно выполнеить несколько дополнительных шагов. Если на хосте Proxmox уже есть работающий драйвер, то нужно для анчала удалить старый драйвер (иначе будут проблемы: при выгрузке модуля, будет происходить моментальная его загрузка обратно) + +Удалим старый драйвер +``` +./NVIDIA-Linux-x86_64-510.47.03.run --uninstall +reboot +``` +Если было обновление ядра, то нужно скачать заново заголовки. Для старых версий нужно использовать `pve-headers-$(uname -r)` +``` +apt install proxmox-headers-$(uname -r) +``` +Установим новую версию. Для примера версия та же что и выше. +``` +wget -O NVIDIA-Linux-x86_64-550.54.14.run https://ru.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run +chmod +x NVIDIA-Linux-x86_64-550.54.14.run +./NVIDIA-Linux-x86_64-550.54.14.run --check +./NVIDIA-Linux-x86_64-550.54.14.run +reboot +``` +!!! tip + + При установке, будет выбор что ставить дополнительно. В пунктах, перечисленных ниже, нужно ответить **No** + + - install 32bit compability drivers + - should update X config + +После перезагрузки, проверим что все работает, используя `nvidia-smi` + +Проверим, что номера cgroup не изменились. если нужно, то меняем их под новые значения в файле конфигурации LXC + +Далее, обновляем драйвера в контейнере LXC + +``` +wget -O NVIDIA-Linux-x86_64-550.54.14.run https://ru.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run +chmod +x NVIDIA-Linux-x86_64-550.54.14.run +./NVIDIA-Linux-x86_64-550.54.14.run --check +./NVIDIA-Linux-x86_64-550.54.14.run --no-kernel-module +``` +Как и для хоста, отказываем от обновления конфигурации X + +После, выполняем reboot контейнеру LXC. Проверим, что все работает используя `ls -alh /dev/nvidia*` и `nvidia-smi`. Вывод будет таким же, как и для хоста. + +Обновим **NVIDIA Container Toolkit**: +``` +curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg +curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | tee /etc/apt/sources.list.d/nvidia-container-toolkit.list + +apt update +apt install nvidia-container-toolkit +apt upgrade +``` +Перезагружаем контейнер LXC. Все должно рбаотать с новым драйвером. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index fd3f8c2..6b993a0 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -118,6 +118,7 @@ nav: - Proxmox VE: - proxmox/index.md - CT Template: proxmox/ct-template.md + - Nvidia LXC: proxmox/nvidia-lxc.md - Умный дом: - Home Assistant: - Установка на Debian: smart-home/hass/install-hass-debian.md