Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: TensorFlow 2.12.0 - conda virtenv


Panel
borderColorlightgray
borderWidth1
titleBGColormediumgray
borderStylesolid
titleSadržaj

Table of Contents

...

Dostupne verzije

Na računalnom klasteru Isabella, na čvorovima s grafičkim procesorima NVIDIA Tesla V100-SXM2-16GB, instalirana je Python Pythonova biblioteka za strojno učenje , TensorFlow, verzija 1.12.0, optimizirana za izvođenje na grafičkim procesorima.

TensorFlow je preveden za Python 3.5, uz sljedeće verzije NVIDIA alata i biblioteka za strojno učenje:

Dostupne verzije i odgovarajući moduli, kao i NVIDIA knjižnice korištene pri kompilaciji su navedene ispod:

...

VerzijaModulCUDAcuDNNNCCL
1.12.0tensorflow/1-12-0-gpu
10.0

...

7.3.1

...

2.3.5

...

Pripremljen je modul koji postavlja sve potrebne varijable okoline:

1.15.0tensorflow/1-15-0-gpu
2.0.0tensorflow/2-0-0-gpu
2.6.2tensorflow/2-6-2-gpu11.08.3.02.11.4
2
VerzijaModul
1.12.0tensorflow/12-12-0gpu0

Horovod

Za paralelno izvođenje TensorFlow poslova na Isabelli, dostupna je Python biblioteka Horovod, verzija 0.15.1. Horovod je odabran radi minimalnih potrebnih izmjena Python skripti kako bi se mogle izvoditi na više GPU-ova, po potrebi preko više čvorova.

Upute o potrebnim izmjenama u korisničkim Python skriptama mogu se naći na Horovod GitHub repozitoriju.

Horovod koristi OpenMPI 3.0.

Izvođenje TensorFlow poslova

Primjer opisa posla koji zahtijeva jedan GPU:

11.88.6.02.13.4

Izvođenje poslova

U nastavku je opisano podnošenje tipičnih Python poslova. Više informacija o pokretanju poslova možete pronaći na stranicama Korištenje grafičkih procesora te Pokretanje i upravljanje poslovima.

Korištenje jednog grafičkog procesora

Warning
titleVažno

U opisima poslova koji koriste jedan grafički procesor, obavezno treba koristiti cuda-wrapper.sh, kao u sljedećem primjeru:


Code Block
titletf112.sge
Code Block
#$ -cwd
#$ -pe gpu 1

module load tensorflow/1-12-0gpu
source $TMPDIR/gpu

echo $CUDA_VISIBLE_DEVICES

python3.5-0-gpu

cuda-wrapper.sh python3.5 moj_program.py


Code Block
titlet115.sge
#$ -cwd
#$ -pe gpu 1

module load tensorflow/1-15-0-gpu

cuda-wrapper.sh python moj_program.py

Primjer opisa paralelnog posla koji zahtijeva 4 GPU-a:

Korištenje više grafičkih procesora

Warning

Korištenje više grafičkih procesora nije dopušteno bez korištenja biblioteke Horovod.


Warning

U opisima poslova koji koriste više grafičkih procesora, obavezno treba koristiti openmpi-wrapper.sh, kao u primjerima u nastavku.

Korištenje više grafičkih procesora na jednom čvoru

Za pokretanje poslova koji zahtijevaju više grafičkih procesora na jednom čvoru potrebno je koristiti paralelnu okolinu gpusingle te željeni broj grafičkih procesora (maksimalno 4):

Code Block
titletf.sge
Code Block
#$ -cwd
#$ -pe gpugpusingle 4

module load tensorflow/1-12-0gpu
source $TMPDIR/-0-gpu

echo $CUDA_VISIBLE_DEVICES

/usr/lib64/openmpi3/bin/mpirun -np $NSLOTS -bind-to none -map-by slot -mca pml ob1 -mca btl ^openibopenmpi-wrapper.sh python3.5 moj_program.py

Korištenje više grafičkih procesora na više čvorova

Code Block
titletf.sge
#$ -cwd
#$ -pe gpu 6

module load tensorflow/1-12-0-gpu

openmpi-wrapper.sh python3.5 moj_program.py

Dostupne paralelne okoline za korištenje grafičkih procesora:

  • gpu – općeniti poslovi koji zahtijevaju grafičke procesore
  • gpusingle – svi grafički procesori se dodjeljuju na jednom radnom čvoru
  • gpufull - grafički procesori se dodijeljuju 4 po radnom čvoru (broj grafičkih procesora mora biti djelitelj od 4)

Paralelne okoline se odabiru SGE parametrom:

Code Block
#$ -pe <paralelna okolina>

Više informacija o paralelnim okolinama dostupnim na Isabelli možete pronaći na stranici Redovi poslova i paralelne okoline.

SGE pretpostavljeno svakom poslu dodjeljuje jednu CPU jezgru. Ukoliko je potrebno, moguće je tražiti više jezgri:

Code Block
#$ -nprocs <broj_jezgri>

...

Performanse

Performanse paralelnog izvođenja TensorFlow aplikacija korištenjem Horovod biblioteke mjerene su standarnim resnet101 benchmarkom iz službenog TensorFlow benchmark repozitorija.

Slika  1 prikazuje skaliranje performansi s povećanjem broja GPU-ova. Vidljivo je da se s povećanjem broja GPU-ova povećava gubitak u odnosu na maksimalne teoretske performanse, što je i za očekivati. Međutim, čak i za 12 GPU-ova, sustav daje oko 85% idealnog slučaja. Idealne performanse procijenjene su iz rezultata istog benchmarka na jednom grafičkom procesoru, bez korištenja Horovod biblioteke.

Image Removed

Slika 2 prikazuje performanse na istom benchmarku, korištenjem 4 GPU-a u različitim raspodjelama po čvorovima. Vidljivo je da raspored GPU-ova po čvorovima ne utječe na performanse na ovom benchmarku.

Korištenje cijelih čvorova s grafičkim procesorima

Za pokretanje poslova koji zahtijevaju cijele čvorove potrebno je koristiti paralelnu okolinu gpufull te željeni broj grafičkih procesora (mora biti višekratnik broja 4). Primjer skripte za zauzimanje dva čvora:

Code Block
titletf.sge
#$ -cwd
#$ -pe gpufull 8

module load tensorflow/1-12-0-gpu

openmpi-wrapper.sh python3.5 moj_program.py

Podnošenje posla

Posao se podnosi s pristupnog čvora naredbom:

Code Block
qsub tf.sge

...