esit-ia

ESIT-IA

El objetivo de este repositorio es ofrecer una imagen Docker que permita ejecutar en local los ejemplos propuestos en el asignatura de Inteligencia Artificial y pudiera hacer uso de las GPU del ordenador.

Como estrategia se decide crear un fichero Dockerfile que contruya una imagen Docker con todas las dependencias necesarias.

El contenedor está disponible en DockerHub https://hub.docker.com/r/ccesitull/esit-ia

Puede visualizar los notebooks en el directorio src https://github.com/Universidad-de-La-Laguna/esit-ia/tree/main/src

Como buena práctica se aconseja dividir los ejemplos en varios notebooks que disminuya la dependencia entre ellos

Ejecuión en los ordenadores en el CC

Para poder ejecutar ejecutar los comandos docker como alumno o profesor debe iniciar primero el demonio Docker en modo rootless

docker-rootless.sh 

En el caso del Centro de Cálculo de la ESIT lo ordenadores con GPUs disponible se encuentran en la sala 1.2.

Ejecución del contenedor sin GPUs

Ejecute el comando y acceda a http://localhost:8888 o a http://localhost:8888/lab

cd  datos/Disco_Duro_Virtual/home/
git clone https://github.com/Universidad-de-La-Laguna/esit-ia.git
docker run -d -it -p 8888:8888 -v $(pwd):/workspace --name esit-ia ccesitull/esit-ia:0.0.6

Ejecución del contenedor con GPUs

Ejecute el comando y acceda a http://localhost:8888 o a http://localhost:8888/lab

docker run -d -it --gpus all -p 8888:8888 -v $(pwd):/workspace --name esit-ia ccesitull/esit-ia:0.0.6

Para construir la imagen en local

Si desea construir la imagen envés de descargarla use el siguiente comando

git clone https://github.com/Universidad-de-La-Laguna/esit-ia.git
cd esit-ia
docker build -t ejemplo-esit-ia .

Configuración de la GPU

Este apartado está orientado para los adminstradores del ordenadores.

Para la ejecuación sobre ordenadores con GPU se debe tener en cuenta:

Resultado de nvidia-smi en RTX 3060 con 12 GB

 nvidia-smi 
Wed Jan  8 12:49:56 2025       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.171.04             Driver Version: 535.171.04   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3060        Off | 00000000:01:00.0 Off |                  N/A |
|  0%   44C    P8              18W / 170W |     68MiB / 12288MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A      8931      G   /usr/lib/xorg/Xorg                           56MiB |
|    0   N/A  N/A      8961      G   /usr/bin/gnome-shell                          6MiB |
+---------------------------------------------------------------------------------------+

Resultado de nvidia-smi para 5060ti 16Gb

gpu1:~$ nvidia-smi
Tue Jun 10 12:18:20 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.57.08              Driver Version: 575.57.08      CUDA Version: 12.9     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 5060 Ti     Off |   00000000:01:00.0 Off |                  N/A |
|  0%   25C    P8              3W /  180W |   14207MiB /  16311MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            1952      G   /usr/lib/xorg/Xorg                       43MiB |
|    0   N/A  N/A            2155      G   /usr/bin/gnome-shell                      8MiB |
|    0   N/A  N/A           10291      C   /usr/bin/python3.10                   14128MiB |
+-----------------------------------------------------------------------------------------+
apt install nvidia-container-toolkit

Ojo. Hay un bug en nvidia-container-toolkit https://github.com/NVIDIA/nvidia-container-toolkit/issues/381

Hacer downgrade a la versión 1.14.0-1

# first remove the old ones
sudo apt remove --purge nvidia-container-toolkit
sudo apt update
sudo apt autoremove

# check version availability
apt list -a "*nvidia-container-toolkit*"
# install 1.14.0-1
apt install nvidia-container-toolkit=1.14.0-1 nvidia-container-toolkit-base=1.14.0-1

o modificar try setting no-cgroups = false in /etc/nvidia-container-runtime/config.toml pero en este caso no funcionaría en modo rootless

cat /etc/docker/daemon.json 
{
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  },
  "registry-mirrors": ["http://localhost:5000"],
  "insecure-registries": ["localhost:5000"]
}
nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place

según https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

cat /etc/nvidia-container-runtime/config.toml
#accept-nvidia-visible-devices-as-volume-mounts = false
#accept-nvidia-visible-devices-envvar-when-unprivileged = true
disable-require = false
supported-driver-capabilities = "compat32,compute,display,graphics,ngx,utility,video"
#swarm-resource = "DOCKER_RESOURCE_GPU"

[nvidia-container-cli]
#debug = "/var/log/nvidia-container-toolkit.log"
environment = []
#ldcache = "/etc/ld.so.cache"
ldconfig = "@/sbin/ldconfig.real"
load-kmods = true
no-cgroups = true
#path = "/usr/bin/nvidia-container-cli"
#root = "/run/nvidia/driver"
#user = "root:video"

[nvidia-container-runtime]
#debug = "/var/log/nvidia-container-runtime.log"
log-level = "info"
mode = "auto"
runtimes = ["docker-runc", "runc", "crun"]

[nvidia-container-runtime.modes]

[nvidia-container-runtime.modes.cdi]
annotation-prefixes = ["cdi.k8s.io/"]
default-kind = "nvidia.com/gpu"
spec-dirs = ["/etc/cdi", "/var/run/cdi"]

[nvidia-container-runtime.modes.csv]
mount-spec-path = "/etc/nvidia-container-runtime/host-files-for-container.d"

[nvidia-container-runtime-hook]
path = "nvidia-container-runtime-hook"
skip-mode-detection = false

[nvidia-ctk]
path = "nvidia-ctk"
FROM nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04
!pkill -9 -f ipykernel_launcher 

para matar el proceso de kernel de Jupyter y liberar la memoria ocupada por los modelos en la GPUs. Queda pendiente hacer la liberación de memoria de una manera más elegante

Antecedentes

El ejemplo parte de un notebook inicial de Kaggle https://www.kaggle.com/code/patriciogarciabaez/rnas-preentrenadas

La replica del entorno Kaggle a un entorno local conlleva muchas dificultades. Como primera estrategia se plantea copiar exactamente las versiones de python y paquetes, esto no fue posible ya que había muchas dependencias no resolubles entre paquetes. El notebook Kaggle está “anclado” a un entorno original con fecha 2023-07-10, el Dockerfile asociado es https://github.com/Kaggle/docker-python/blob/main/Dockerfile.tmpl y fue construido “build” con referencia a paquetes como “last”. Parece que las imágenes construidas están disponible en https://console.cloud.google.com/artifacts/docker/kaggle-images/us/gcr.io/python?inv=1&invt=AbmS8A