Tutoriales

Cómo instalar CUDA en Linux y saca el máximo provecho a tu GPU Nvidia

Si vas a trabajar con GPGPU y quieres comenzar a desarrollar tus primeros proyectos de código para ser ejecutados o acelerados por tu GPU de NVIDIA, entonces te interesará conocer cómo puedes instalar CUDA en tu distribución Linux paso a paso y de forma fácil.

Requisitos previos

Para que CUDA funcione en tu distro Linux, primero debes cumplir una serie de requisitos:

  • Hardware: GPU NVIDIA con Compute Capability ≥ 3.0. Evidentemente, CUDA no funciona con otras GPUs que no sean de NVIDIA. Como debes saber, cada generación de tarjetas gráficas de NVIDIA soporta hasta cierta versión de CUDA. Desde Tesla lanzada en 2006, todas las gráficas de NVIDIA han soportado CUDA, como las Fermi, Kepler, Maxwell, Pascal, Turing, Ampere, Ada Lovelace y Blackwell. Verifica tu GPU con:
    lspci | grep -i nvidia
  • Sistema operativo: distribuciones soportadas como Ubuntu, Debian, Fedora, RHEL, SUSE.
  • Compilador: GCC compatible con la versión de CUDA que se instalará.
  • Drivers: la versión del driver debe ser compatible con la versión del CUDA Toolkit. Por ejemplo, CUDA 12.6 necesita de drivers ≥ v560.28.03. Puedes ver la compatibilidad en este enlace.

Te recomiendo leer sobre qué es GPGPU

Instalación del driver NVIDIA

Como para trabajar con CUDA necesitas los drivers propietarios de NVIDIA, tendrás que instalarlos en tu distro, no valen los de código abierto. Por tanto, sigue estos pasos según la distro que tengas:

Ubuntu

Con Ubuntu, cualquiera de sus sabores, u otras derivadas, abre el terminal y ejecuta los siguientes comandos, sustituyendo nvidia-driver-xxx por la versión que necesites del driver según la versión de CUDA:

sudo apt update
sudo apt install nvidia-driver-535
sudo reboot
nvidia-smi

Debian

En caso de tener una distribución Debian o derivadas, puedes hacerlo así:

  • Edita /etc/apt/sources.list y añade repositorios *contrib* y *non-free*:
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
  • Luego ejecuta en el terminal lo siguiente:
sudo apt update
sudo apt install nvidia-driver firmware-misc-nonfree
sudo reboot

Fedora

En el caso de tener Fedora o alguna de sus spins, haz esto:

sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install akmod-nvidia
sudo dnf install xorg-x11-drv-nvidia-cuda
sudo reboot

RHEL

Para Red Hat Enterprise Linux, prueba a habilitar el repo EPEL, y luego con:

sudo dnf install epel-release
sudo dnf install nvidia-driver nvidia-driver-libs nvidia-driver-cuda
sudo reboot

En entornos corporativos, suele usarse el instalador oficial .run de NVIDIA para mayor control, y que puedes descargar de la web oficial de NVIDIA, desde la zona de drivers.

SUSE (openSUSE / SLES)

Para SUSE y openSUSE, o derivados, puedes ejecutar estos otros comandos:

sudo zypper addrepo --refresh https://download.nvidia.com/opensuse/leap/15.6 NVIDIA
sudo zypper install --recommends nvidia-driver-G06
sudo reboot

También te puede interesar conocer cuáles son las mejores GPUs

Instalación del CUDA Toolkit

Para instalar CUDA Toolkit, puedes utilizar un Runfile, es decir, un binario .run que puedes descargar desde la web oficial de NVIDIA, hacerlo ejecutable e instalarlo. Para ello:

  1. Entra en este enlace que te he dejado.
  2. Elige la versión para Linux…
  3. Y tu arquitectura, que será x86-64 o arm64, dependiendo del equipo.
  4. Luego selecciona el paquete específico de tu distro de la lista que ofrece la web de NVIDIA. Por ejemplo, Ubuntu.
  5. Accedes a la descarga del .run, y una vez descargado, dale permisos de ejecución al paquete y haz doble clic sobre él para ejecutarlo.

