{ "meta": { "title": "Añadir GPU a LXC | Documentación de ProxMenux", "description": "Comparte GPU Intel, AMD o NVIDIA con LXC. ProxMenux configura dispositivos, grupos y bibliotecas según la distribución; la aplicación debe admitir y tener configurada la aceleración." }, "header": { "title": "Añadir GPU a LXC", "description": "Comparte acceso a GPU con LXC mediante dispositivos del host. El controlador sigue en el host; las aplicaciones usan bibliotecas compatibles y requieren su propia configuración.", "section": "Hardware: GPU y Coral-TPU" }, "intro": { "title": "Qué hace", "body": "Añade entradas dev<N> a /etc/pve/lxc/<ctid>.conf para los dispositivos /dev/dri/*, /dev/kfd o /dev/nvidia* que correspondan. Arranca el LXC, instala paquetes según la distribución y, en Intel/AMD, alinea los grupos video y render. La aceleración requiere hardware y bibliotecas compatibles y configurar la app." }, "compare": { "heading": "Compartir con LXC frente a asignar a una VM", "intro": "LXC comparte el kernel y puede compartir la GPU entre host y contenedores. Con passthrough completo a una VM, el dispositivo se dedica a esa VM y deja de estar disponible para el controlador del host.", "headerFeature": "Característica", "headerLxc": "LXC (esta página)", "headerVm": "VM", "rows": [ { "feature": "¿El host sigue usando la GPU?", "lxc": "Sí", "vm": "No — exclusiva de la VM" }, { "feature": "¿Varios contenedores compartiendo una GPU?", "lxc": "Sí", "vm": "No" }, { "feature": "¿Requiere IOMMU / VFIO en el host?", "lxc": "No", "vm": "Sí" }, { "feature": "¿Hace falta reiniciar?", "lxc": "Normalmente no (solo reiniciar el CT)", "vm": "Al cambiar controlador o IOMMU del host; no con cada asignación" }, { "feature": "Sistemas operativos invitados", "lxc": "Solo Linux (LXC es solo Linux)", "vm": "SO invitado admitido con controlador GPU compatible" } ] }, "prereqs": { "title": "Antes de empezar", "gpu": "GPU en el host Intel, AMD o NVIDIA, detectada mediante lspci.", "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'", "vfio": "La GPU no debe estar vinculada a vfio-pci. Necesita el controlador nativo del host. Si está asignada a una VM, el script ofrece Cambiar modo de GPU.", "nvidia": "Para NVIDIA: instala primero el controlador en el host. Las bibliotecas del contenedor deben ser compatibles con su versión. Usa Instalar controladores NVIDIA en el host.", "nvidiaCheck": "nvidia-smi", "container": "Un LXC existente. El script no lo crea. Admite ambos modos; no requiere siempre un contenedor privilegiado. Deben coincidir los dispositivos y permisos numéricos de la aplicación." }, "unpriv": { "title": "Admite contenedores privilegiados y sin privilegios", "body": "El script escribe entradas dev<N> en la config del LXC y, en contenedores unprivileged, alinea los GIDs de video y render entre host y contenedor para que los nodos de la GPU sean accesibles desde dentro sin tener que tocar manualmente lxc.idmap." }, "running": { "heading": "Ejecutar el instalador", "body": "Abre ProxMenux y ve a Hardware: GPU y Coral-TPU → Añadir GPU a LXC.", "imageAlt": "Opción del menú para añadir GPU a LXC" }, "howRuns": { "heading": "Cómo funciona el script", "body": "Selecciona contenedor y familias de GPU y supera las comprobaciones. Después detiene el LXC y cambia su configuración, sin confirmación final adicional. La limpieza opcional de VFIO se confirma aparte y puede modificar antes el host." }, "walkthrough": { "heading": "Proceso paso a paso", "detect": { "title": "Detectar GPUs del host", "body": "Busca controladoras GPU con lspci. Para NVIDIA comprueba el módulo nvidia y nvidia-smi; usa la versión detectada para elegir el .run del contenedor.", "tipTitle": "¿NVIDIA no está listo?", "tipBody": "Si falta el módulo o no funciona NVIDIA en el host, usa primero Instalar controladores NVIDIA en el host y verifica el controlador antes de volver." }, "pickCt": { "title": "Elige un contenedor LXC", "body": "Lista los LXC admitidos por ID y nombre. Excluye OCI: sus dispositivos se gestionan en Apps del gestor OCI. Detiene el LXC si está en marcha, lo arranca para instalar y normalmente recupera su estado inicial.", "imageAlt": "Selección de un contenedor LXC existente" }, "selectGpu": { "title": "Selecciona las familias de GPU", "body": "Selecciona familias por fabricante, no un dispositivo PCI aislado. Intel/AMD añaden los nodos DRI previstos; NVIDIA añade sus dispositivos disponibles, que pueden corresponder a varias tarjetas. Una sola familia se selecciona automáticamente. Revisa la lista final, sobre todo con varias GPU.", "imageAlt": "Lista de familias GPU detectadas con nombre y dirección PCI" }, "preflight": { "title": "Comprobaciones previas", "imageAlt": "Oferta para cambiar el modo de una GPU vinculada a vfio-pci", "intro": "Tres comprobaciones, cualquiera de las cuales puede bloquearte o redirigirte:", "items": [ "Protección SR-IOV. El asistente bloquea una VF o PF con VF activas. Es una limitación de su selección amplia de dispositivos, no una prohibición universal en LXC. Configura esos dispositivos por separado.", "Vinculada a vfio-pci. El controlador nativo no puede crear /dev/dri/* o /dev/nvidia*. Ofrece Cambiar modo de GPU; sigue las indicaciones de reinicio y vuelve después.", "Ya configurada. Si están todos los dispositivos, sale sin reinstalar bibliotecas. Si solo falta alguna familia seleccionada, continúa con ella." ] }, "applyConfig": { "title": "Aplica los cambios de config del LXC", "body1": "Detiene el LXC si está en marcha y edita /etc/pve/lxc/<ctid>.conf. Las entradas dev<N> llevan el GID video o render del host. Sustituye las líneas lxc.mount.entry de /dev/dri por entradas dev:. Revisa configuración y permisos resultantes.", "body2": "Ejemplo después de Intel + NVIDIA en el mismo contenedor:" }, "installDrivers": { "title": "Arranca el contenedor e instala los drivers dentro", "body": "Arranca el contenedor y espera hasta unos 30 segundos a que responda pct exec. Detecta la distribución con /etc/os-release e instala los paquetes correspondientes.", "headerDistro": "Distribución", "headerInt": "Intel / AMD", "headerNvidia": "NVIDIA", "rows": [ { "distro": "Alpine", "intel": "apk add mesa-va-gallium intel-media-driver libva-utils", "nvidia": "apk add nvidia-utils" }, { "distro": "Arch / Manjaro", "intel": "pacman -Sy intel-media-driver mesa libva-utils", "nvidia": "pacman -Sy nvidia-utils" } ], "debianDistro": "Debian / Ubuntu / otras", "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo", "debianNvidia": "Extrae .run en el host → pct push → instala con --no-kernel-modules --no-dkms.", "whyTitle": "Por qué usa el instalador NVIDIA .run en Debian", "whyBody": "Los paquetes del repositorio pueden no coincidir con el host. Las bibliotecas deben coincidir con el módulo cargado para herramientas NVML como nvidia-smi. En Debian/glibc extrae y comprime en el host el .run de esa versión, lo transfiere con pct push e instala con --no-kernel-modules --no-dkms. Alpine y Arch usan paquetes: verifica sus versiones." }, "alignGids": { "title": "Alinear GIDs y restaurar el estado", "body1": "En Intel/AMD, lee los GID del host para video y render; usa 44/104 solo como alternativa. Ajusta /etc/group dentro del LXC; si solo hay NVIDIA, omite este paso. video:44 y render:104 son ejemplos, no valores universales. Verifica grupos de la app y permisos efectivos.", "body2": "Al completar normalmente, vuelve a detener el LXC si inicialmente estaba parado; si estaba funcionando, lo deja activo. Ante un fallo de arranque o instalación, revisa el estado final y el registro." } }, "vendors": { "heading": "Notas por fabricante", "intelHeading": "iGPU Intel", "intelBody": "La aceleración Intel, incluido Quick Sync, depende de generación, códecs y configuración de la app. Comparte los nodos que existan entre /dev/dri/card0, card1, renderD128 y renderD129; no añade otros números. Debe crearlos antes el controlador nativo del host, como i915.", "amdHeading": "AMD", "amdBody": "AMD usa DRI para Mesa/VA-API. Si existe /dev/kfd en el host, lo comparte también. ROCm/OpenCL requiere hardware y paquetes compatibles; compartir el dispositivo no instala toda la pila ROCm.", "nvidiaHeading": "NVIDIA", "nvidiaBody": "Comparte /dev/nvidia* disponibles. Coincidir la versión del controlador es esencial para nvidia-smi. Debian/glibc usa el .run de la versión del host; Alpine/Arch, repositorios. Con menos de 2048 MiB de RAM configurada, la ruta Debian ofrece aumentarla temporalmente y restaurarla; exige 1500 MiB libres en disco.", "updateTitle": "Tras actualizar NVIDIA en el host, comprueba las bibliotecas LXC", "updateBody": "Bibliotecas antiguas pueden provocar incompatibilidad en nvidia-smi. El instalador NVIDIA del host ofrece actualizar LXC. Repetir Añadir GPU a LXC puede salir si ya existen los dispositivos: no garantiza actualizar bibliotecas. Verifica versiones y actualiza paquetes o el instalador de usuario apropiado." }, "verification": { "heading": "Verificación", "body": "Entra en el contenedor y verifica que ve la GPU y puede utilizarla." }, "troubleshoot": { "heading": "Solución de problemas", "mismatchTitle": "nvidia-smi: Failed to initialize NVML: Driver/library version mismatch", "mismatchBody": "Las bibliotecas no coinciden con el módulo activo. Verifica versiones y actualiza el espacio de usuario del LXC. El .run almacenado sirve para Debian/glibc, pero Añadir GPU a LXC puede salir si ya están todos los dispositivos.", "denyTitle": "Permission denied en /dev/dri/renderD128 dentro del contenedor", "denyBody": "Revisa dispositivo y permisos numéricos de render; comprueba que el usuario de la app pertenezca a render. Si está disponible, añádelo a render con usermod -aG render <user>, sustituyendo el marcador por la cuenta real. Reinicia su sesión. Cambiar privilegios no es una solución general.", "vainfoTitle": "vainfo dice: VA-API version 1.xx; failed to initialize", "vainfoBody": "Comprueba acceso y controlador VA-API. Los paquetes varían por distribución: ejemplos son intel-media-driver para Intel modernas compatibles, i965-va-driver para antiguas compatibles y mesa-va-drivers para AMD. El mensaje no prueba por sí solo que falte un paquete.", "logTitle": "Registro de instalación", "logBody": "Cada ejecución escribe /tmp/add_gpu_lxc.log en el host. Adjunta el registro al pedir ayuda." }, "related": { "heading": "Relacionado", "items": [ { "label": "Instalar drivers NVIDIA (Host)", "href": "/docs/hardware/nvidia-host", "tail": " — instala primero el controlador del host para compartir NVIDIA." }, { "label": "Añadir GPU a VM (Passthrough)", "href": "/docs/hardware/gpu-vm-passthrough", "tail": " — alternativa para dedicar una GPU a una VM." }, { "label": "Cambiar modo de GPU (VM ↔ LXC)", "href": "/docs/hardware/switch-gpu-mode", "tail": " — cambia la GPU entre compartir con LXC y asignar a VM." }, { "label": "Comandos de GPU Passthrough", "href": "/docs/help-info/gpu-commands", "tail": " — referencia rápida para comandos shell relacionados." } ] } }