El driver de NVIDIA es la pieza que permite al sistema operativo usar la GPU, y es el requisito previo de CUDA, PyTorch, TensorFlow o cualquier servidor de inferencia. En este tutorial instalarás en Ubuntu 24.04 la rama de drivers para servidor (la que Ubuntu recomienda para cómputo) con la herramienta ubuntu-drivers, activarás el modo de persistencia y comprobarás con nvidia-smi que la GPU funciona.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS y al menos una GPU NVIDIA visible para el sistema: un servidor dedicado o una máquina virtual con la GPU asignada por passthrough.
  • Un usuario no root con privilegios sudo.
  • Acceso a la consola del servidor (KVM, IPMI o la consola web de tu proveedor) por si el arranque falla o necesitas confirmar una clave de Secure Boot.
  • Sistema actualizado. Instala las actualizaciones pendientes y reinicia si se ha actualizado el kernel:
sudo apt update && sudo apt full-upgrade -y
sudo reboot

Paso 1: Comprobar que el sistema ve la GPU

Antes de instalar nada, confirma que la GPU aparece en el bus PCI:

lspci -nn | grep -i nvidia
01:00.0 3D controller [0302]: NVIDIA Corporation AD102GL [L40S] [10de:26b9] (rev a1)

Si el comando no devuelve nada, el problema está en el hardware o en la asignación de la GPU a la máquina virtual, no en el driver. Resuélvelo antes de continuar.

Comprueba también si hay algún driver cargado. En una instalación limpia verás el driver libre nouveau o nada:

lsmod | grep -E 'nvidia|nouveau'

Paso 2: Elegir la versión del driver

Ubuntu publica dos ramas de drivers NVIDIA: las de escritorio y las -server, que siguen el ciclo de soporte largo de NVIDIA para centros de datos. Para cargas de cómputo (IA, CUDA, renderizado sin pantalla) usa la rama de servidor.

Instala la herramienta de detección y lista los drivers disponibles para uso GPGPU:

sudo apt install ubuntu-drivers-common
sudo ubuntu-drivers list --gpgpu
nvidia-driver-570-server, (kernel modules provided by linux-modules-nvidia-570-server-generic)
nvidia-driver-570-server-open, (kernel modules provided by linux-modules-nvidia-570-server-open-generic)
nvidia-driver-580-server, (kernel modules provided by linux-modules-nvidia-580-server-generic)
nvidia-driver-580-server-open, (kernel modules provided by linux-modules-nvidia-580-server-open-generic)

Las versiones concretas dependen de la fecha y de tu GPU. Para elegir:

  • Versión: la más alta de la lista suele ser la correcta. Si vas a usar una versión concreta de CUDA, comprueba que el driver la soporta: cada versión de CUDA exige un driver mínimo.
  • -open o no: las variantes -open usan los módulos de kernel de código abierto de NVIDIA, que son los recomendados para GPU de arquitectura Turing o posterior (serie T4, RTX 20xx y más recientes, A100, H100, L40S). Para GPU más antiguas, como Pascal o Volta, usa la variante sin -open.

Fíjate en que los módulos del kernel vienen en paquetes linux-modules-nvidia-* precompilados y firmados por Canonical. Esto evita compilar con DKMS en cada actualización del kernel y funciona con Secure Boot sin pasos extra.

Paso 3: Instalar el driver

La forma más sencilla es dejar que ubuntu-drivers instale el driver recomendado para tu GPU junto con sus módulos precompilados:

sudo ubuntu-drivers install --gpgpu

Para fijar una versión concreta de la rama de servidor, indícala con el formato nvidia:<versión>-server:

sudo ubuntu-drivers install --gpgpu nvidia:580-server

Si quieres una variante -open concreta, instala con apt los dos paquetes que aparecen en su línea de la lista del paso anterior: el driver y el paquete de módulos indicado en "kernel modules provided by":

sudo apt install nvidia-driver-580-server-open linux-modules-nvidia-580-server-open-generic

En modo GPGPU no se instalan las utilidades de usuario, entre ellas nvidia-smi. Instálalas con la misma versión del driver:

sudo apt install nvidia-utils-580-server

Comprueba que los paquetes se han instalado:

dpkg -l | grep -E 'nvidia-(driver|utils|compute)' | awk '{print $2, $3}'
nvidia-compute-utils-580-server 580.82.07-0ubuntu0.24.04.1
nvidia-driver-580-server-open 580.82.07-0ubuntu0.24.04.1
nvidia-utils-580-server 580.82.07-0ubuntu0.24.04.1

Reinicia para que se descargue nouveau y se cargue el módulo de NVIDIA:

sudo reboot

Paso 4: Verificar la instalación

