Ghid folosirea contrainerelor în cluster
Creare imagine Apptainer
Nodurile de procesare folosesc apptainer pentru a rula un anumit proces. Pentru a putea rula, trebuie să vă construiți o imagine de apptainer care să conțină mediul necesar procesului vostru.
Imaginea de apptainer poate fi construită pe baza unui fișier .def.
Acesta pleacă de la o imagine de pe docker-hub cât mai apropiată de cerințele/dependențele task-ului.
În secțiunea %post pot fi instalate noi pachete de sistem sau biblioteci pentru python
Exemplu fișier (transformers.def):
Bootstrap: docker
From: tensorflow/tensorflow:2.7.1-gpu
%post
python -m pip install transformers sklearn
%environment
export TF_FORCE_GPU_ALLOW_GROWTH=true
%runscript
# python ctc_model.py
Pași pentru generarea imaginii
Imaginile nu pot fi generate pe nodurile din grid. Acestea trebuiesc generate
local folosind comanda de mai jos și copiate pe sistemul fep.grid.pub.ro.
apptainer build --fakeroot transformers.sif transformers.def
--fakerooteste necesară pentru a avea drept de sudo în imaginea construitătransformers.sifeste fișierul generat ca output al comenziitransformers.deffișierul care definește imaginea de container, ca în exemplul de mai sus.
Folosirea imaginilor docker
În loc să generați imagini apptainer, puteți să generați imagini de container pentru containere de tip Docker, să le încărcați pe platforma DockerHub și să le descărcați folosind comanda apptainer pull în felul următor:
[sergiu.weisz@fep8 ~]$ apptainer pull docker://hello-world:latest
INFO: Converting OCI blobs to SIF format
INFO: Starting build...
Getting image source signatures
Copying blob 2db29710123e done
Copying config 811f3caa88 done
Writing manifest to image destination
Storing signatures
2022/01/29 22:02:57 info unpack layer: sha256:2db29710123e3e53a794f2694094b9b4338aa9ee5c40b930cb8063a1be392c54
INFO: Creating SIF file...
Putem descărca containere de tip Docker de pe platforma Docker Hub folosind link-uri de tipul docker://<user>/<container>:latest. De exemplu, putem în felul următor să descărcăm un container care rulează hello world:
[sergiu.weisz@fep8 ~]$ apptainer pull docker://hello-world:latest
Pentru a rula un container deja descărcat folosim comnda descărcată:
[sergiu.weisz@fep8 ~]$ srun --pty /bin/bash
[sergiu.weisz@nehalem-wn23 ~]$ apptainer run docker://hello-world:latest
INFO: Using cached SIF image
WARNING: passwd file doesn't exist in container, not updating
WARNING: group file doesn't exist in container, not updating
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Nu putem rula comanda apptainer run pentru pornirea unui container pe mașina fep.grid.pub.ro.
Folosire bibliotecii CUDA
Pentru a folosi API-ul CUDA este necesar să folosim un container în care este instalată biblioteca.
În cazul în care folosim unul dintre nodurile xl sau ucsx vom rula următoarea comandă pentru a rula comenzi container:
[sergiu.weisz@fep8 ~]$ srun -p xl --gres gpu:1 --pty /bin/bash
[sergiu.weisz@xl270-wn-wn161 ~]$ apptainer run --nv docker://nvidia/cudagl:11.4.0-devel-centos7
INFO: Using cached SIF image
apptainer>
Pentru a permite accesul la GPU-uri în cadrul containerului am folosit opțiunea --nv.
Pentru a primi acces la GPU-uri, am folosit opțiunea --grep gpu:1. Pentru mai
multe detalii, urmăriți secțiunea Folosirea GPU-urilor
Pentru mai multe informații despre rularea în containere apptainer, puteți urmări tutorialele de pe wiki-ul apptainer: https://apptainer.org/docs/user/1.0/quick_start.html