Hace ya varios días que estuve peleándome con Proxmox para conseguir que mis contenedores LXC pudieran usar la GPU NVIDIA RTX 5060 y correr modelos de IA de forma local. Aquí dejo todo el proceso paso a paso, por si mi “yo” del futuro (o cualquier persona curiosa) necesita volver a hacerlo o simplemente le resulta de utilidad. En mi caso monté un servidor Proxmox sobre Debian 12 y necesitaba que los contenedores en Ubuntu pudieran “ver” la tarjeta gráfica para ejecutar servicios como Ollama o vLLM con aceleración CUDA.
Preparar el host Proxmox
Tener la GPU correctamente reconocida
# Instala el run-file oficial
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/575.51.02/NVIDIA-Linux-x86_64-575.51.02.run
chmod +x NVIDIA-Linux-*.run
./NVIDIA-Linux-*.run --dkms --silent
# Confirma que el kernel carga el módulo
nvidia-smi
Ver las entradas de dispositivo host
ls -l /dev/nvidia*
# Deben existir:
# /dev/nvidia0
# /dev/nvidiactl
# /dev/nvidia-uvm
# /dev/nvidia-uvm-tools
Modificar el fichero de configuración del contenedor
Edita /etc/pve/lxc/<VMID>.conf con:
sudo nano /etc/pve/lxc/<VMID>.conf
Has de sustituir <VMID> por el ID numérico del contenedor.
Añada lo siguiente al .conf
Al final del fichero añade estas líneas para permitir el acceso a los nodos de carácter NVIDIA y montar los dispositivos NVIDIA dentro del contenedor. Si te fijas, coinciden con las rutas de las entradas listadas anteriormente.
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.cgroup2.devices.allow: c 234:* rwm
lxc.cgroup2.devices.allow: c 237:* rwm
lxc.cgroup2.devices.allow: c 238:* rwm
lxc.cgroup2.devices.allow: c 239:* rwm
lxc.cgroup2.devices.allow: c 240:* rwm
lxc.cgroup2.devices.allow: c 507:* rwm
lxc.cgroup2.devices.allow: c 510:* 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-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
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/card1 dev/dri/card1 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
.conf debería verse así:
arch: amd64
cpulimit: 10
features: nesting=1
hostname: machine-learning
memory: 32768
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=4A:23:40:4C:78:7B,ip=dhcp,type=veth
net1: name=eth1,bridge=vmbr2,firewall=1,hwaddr=42:EB:1A:B1:49:F2,ip=10.0.7.250/24,type=veth
onboot: 1
ostype: ubuntu
rootfs: mofp0:250/vm-250-disk-1.raw,size=250G
swap: 16384
unprivileged: 1
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.cgroup2.devices.allow: c 234:* rwm
lxc.cgroup2.devices.allow: c 237:* rwm
lxc.cgroup2.devices.allow: c 238:* rwm
lxc.cgroup2.devices.allow: c 239:* rwm
lxc.cgroup2.devices.allow: c 240:* rwm
lxc.cgroup2.devices.allow: c 507:* rwm
lxc.cgroup2.devices.allow: c 510:* 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-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
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/card1 dev/dri/card1 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
Luego reinicia el contenedor (lo puedes hacer por interfaz si no quieres hacerlo por el terminal de proxmox):
pct restart <VMID>
Con todo esto configurado y el contenedor reiniciado, el mismo instalador para los controladores Nvidia en el host Proxmox deberá ejecutarse en el contenedor.
Configurar Nvidia en el contenedor
Desde la consola dentro del contenedor:
# Instala el run-file oficial
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/575.51.02/NVIDIA-Linux-x86_64-575.51.02.run
# Hazlo ejecutable
chmod +x NVIDIA-Linux-x86_64-575.51.02.run
# Instálalo sin tocar el kernel (solo utilities)
sudo ./NVIDIA-Linux-x86_64-575.51.02.run \
--utility-prefix=/usr \
--no-kernel-module \
--silent
# Confirma que se carga el módulo
nvidia-smi
Deberías ver la tabla con tu RTX 5060 Ti, driver 575.51.02 y estadísticas de VRAM/uso desde dentro del contenedor.
Ejecutar Docker con GPU
En mi caso no he sido capaz de que docker me funcione con GPU dentro de un contenedor proxmox. Luego de varias horas he desistido y he optado por hacer un contenedor Proxmox con Ubuntu y no usar docker para las herramientas que ejecutan la IA.
Conclusión
Ha sido un dolor configurar todo esto en ProxMox y encontrar documentación para que funcione. Una página que recomiendo que os leáis es estos otros blog, que me han ayudado bastante, aunque no me han funcionado del todo y he tenido que adaptarlo para mi caso de uso.
https://yomis.blog/nvidia-gpu-in-proxmox-lxc/
https://jocke.no/2025/04/20/plex-gpu-transcoding-in-docker-on-lxc-on-proxmox-v2/