GPU servery pro výuku

Pro výuku předmětů na Katedře kybernetiky jsou k dispozici tyto servery s GPU:

  • cantor.felk.cvut.cz – 16 jader / 32 threadu, 256GB RAM, 500GB SSD, 8 x NVIDIA GTX 1080Ti
  • taylor.felk.cvut.cz – 16 jader / 32 threadu, 256GB RAM, 500GB SSD, 8 x NVIDIA GTX 1080Ti

Servery běží nepřetržitě a může na nich pracovat více uživatelů najednou. Předpokládá se, že s každou GPU kartou pracuje najednou jen jeden uživatel.

Přihlášení


Všechny GPU servery jsou dostupné pouze přes SSH. Z linuxu použijte příkaz: ssh -X server_address. Z windows můžete využít MobaXterm, který má v sobě integrovaný X server a je tedy možné vzdáleně spouštět GUI aplikace. Login a heslo je stejné jako na strojích v učebnách E132,E220 nebo E230. Heslo si můžete nastavit na adrese https://cw.felk.cvut.cz/password. Na serverech je přísně zakázáno pouštět programy, které nesouvisí s výukou na katedře kybernetiky. Provoz serverů je monitorován a případné porušení provozních podmínek bude postihováno.

Každý uživatel má k dispozici stejný domovský adresář jako v učebně. Pro větší pracovní soubory je možno využívat lokální rychlý disk /local/temporary, kde si každý může vytvořit vlastní složku.

Práce s GPU kartama

V serverech je po 8 GPU kartách. Každý uživatel může najednou pracovat jen s jednou kartou a neměl by používat kartu, kterou již někdo jiný používá. Jak jsou karty využívané se zjišťuje příkazem:

eb@cantor>nvidia-smi
Wed Oct 10 10:36:42 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.37 Driver Version: 396.37 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... On | 00000000:04:00.0 Off | N/A |
| 31% 52C P2 79W / 250W | 10942MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... On | 00000000:05:00.0 Off | N/A |
| 21% 29C P8 17W / 250W | 982MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX 108... On | 00000000:08:00.0 Off | N/A |
| 21% 28C P8 16W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GeForce GTX 108... On | 00000000:09:00.0 Off | N/A |
| 21% 29C P8 18W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 4 GeForce GTX 108... On | 00000000:84:00.0 Off | N/A |
| 21% 28C P8 17W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 5 GeForce GTX 108... On | 00000000:85:00.0 Off | N/A |
| 21% 28C P8 17W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 6 GeForce GTX 108... On | 00000000:88:00.0 Off | N/A |
| 47% 70C P2 173W / 250W | 10137MiB / 11178MiB | 75% Default |
+-------------------------------+----------------------+----------------------+
| 7 GeForce GTX 108... On | 00000000:89:00.0 Off | N/A |
| 52% 75C P2 157W / 250W | 6373MiB / 11178MiB | 43% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 8364 C python 10928MiB |
| 1 10343 C /usr/local/matlab90/bin/glnxa64/MATLAB 243MiB |
| 1 13517 C /opt/conda/envs/pytorch-py3.6/bin/python 729MiB |
| 6 17529 C python 10125MiB |
| 7 23438 C python3 6363MiB |
+-----------------------------------------------------------------------------+

Většina programů pracujících s GPU umožňuje specifikovat číslo karty se kterou má pracovat. To je vidět nalevo jako GPU. PID ukazuječíslo procesu, který kartu využívá. Příkazem ps -axu, lze pak zjistit informace o tom, komu program patří.

Pomocí proměnné prostředí CUDA_VISIBLE_DEVICES lze programu využívající knihovnu CUDA předat s jakou kartou má pracovat.:

export CUDA_VISIBLE_DEVICES=3

Programové vybavení


