GPU en Proxmox

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/

¿Necesitas un experto en Drupal?

Desarrollador Drupal senior, freelance, especializado en lo más complejo: migraciones, sitios multilingüe, plataformas SaaS e integración con Stripe. Uso IA para reducir tiempos y costes de entrega, con revisión experta en cada línea de código.

Sin agencias, sin intermediarios. Contacto directo con quien hace el trabajo.