Verás un asistente de instalación similar a los de Windows…

¿Qué incluye CUDA Toolkit?

Una vez instalado, en el set de herramientas de NVIDIA encontrarás:

  • APIs/Bibliotecas y compilador:
    • nvcc: Compilador CUDA C/C++
    • NVRTC: Compilador CUDA en tiempo de ejecución
    • CUDA Runtime API
    • CUDA Driver API
    • cuBLAS: Álgebra lineal (BLAS)
    • cuFFT: Transformadas rápidas de Fourier
    • cuRAND: Generación de números aleatorios
    • cuSPARSE: Álgebra lineal dispersa
    • cuSOLVER: Solvers numéricos
    • NPP: Procesamiento de imágenes y señales
    • Thrust: Librería C++ de alto nivel (tipo STL)
    • CUB: Primitivas paralelas de bajo nivel
  • Depuración:
    • cuda-gdb – Depurador basado en GDB
    • CUDA-MEMCHECK (memcheck, racecheck, initcheck, synccheck)
  • Profiling y análisis:
    • Nsight Systems: Análisis del sistema completo (CPU+GPU)
    • Nsight Compute: Profiling detallado de kernels
    • Nsight Graphics: Gráficos y shaders
  • Utilidades y ejemplos:
    • nvidia-smi *(no es parte del toolkit, sino del driver)
    • CUDA Samples
    • Occupancy Calculator
    • cuda-install-samples

Configuración de entorno

Una vez ya tienes todo, tanto los drivers como el toolkit, lo siguiente es preparar el entorno con las variables para comenzar a programar. En este caso:

  • Agrega al archivo ~/.bashrc:
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
  • Recarga con:
source ~/.bashrc

Verificación de instalación

Compila y ejecuta un ejemplo:

cd /usr/local/cuda/samples sudo make ./bin/x86_64/linux/release/deviceQuery

Si ves información de tu GPU y estado “PASS”, la instalación fue exitosa.

Primeros pasos en GPGPU

Según el trabajo que vayas a realizar, puede que necesites instalar otros paquetes o frameworks, por ejemplo, para poder programar en diferentes lenguajes de programación, etc. Algunos interesantes que te recomiendo mirar son:

  • CUDA C/C++: Extiende C/C++ con palabras clave como __global__ para definir kernels.
  • Frameworks: PyTorch y TensorFlow detectan automáticamente CUDA si está instalado.
  • Herramientas: Nsight Systems y CUDA-GDB para depuración y optimización.

Como ejemplo, un Hola Mundo para comenzar con CUDA sería así:

  • Primero abre tu editor de texto favorito y escribe este código, en este caso es en C++:
#include <iostream>
#include <cuda_runtime.h>

// Kernel CUDA: se ejecuta en la GPU
__global__ void holaMundoKernel() {
printf("Hola Mundo desde la GPU!\n");
}

int main() {
// Lanza el kernel con 1 bloque y 1 hilo
holaMundoKernel<<<1, 1>>>();

// Espera a que la GPU termine
cudaDeviceSynchronize();

std::cout << "Hola Mundo desde la CPU!" << std::endl;

return 0;
}
  • Ahora guarda el código fuente que has creado con el nombre que quieras, como por ejemplo, prueba-gpgpu.cu (importante la extensión .cu).
  • Ahora compila con nvcc, el compilador de CUDA, con este comando:
nvcc prueba-gpgpu.cu -o hola_mundo
  • Con esto generas el binario ejecutable, que podrás ejecutar con:
./hola_mundo

Aunque parezca un Hola Mundo normal y corriente, va a generar dos mensajes de salida en el terminal. Uno mediante la CPU, y otro usando la GPU para propósito general y generar la otra impresión.

Si tienes dudas o comentarios, ya sabes…

Isaac

Geek de los sistemas electrónicos, especialmente del hardware informático. Con alma de escritor y pasión por compartir todo el conocimiento sobre tecnología.
Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar Política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en info@profesionalreview.com
Botón volver arriba