Programové vybavení na GPU server se liší od strojů v počítačových učebnách. Většina programů je přístupná přes tzv. softwarové moduly. Nahráním modulu se nastaví všechny potřebné proměnné prostředí. Je tak možné rychle přepínat mezi různými verzemi apod. S moduly se pracuje pomocí příkazu module nebo zkráceně ml.
module avail – vypíše seznam všech dostupných modulů
module load module_name/version – nahraje module module_name ve verzi version. Pokud se vynechá verze nahraje se poslední nejvyšší dostupná verze.
module list – vypíše seznam aktuálně nahraných modulů. Některé moduly závisí na jiných modulech a proto nahráním jednoho modulu se většinou nahraje modulů více.
module unload module_name – odpojí nahraný modul module_name. Všechny jeho závislosti, ale zůstanou stále nahrané.
module purge – odpojí všechny nahrané moduly

Příklady využití modulů:

eb@cantor:~$ gcc --version
gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

eb@cantor:~$ ml GCC/7.1.0-2.28
eb@cantor:~$ gcc --version
gcc (GCC) 7.1.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
eb@cantor:~$ module purge
eb@cantor:~$ module load Python
eb@cantor:~$ module list

Currently Loaded Modules:
1) GCCcore/6.4.0 6) numactl/2.0.11-GCCcore-6.4.0 11) FFTW/3.3.6-gompic-2017b 16) ncurses/6.0-GCCcore-6.4.0 21) XZ/5.2.3-GCCcore-6.4.0
2) binutils/2.28-GCCcore-6.4.0 7) hwloc/1.11.7-GCCcore-6.4.0 12) ScaLAPACK/2.0.2-gompic-2017b-OpenBLAS-0.2.20 17) libreadline/7.0-GCCcore-6.4.0 22) libffi/3.2.1-GCCcore-6.4.0
3) GCC/6.4.0-2.28 8) OpenMPI/2.1.1-gcccuda-2017b 13) goolfc/2017b 18) Tcl/8.6.7-GCCcore-6.4.0 23) Python/3.6.4-goolfc-2017b
4) CUDA/9.0.176-GCC-6.4.0-2.28 9) OpenBLAS/0.2.20-GCC-6.4.0-2.28 14) bzip2/1.0.6-GCCcore-6.4.0 19) SQLite/3.20.1-GCCcore-6.4.0
5) gcccuda/2017b 10) gompic/2017b 15) zlib/1.2.11-GCCcore-6.4.0 20) GMP/6.1.2-GCCcore-6.4.0

eb@cantor:~$ module unload Python
eb@cantor:~$ module list

Currently Loaded Modules:
1) GCCcore/6.4.0 6) numactl/2.0.11-GCCcore-6.4.0 11) FFTW/3.3.6-gompic-2017b 16) ncurses/6.0-GCCcore-6.4.0 21) XZ/5.2.3-GCCcore-6.4.0
2) binutils/2.28-GCCcore-6.4.0 7) hwloc/1.11.7-GCCcore-6.4.0 12) ScaLAPACK/2.0.2-gompic-2017b-OpenBLAS-0.2.20 17) libreadline/7.0-GCCcore-6.4.0 22) libffi/3.2.1-GCCcore-6.4.0
3) GCC/6.4.0-2.28 8) OpenMPI/2.1.1-gcccuda-2017b 13) goolfc/2017b 18) Tcl/8.6.7-GCCcore-6.4.0
4) CUDA/9.0.176-GCC-6.4.0-2.28 9) OpenBLAS/0.2.20-GCC-6.4.0-2.28 14) bzip2/1.0.6-GCCcore-6.4.0 19) SQLite/3.20.1-GCCcore-6.4.0
5) gcccuda/2017b 10) gompic/2017b 15) zlib/1.2.11-GCCcore-6.4.0 20) GMP/6.1.2-GCCcore-6.4.0

eb@cantor:~$ module purge
eb@cantor:~$ module list
No modules loaded

Moduly pro práci s GPU


Moduly přeložené s podporou práce na GPU jsou v seznamech modulů označené (g). Dále se poznají podle toho, že se ve verzi objevuje fosscuda nebo goolfc. Některé programy jsou k dispozici jak s podporou GPU, tak bez ní. Na GPU serverech používejte zásadně verze optimalizované pro GPU. K dispozici jsou moduly:

