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.
Índice de contenidos
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:
- Entra en este enlace que te he dejado.
- Elige la versión para Linux…
- Y tu arquitectura, que será x86-64 o arm64, dependiendo del equipo.
- Luego selecciona el paquete específico de tu distro de la lista que ofrece la web de NVIDIA. Por ejemplo, Ubuntu.
- 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…
