Como instalar y configurar CUDA y cuDNN en servidor Ubuntu 24.04

CUDA y cuDNN en servidor Ubuntu 24.04

Spread the love

Como instalar y configurar CUDA y cuDNN en servidor Ubuntu 24.04

CUDA (Compute Unified Device Architecture) es una plataforma de computación paralela desarrollada por NVIDIA que permite utilizar la potencia de cálculo de las unidades de procesamiento gráfico (GPU) para realizar tareas de procesamiento intensivo de datos de manera eficiente. Originalmente diseñado para acelerar cálculos en aplicaciones gráficas, CUDA se ha expandido para soportar una amplia gama de aplicaciones de computación de propósito general.

CUDA proporciona un entorno de programación paralela que permite a los desarrolladores escribir código para ejecutar tareas en paralelo en la GPU. Esto se logra mediante la definición de funciones llamadas «kernels» que se ejecutan en paralelo en múltiples «hilos» en la GPU. Además, CUDA proporciona una serie de bibliotecas y herramientas para facilitar el desarrollo de aplicaciones paralelas, incluyendo cuDNN (CUDA Deep Neural Network Library) para el entrenamiento y la inferencia de redes neuronales profundas, así como cuBLAS (CUDA Basic Linear Algebra Subroutines) para operaciones de álgebra lineal.

En resumen, CUDA es una plataforma de computación paralela que aprovecha la potencia de las GPU para acelerar una amplia gama de aplicaciones de computación de propósito general, desde simulaciones científicas hasta aprendizaje profundo.

Como instalar y configurar CUDA en servidor Ubuntu 24.04

Descargamos y instalamos la configuración básica con estos comandos:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

Instrucciones del controlador NVIDIA

Para instalar el tipo de módulo de kernel heredado:

sudo apt-get install -y cuda-drivers

Para instalar el tipo de módulo de kernel abierto:

sudo apt-get install -y nvidia-driver-550-open
sudo apt-get install -y cuda-drivers-550

Como instalar y configurar cuDNN en servidor Ubuntu 24.04

Descargamos y instalamos la configuración básica con estos comandos:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cudnn

Para instalar CUDA 11, realice la configuración anterior pero instale el paquete específico de CUDA 11:

sudo apt-get -y install cudnn-cuda-11

Para instalar CUDA 12, realice la configuración anterior pero instale el paquete específico de CUDA 12:

sudo apt-get -y install cudnn-cuda-12

Después de terminar con la instalación de los paquetes debemos reiniciar el servidor:

sudo reboot

Comprobamos la correcta instalación de CUDA y cuDNN en servidor Ubuntu 24.04

Si ya hemos reiniciado y entrado de nuevo en la consola, lanzamos el siguiente comando:

nvidia-smi

La salida debe ser algo así:

Si hemos instalado Jupyterlab en nuestro flamante servidor podemos comprobar la instalación de la siguiente manera:

Primero hay que instalar la biblioteca torch:

pip3 install torch

Accedemos en Jupiterlab y ejecutamos el siguiente código:

import torch

def check_gpu_info():
    # Verifica si hay una GPU disponible
    if torch.cuda.is_available():
        print("GPU encontrada:")
        print(torch.cuda.get_device_name(0))
        # Verifica si CUDA está disponible
        print("CUDA disponible:", torch.version.cuda)
        # Verifica si cuDNN está disponible
        print("cuDNN disponible:", torch.backends.cudnn.version())
    else:
        print("No se encontró GPU disponible en este sistema.")

check_gpu_info()

Si todo esta correcto la salida debe ser algo como esto:

Con esto ya tenemos todo listo, si necesitáis ayuda preguntad en los comentarios.

También te dejo este código de entrenamiento de una red neuronal simple, pero de una manera muy visual!!!

import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt

# Verifica si CUDA está disponible
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Define una red neuronal simple
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(1, 1)

    def forward(self, x):
        x = self.fc1(x)
        return x

# Datos de ejemplo
x_train = torch.rand(100, 1).to(device)
y_train = 3 * x_train + 2 + 0.1 * torch.randn(100, 1).to(device)

# Modelo, pérdida y optimizador
model = SimpleNN().to(device)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# Entrenamiento
losses = []
epochs = 1000
for epoch in range(epochs):
    optimizer.zero_grad()
    outputs = model(x_train)
    loss = criterion(outputs, y_train)
    loss.backward()
    optimizer.step()
    losses.append(loss.item())

    # Actualiza el gráfico en tiempo real
    plt.clf()
    plt.plot(losses, color='blue')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.title('Training Loss')
    plt.grid(True)
    plt.pause(0.01)

plt.show()

Deja un comentario