Na računalnom klasteru Isabella, na čvorovima s grafičkim procesorima NVIDIA Tesla V100-SXM2-16GB, instalirana je Python 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:
Pripremljen je modul koji postavlja sve potrebne varijable okoline:
Verzija | Modul |
---|---|
1.12.0 | tensorflow/1-12-0-gpu |
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.
U nastavku je opisano podnošenje tipičnih TensorFlow poslova. Više informacija o pokretanju poslova možete pronaći na stranicama Korištenje grafičkih procesora te Pokretanje i upravljanje poslovima.
U svakom opisu posla obavezno treba koristiti cuda-wrapper.sh, kao u primjerima u nastavku. |
#$ -cwd #$ -pe gpu 1 module load tensorflow/1-12-0gpu cuda-wrapper.sh python3.5 moj_program.py |
Korištenje više grafičkih procesora nije dopušteno bez korištenja Horovod biblioteke. |
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):
#$ -cwd #$ -pe gpusingle 4 module load tensorflow/1-12-0gpu mpirun -np $NSLOTS -bind-to none -mca pml ob1 -mca btl ^openib cuda-wrapper.sh python3.5 moj_program.py |
#$ -cwd #$ -pe gpu 6 module load tensorflow/1-12-0gpu mpirun -np $NSLOTS -bind-to none -mca pml ob1 -mca btl ^openib cuda-wrapper.sh python3.5 moj_program.py |
Za pokretanje poslova koji zahtijevaju cijele čvorove potrebno je koristiti paralelnu okolinu gpufull te željeni broj grafičkih procesora (mora biti djelitelj broja 4). Primjer skripte za zauzimanje dva čvora:
#$ -cwd #$ -pe gpufull 8 module load tensorflow/1-12-0gpu mpirun -np $NSLOTS -bind-to none -mca pml ob1 -mca btl ^openib cuda-wrapper.sh python3.5 moj_program.py |
Performanse paralelnog izvođenja TensorFlow aplikacija korištenjem Horovod biblioteke mjerene su standarnim resnet101 benchmarkom iz službenog TensorFlow benchmark repozitorija.
Slika 1 prikazuje performanse na resnet101 testu u odnosu na broj 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.
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 bitno na performanse na ovom benchmarku.