Skip to main content

Ghid folosirea contrainerelor în cluster

Creare imagine Singularity

Nodurile de procesare folosesc singularity pentru a rula un anumit proces. Pentru a putea rula, trebuie să vă construiți o imagine de singularity care să conțină mediul necesar procesului vostru.

Imaginea de singularity 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.

singularity build --fakeroot transformers.sif transformers.def
  • --fakeroot este necesară pentru a avea drept de sudo în imaginea construită
  • transformers.sif este fișierul generat ca output al comenzii
  • transformers.def fișierul care definește imaginea de container, ca în exemplul de mai sus.

Folosirea imaginilor docker

În loc să generați imagini Singularity, 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 singularity pull în felul următor:

[sergiu.weisz@fep8 ~]$ singularity 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 ~]$ singularity 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 ~]$ singularity 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/
note

Nu putem rula comanda singularity 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 hpsl vom rula următoarea comandă pentru a rula comenzi container:

[sergiu.weisz@fep8 ~]$ srun -p hpsl --gres gpu:1 --pty /bin/bash
[sergiu.weisz@hpsl-wn01 ~]$ singularity run --nv docker://nvidia/cudagl:11.4.0-devel-centos7
INFO: Using cached SIF image
Singularity>

În cazul rulării pe nodurile dp, vom rula următoarea comandă:

[sergiu.weisz@fep8 ~]$ srun -p dp --gres gpu:1 --pty /bin/bash
[sergiu.weisz@dp-wn02 ~]$ singularity run --nv docker://nvidia/cudagl:9.1-devel-centos7 bash
INFO: Using cached SIF image
Singularity>

Pentru a permite accesul la GPU-uri în cadrul containerului am folosit opțiunea --nv.

note

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 Singularity, puteți urmări tutorialele de pe wiki-ul Singularity: https://sylabs.io/guides/3.5/user-guide/quick_start.html