{ "meta": { "title": "Cambiar modo GPU (VM ↔ LXC) | Documentación de ProxMenux", "description": "Cambia una GPU entre VFIO para VM y controlador nativo para LXC. ProxMenux detecta el controlador, pregunta cómo resolver asignaciones en conflicto, retira audio asociado y regenera initramfs si cambia la configuración del host." }, "header": { "title": "Cambiar modo GPU (VM ↔ LXC)", "description": "Cambia una GPU asignada entre acceso directo a VM y uso compartido en LXC. ProxMenux gestiona controlador, VFIO, módulos e initramfs y pregunta cómo tratar los invitados afectados. Revisa las opciones y verifica el resultado tras reiniciar.", "section": "Hardware: GPU y Coral-TPU" }, "intro": { "title": "Qué hace", "body": "Con vfio-pci, la GPU se reserva para una VM. Con el controlador nativo (i915 / amdgpu / nvidia), pueden compartirla el host y los LXC. Cambiar modo GPU gestiona vfio.conf, módulos bloqueados y referencias en invitados, y avisa de asignaciones pendientes." }, "graphics": { "lxcTitle": "Listo para contenedores LXC", "lxcDesc": "Driver nativo activo", "vmTitle": "Listo para passthrough a VM", "vmDesc": "Driver VFIO-PCI activo" }, "when": { "heading": "¿Cuándo debería usar esto?", "intro": "Úsalo si la GPU ya está asignada y quieres cambiar su uso:", "headerSituation": "Situación", "headerUse": "¿Usar esta página?", "rows": [ { "situation": "GPU libre, nunca asignada: quiero usarla en una VM.", "useRich": "No — usa Añadir GPU a VM" }, { "situation": "GPU libre, nunca asignada: quiero usarla en un LXC.", "useRich": "No — usa Añadir GPU a LXC" }, { "situationRich": "La GPU está en una VM vía vfio-pci, quiero usarla desde un LXC en su lugar.", "useRich": "Sí — esta página." }, { "situation": "La GPU está compartida con un LXC, quiero dedicarla a una VM.", "useRich": "Sí — esta página." }, { "situation": "Quiero retirar todas las asignaciones de esta GPU.", "use": "El modo LXC devuelve la GPU al controlador del host; la política de conflictos de VM puede eliminar las entradas hostpci, pero las entradas de dispositivo de los LXC hay que eliminarlas aparte. No deja la GPU sin controlador." } ] }, "prereqs": { "title": "Antes de empezar", "assigned": "Una GPU ya asignada a una VM por VFIO o a un LXC. Para la primera asignación, usa Añadir GPU a VM / LXC.", "iommu": "IOMMU debe estar activo en el host al pasar a modo VM. Depende del firmware y del kernel. Si al kernel en ejecución le falta intel_iommu=on o amd_iommu=on, el script lo añade con iommu=pt a /etc/kernel/cmdline (marca de raíz ZFS) o a /etc/default/grub y ejecuta proxmox-boot-tool refresh o update-grub. Revisa los avisos y reinicia cuando lo solicite.", "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1", "reboot": "Planifica un reinicio. Los cambios persistentes de controlador y arranque pueden requerir regenerar initramfs y reiniciar. El script muestra la solicitud al terminar.", "knowList": "Identifica las VM y LXC que usan la GPU. El script detecta referencias y pregunta qué hacer con cada invitado; conocerlos facilita revisar la selección." }, "blocklist": { "title": "No todas las GPUs son seguras para pasar a una VM", "body": "El script bloquea el modo VM para los ID 8086:5a84 y 8086:5a85 por su política de compatibilidad. Si coincide la GPU elegida, detiene el cambio a modo VM y vuelve a la selección de GPU, o sale si es la única GPU. Esta lista no impide pasar a LXC, aunque siguen aplicándose otras comprobaciones." }, "running": { "heading": "Ejecutar el script", "body": "Abre Hardware: GPU y Coral-TPU → Cambiar modo GPU (VM ↔ LXC) en ProxMenux.", "imageAlt": "Opción Cambiar modo GPU (VM ↔ LXC) en el menú de hardware" }, "howRuns": { "heading": "Cómo funciona el script", "body": "Revisas GPU y dirección antes del cambio principal. Una limpieza separada de VFIO antiguo puede pedir confirmación antes, y los invitados tienen sus propios diálogos de conflicto. Lee cada confirmación: no hay una única confirmación final para todos los cambios." }, "walkthrough": { "heading": "Proceso paso a paso", "detect": { "title": "Detectar GPU y controlador actual", "body": "Examina las controladoras VGA, 3D y Display del host y consulta /sys/bus/pci/devices/*/driver. Muestra nombre, dirección PCI y controlador actual de cada GPU para identificar su modo.", "imageAlt": "Checklist de GPU mostrando cada GPU detectada con su driver actual (vfio-pci / nvidia / amdgpu / i915) y slot PCI" }, "pickGpu": { "title": "Elegir las GPU que cambiar", "body": "Si hay una GPU, se selecciona sola. Si hay varias, puedes marcar más de una, pero deben estar en el mismo modo. Si mezclas modos, pide reducir la selección.", "tipTitle": "Cambiar varias GPU a la vez", "tipBody": "Por ejemplo: pasar tres NVIDIA a modo VM y luego devolver la iGPU a LXC. Son dos ejecuciones, cada una con un destino común, en lugar de cambiar cada tarjeta por separado." }, "direction": { "title": "Revisar la dirección propuesta", "intro": "Según el modo actual, el script propone el opuesto como destino:", "items": [ "VM → LXC: retira la asignación a vfio-pci para que el controlador nativo (nvidia, amdgpu, i915) pueda usar la GPU. En NVIDIA elimina las entradas BDF correspondientes de /etc/udev/rules.d/10-proxmenux-vfio-bind.rules para el próximo arranque.", "LXC → VM: prepara la asignación a vfio-pci. AMD / Intel bloquea el controlador nativo y usa options vfio-pci ids=…. En NVIDIA, nvidia solo se bloquea globalmente si todas las GPU NVIDIA del host están en VFIO; si no, las reglas BDF aplican driver_override=vfio-pci a los dispositivos de los grupos IOMMU afectados y las GPU NVIDIA externas a esos grupos conservan nvidia. Revisa cada miembro del grupo." ], "outro": "Confirma la dirección o cancela." }, "conflict": { "title": "Cómo tratar cada VM o LXC afectado", "body": "Revisa /etc/pve/lxc/*.conf por dispositivos según la familia del controlador y /etc/pve/qemu-server/*.conf por asignaciones PCI. En LXC no identifica cada tarjeta por BDF exacto. Revisa los invitados detectados y elige qué hacer con cada uno:", "headerPolicy": "Política", "headerEffect": "Efecto", "headerWhen": "Cuándo elegirla", "keepPolicy": "Conservar configuración y desactivar arranque automático", "keepEffect": "pct set CTID -onboot 0 o qm set VMID -onboot 0. Conserva las entradas de GPU.", "keepWhen": "Si piensas reutilizar el invitado cuando la GPU vuelva al modo anterior. Opción predeterminada conservadora.", "removePolicy": "Eliminar la GPU de la configuración", "removeEffect": "Retira las entradas hostpci / dev identificadas y las referencias antiguas compatibles.", "removeWhen": "Elígelo si el invitado debe funcionar sin GPU. Revisa antes la aplicación: el uso alternativo de CPU depende de ella y retirar el dispositivo no la reconfigura automáticamente.", "imageAlt": "Diálogo para elegir qué hacer con cada VM o LXC afectado" }, "audio": { "title": "Retirar asignaciones de audio asociadas al salir de VM", "body1": "Muchas GPU NVIDIA / AMD tienen audio HDMI en la función .1 del mismo slot; también puede haber audio adicional asignado. Al retirar la GPU pueden quedar entradas hostpci de audio obsoletas. Revisa qué dispositivos deben conservarse.", "body2": "Identifica las direcciones BDF de audio y muestra una lista para elegir qué retirar. También elimina sus ID vendor:device de /etc/modprobe.d/vfio.conf, solo si ninguna otra VM los usa." }, "apply": { "title": "Aplicar cambios al host y a los invitados", "body": "Tras confirmar, el script escribe los cambios en el host: vfio.conf, la lista de módulos bloqueados, los módulos y, para NVIDIA, la regla udev por BDF en /etc/udev/rules.d/10-proxmenux-vfio-bind.rules y el estado BDF en /etc/proxmenux/vfio-bind.bdfs. También aplica la política de conflictos elegida a cada VM/LXC afectado. Si la configuración del host ha cambiado, ejecuta update-initramfs -u -k all y después proxmox-boot-tool refresh; si no ha cambiado, omite ambos comandos." }, "reboot": { "title": "Reiniciar", "body": "Reinicia el host para aplicar la nueva asignación persistente. Puedes posponerlo, pero verifica el controlador activo antes de arrancar el invitado destino: hasta el reinicio puede seguir usando el anterior.", "imageAlt": "Diálogo de resumen listando qué cambió, seguido del prompt de reinicio" } }, "manual": { "heading": "Inspección manual", "intro": "Antes de pasar de VM → LXC, revisa el controlador y la política BDF. Este ejemplo NVIDIA usa 10de:2204; adáptalo a tu tarjeta. Los comandos consultan el estado; el script también gestiona invitados y miembros del grupo IOMMU.", "lxcToVm": "Antes de LXC → VM, consulta la dirección PCI y su grupo IOMMU. Sustituye la dirección del ejemplo y revisa todos los miembros antes de asignar dispositivos.", "oneVmTitle": "Una GPU física asignada por VFIO solo puede usarla una VM a la vez", "oneVmBody": "Poner varias entradas hostpci con el mismo slot PCI en dos VMs es config válida pero solo una de las VMs puede arrancar con la GPU — la segunda fallará. El paso de política de conflicto de ProxMenux trata exactamente de evitar esta trampa." }, "verification": { "heading": "Verificación tras el reinicio" }, "troubleshoot": { "heading": "Solución de problemas", "stillVfioTitle": "La GPU sigue mostrando vfio-pci tras cambiar a modo LXC", "stillVfioBody": "Un módulo VFIO cargado no demuestra qué controlador usa esta GPU. Revisa la tarjeta y si finalizaron update-initramfs y el reinicio. lsmod | grep vfio solo lista módulos. En AMD / Intel revisa vfio.conf; en NVIDIA, /etc/proxmenux/vfio-bind.bdfs y /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Corrige las reglas antiguas antes de ejecutar update-initramfs -u -k all y reiniciar.", "vmFailTitle": "Una VM no arranca tras pasar la GPU a LXC", "vmFailBody": "Comprueba si conserva referencias hostpci obsoletas. La política Eliminar la GPU de la configuración puede retirarlas durante el cambio previsto; revisa la dirección antes de repetir el script para no invertir el modo por error. También puedes retirar la asignación en Proxmox con la VM parada.", "smiFailTitle": "nvidia-smi muestra «Driver/library version mismatch» al volver a LXC", "smiFailBody": "Compara el módulo NVIDIA cargado con las bibliotecas instaladas, también en LXC. Iguala versiones: reiniciar carga el módulo instalado, pero no corrige paquetes incompatibles. Recargar con modprobe -r nvidia y modprobe nvidia requiere detener los clientes GPU y puede fallar si hay módulos dependientes en uso.", "logTitle": "Registro de ejecución", "logBody": "Cada ejecución escribe en /tmp/proxmenux_gpu_switch_mode.log del host. Adjunta el registro al pedir ayuda en GitHub." }, "related": { "heading": "Relacionado", "items": [ { "label": "Añadir GPU a VM (Passthrough)", "href": "/docs/hardware/gpu-vm-passthrough", "tail": " — primera configuración del modo VM." }, { "label": "Añadir GPU a LXC", "href": "/docs/hardware/igpu-acceleration-lxc", "tail": " — primera configuración del modo LXC." }, { "label": "Instalar drivers NVIDIA (Host)", "href": "/docs/hardware/nvidia-host", "tail": " — necesario para el modo LXC en GPUs NVIDIA." }, { "label": "ProxMenux Monitor — pestaña Hardware", "href": "/docs/monitor/dashboard/hardware", "tail": " — sección Tarjetas gráficas, con el modo actual y el control para cambiarlo." }, { "label": "Comandos de asignación directa de GPU", "href": "/docs/help-info/gpu-commands", "tail": " — referencia rápida de comandos." } ] } }