Kontejnery


Jako alternativu k modulům, lze používat softwarové kontejnery. Kontejner je balík obsahující vše potřebné pro spuštění. Narozdíl od modulů je snadno přenositelný. Na našich GPU serverech je možné využívat kontejnerový nástroj Singularity. Uvnitř kontejneru je možné pracovat se soubory vně kontejneru, například ve vašem domovském adresáři.
Spuštění kontejneru umístěném na Docker hubu:

singularity run docker://godlovedc/lolcow
Docker image path: index.docker.io/godlovedc/lolcow:latest
Cache folder set to /home/user/.singularity/docker
[6/6] |===================================| 100.0%
Creating container runtime...

________________________________________
/ You've been leading a dog's life. Stay \
\ off the furniture. /
----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

Jak je vidět tento příkaz stáhne kontejner do adresáře ~/.singularity/docker a pak kontejner spustí. Protože kontejnery mohou být veliké i několik GB je dobré tento adresář přesunout na lokální uložiště:

mkdir /local/temporary/username
mv ~/.singularity/docker /local/temporary/username/
ln -s /local/temporary/username/docker ~/.singularity/

V adresáři /local/singularity_containers/ jsou k dispozici předpřipravené kontejnery. Většina z nich vyžaduje GPU a je proto potřeba spustit kontejner s volbou –nv

eb@cantor:> singularity run --nv /local/singularity_images/caffe2-18.06-py3.simg

============
== Caffe2 ==
============

NVIDIA Release 18.06 (build 474750)

Container image Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
All contributions by Facebook: Copyright (c) 2016, 2017 Facebook Inc.
All contributions by Google: Copyright (c) 2015 Google Inc. All rights reserved.
All contributions by Yangqing Jia: Copyright (c) 2015 Yangqing Jia All rights reserved.
All contributions from Caffe: Copyright(c) 2013, 2014, 2015, the respective contributors. All rights reserved.
All other contributions: Copyright(c) 2015, 2016, 2017, the respective contributors. All rights reserved.

Various files include modifications (c) NVIDIA CORPORATION. All rights reserved.
NVIDIA modifications are covered by the license terms that apply to the underlying project or file.
vecerka@boruvka:~$ nvidia-smi
Wed Oct 10 09:09:09 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.37 Driver Version: 396.37 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:04:00.0 Off | N/A |
| 31% 51C P2 80W / 250W | 10942MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:05:00.0 Off | N/A |
| 21% 29C P8 17W / 250W | 982MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 GeForce GTX 108... Off | 00000000:08:00.0 Off | N/A |
| 21% 28C P8 16W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 GeForce GTX 108... Off | 00000000:09:00.0 Off | N/A |
| 21% 30C P8 18W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 4 GeForce GTX 108... Off | 00000000:84:00.0 Off | N/A |
| 21% 29C P8 17W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 5 GeForce GTX 108... Off | 00000000:85:00.0 Off | N/A |
| 21% 30C P8 17W / 250W | 10MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 6 GeForce GTX 108... Off | 00000000:88:00.0 Off | N/A |
| 48% 67C P2 185W / 250W | 10137MiB / 11178MiB | 47% Default |
+-------------------------------+----------------------+----------------------+
| 7 GeForce GTX 108... Off | 00000000:89:00.0 Off | N/A |
| 53% 75C P2 82W / 250W | 5735MiB / 11178MiB | 26% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 8364 C python 10928MiB |
| 1 10343 C /usr/local/matlab90/bin/glnxa64/MATLAB 243MiB |
| 1 13517 C /opt/conda/envs/pytorch-py3.6/bin/python 729MiB |
| 6 17529 C python 10125MiB |
| 7 10439 C python3 5725MiB |
+-----------------------------------------------------------------------------+

Za obsah zodpovídá: Petr Pošík