Tras el reinicio, comprueba que el módulo está cargado y que nouveau ya no aparece:

lsmod | grep -E '^nvidia|nouveau'
nvidia_uvm           2076672  0
nvidia_drm            135168  0
nvidia_modeset       1720320  1 nvidia_drm
nvidia              11759616  2 nvidia_uvm,nvidia_modeset

Ejecuta nvidia-smi, la herramienta principal de diagnóstico:

nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.82.07              Driver Version: 580.82.07      CUDA Version: 13.0     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|=========================================+========================+======================|
|   0  NVIDIA L40S                    Off |   00000000:01:00.0 Off |                    0 |
| N/A   31C    P8             23W /  350W |       0MiB /  46068MiB |      0%      Default |
+-----------------------------------------+------------------------+----------------------+

Dos datos importan aquí:

  • Driver Version: la versión instalada.
  • CUDA Version: la versión máxima de CUDA que admite este driver. No indica que CUDA esté instalado; el toolkit se instala aparte.

Para obtener datos concretos en un formato fácil de procesar, usa --query-gpu:

nvidia-smi --query-gpu=name,driver_version,memory.total,temperature.gpu --format=csv
name, driver_version, memory.total [MiB], temperature.gpu
NVIDIA L40S, 580.82.07, 46068 MiB, 31

Paso 5: Activar el modo de persistencia

Sin persistencia, el driver descarga el estado de la GPU cuando ningún proceso la usa y lo vuelve a inicializar al siguiente uso. En un servidor eso añade latencia al arrancar cada trabajo. El paquete nvidia-compute-utils incluye el servicio nvidia-persistenced, que mantiene la GPU inicializada.

Actívalo y comprueba su estado:

sudo systemctl enable --now nvidia-persistenced
systemctl status nvidia-persistenced --no-pager
● nvidia-persistenced.service - NVIDIA Persistence Daemon
     Loaded: loaded (/usr/lib/systemd/system/nvidia-persistenced.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-25 10:52:14 UTC; 3s ago

En la salida de nvidia-smi, la columna Persistence-M debe mostrar ahora On:

nvidia-smi --query-gpu=persistence_mode --format=csv,noheader
Enabled

Paso 6: Evitar cambios de versión inesperados

Las actualizaciones de seguridad de Ubuntu pueden traer una nueva versión menor del driver dentro de la misma rama (por ejemplo, de 580.82 a 580.95). Tras esa actualización, nvidia-smi puede fallar con Driver/library version mismatch hasta que reinicies, porque el módulo cargado en memoria sigue siendo el antiguo.

En servidores de producción conviene decidir cuándo ocurre ese cambio. Puedes congelar los paquetes y actualizarlos a mano en una ventana de mantenimiento:

sudo apt-mark hold $(dpkg -l | awk '/^ii/ && /nvidia/ {print $2}')
apt-mark showhold

Para actualizar más adelante, libera los paquetes con sudo apt-mark unhold seguido de los mismos nombres, instala las actualizaciones y reinicia.

Solución de problemas

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. El módulo no está cargado. Revisa los mensajes del kernel con sudo dmesg | grep -iE 'nvidia|nvrm'. Las causas más comunes son no haber reiniciado tras la instalación, haber actualizado el kernel sin que exista el paquete linux-modules-nvidia-* correspondiente, o que Secure Boot rechace un módulo sin firmar (compruébalo con mokutil --sb-state).

Failed to initialize NVML: Driver/library version mismatch. Las utilidades de usuario se actualizaron pero el módulo en memoria es el antiguo. Reinicia el servidor.

nvidia-smi: command not found. Falta el paquete nvidia-utils-<versión>-server. Instálalo con la misma versión y rama que el driver.

El módulo -open no carga y dmesg indica que la GPU no está soportada. Tu GPU es anterior a Turing. Desinstala el driver con sudo apt purge '*nvidia*', reinicia e instala la variante sin -open.

Hay dos ramas de driver mezcladas. Si has probado varias instalaciones (por ejemplo, el repositorio de NVIDIA y el de Ubuntu), apt puede acabar con paquetes incompatibles. Elimina todo con sudo apt purge '*nvidia*' && sudo apt autoremove, reinicia y vuelve al paso 3 con una sola fuente.

Conclusión

El servidor tiene ahora el driver NVIDIA de la rama para servidores con módulos precompilados, el modo de persistencia activado y nvidia-smi funcionando. El siguiente paso habitual es instalar el CUDA Toolkit si vas a compilar código para la GPU, o ir directamente a PyTorch, que incluye sus propias bibliotecas CUDA y solo necesita el driver. También puedes instalar el NVIDIA Container Toolkit para usar la GPU desde contenedores Docker.