Для того чтобы пробросить GPU в контейнер LXC, не обязательно иметь Tesla/Quadro. Это работает с любой видеокартой! Вот пример с обычной потребительской видеокартой Nvidia:
1. Установите драйверы на хост-машину... Лучший способ — установить драйверы напрямую с сайта Nvidia, потому что упакованные драйверы из apt не включают инструменты Nvidia UVM. Они вам, возможно, и не понадобятся, но они полезны, чтобы видеть, использует ли контейнер GPU. Для драйверов Nvidia вам понадобятся заголовки ядра вашей системы, gcc и make. Пример: `apt install pve-headers-5.15 gcc make` — затем перезагрузите систему и установите драйверы, а затем снова перезагрузите.
2. Bash: `root@proxmox:~# ls -l /dev/nvidiactl`
`crw-rw-rw- 1 root root 195, 255 Jun 27 13:44 /dev/nvidiactl`
`root@proxmox:~# ls -l /dev/nvidia-uvm`
`crw-rw-rw- 1 root root 505, 0 Jun 27 13:44 /dev/nvidia-uvm`
Видите, у меня там 195 и 505... У вас там может быть что-то другое. Вам нужно изменить это в строках cgroup2 ниже...
Остановите контейнер LXC...
Добавьте следующее в конфигурацию вашего LXC:
Bash: `lxc.cgroup2.devices.allow: c 195:* rwm`
`lxc.cgroup2.devices.allow: c 505:* rwm`
`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-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`
Запустите контейнер(ы) снова...
Войдите в контейнер через SSH...
Установите ту же версию драйвера, что и на хост-машине, но на этот раз с аргументом: `./NVIDIA-Linux-x86_64-515.48.07.run --no-kernel-module`
Возможно, вам потребуется перезагрузить контейнер — и вуаля, все готово!
Чтобы проверить, работает ли это, просто запустите что-нибудь в контейнере, например, видеокодирование/декодирование, что угодно...
Снова войдите в хост-машину через SSH и выполните: `nvidia-smi`
Там вы увидите, какой контейнер чем занимается и какой процент GPU он использует.
Для видеокарт AMD это похоже, но вам придется поискать инструкции в Google... То же самое для Intel.
В общем, пробросить GPU в контейнер LXC очень просто. И вы можете пробросить один и тот же GPU к тому количеству контейнеров, которое хотите. Единственное ограничение в том, что Nvidia, например, ограничивает декодирование/кодирование и т.д. только 3-5 одновременным потокам. То есть, 3-5 контейнеров могут одновременно получать доступ к GPU, в зависимости от видеокарты.
Однако проброс GPU в виртуальную машину — это совсем другая история. Если это выделенная видеокарта, то для одной виртуальной машины это тоже очень просто. Одна видеокарта для нескольких виртуальных машин = vGPU/MxGPU + это все очень баговано, в общем, забудьте об этом.
Единственная надежда, которую я вижу, — это если Intel выпустит графические карты Arc с поддержкой SR-IOV. Потому что SR-IOV — это единственный надежный и полностью рабочий способ пробросить что-то на несколько виртуальных машин без необходимости полагаться на сломанные драйверы.
Cheers.