Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Informacje podstawowe

Obliczenia GPGPU to  (General-Purpose computing on Graphics Processing Units) to wykorzystanie procesorów graficznych wspólnie z jednostką   jednostką CPU do przyspieszenia obliczeń naukowych i inżynierskich. Infrastruktura PL-Grid PLGrid oferuje swoim użytkownikom dostęp do maszyny zawierającej karty GPGPU.Jest to Zeus CPGPU  w ACK CYFRONET AGH. Zeus GPGPU jest grupą serwerów obliczeniowych zawierających karty GPGPU udostępnianych  użytkownikom poprzez system kolejkowy.Obecnie w Zeusie GPGPU dostępne dla użytkowników są 504 rdzenie obliczeniowe, 204 karty GPGPU oraz 3,5 TB pamięci operacyjnej.

Info
Uwaga:

Dostęp do usługi

Dostęp do GPGPU jest możliwy jednie z poziomu systemu kolejkowego klastra Zeus. Należy zatem najpierw uzyskać dostęp do lokalnego systemu kolejkowego na klastrze Zeus w  ACK CYFRONET AGH, aktywując w portalu użytkownika odpowiednie usługi (wskazane jako "usługi nadrzędne").

 

Image Removed

 

Następnie należy  wypełnić motywację i aplikować o usługę.

Image Removed

Zlecanie zadań

Przykładowy skrypty dla systemu kolejkowego

 

Code Block
languagebash
titleTeraChem (zrówboleglenie na dwie karty graficzne)
#!/bin/sh

# TeraChem can run on a single node only
#PBS -l nodes=1:ppn=2:terachem:gpus=2:exclusive_process

#PBS -N sample_terachem
#PBS -q gpgpu

cd $PBS_O_WORKDIR

# initializing proper environment for TeraChem
module add gpu/terachem

# actual job
$TERACHEMRUN ch.inp > ch.log

GPU.

Lokalizacja

ACK CYFRONET AGH 

Nazwa systemu Prometheus K40XLPrometheus V100
Nazwa maszyny dostępowej pro.cyfronet.plpro.cyfronet.pl
Port dostępowy 2222
Liczba rdzeni obliczeniowych

Liczba kart GPU14432
Kolejkaplgrid-gpuplgrid-gpu-v100
OprogramowanieTeraChem, Gromacs, NAMD, GAMESS, TensorFlow, Keras, PyTorch
Opis konfiguracji zasobów obliczeniowychwww.plgrid.pl/oferta/zasoby_obliczeniowe/opis_zasobow/HPC
Opis systemów składowania danychwww.plgrid.pl/oferta/zasoby_obliczeniowe/opis_zasobow/storage
Informacje rozszerzoneDokumentacja KDM
Kontakt https://helpdesk.plgrid.pl

Parametry kart GPGPU

ParametrWartość
DostępnośćPromtheus (plgrid-gpu)Promtheus (plgrid-gpu-v100)
ProducentNVIDIANVIDIA
ModelK40 XLV100
ArchitekturaKeplerVolta
SzynaPCI-Express 3.0 16xNVLink
Liczba rdzeni Tensor-640
Liczba rdzeni CUDA28805120
Maksymalna częstotliwość928 MHz1290 MHz
Moc obliczeniowa (HP)-31.33 Tflops
Moc obliczeniowa (DP)1,78 Tflops7,834 Tflops
Moc obliczeniowa (SP)5,34 Tflops15,67 Tflops
Pojemność i typ pamięci12 GB GDDR532 GB HBM2
Przepustowość pamięci288 GB/s900 GB/s

Zlecanie zadań

Dostęp do węzłów z GPGPU

Dla zadań korzystających w obliczeniach z kart GPGPU przeznaczona została specjalna partycja - plgrid-gpu. Aby móc przeprowadzać obliczenia z wykorzystaniem GPGPU na klastrze Prometheus konieczne jest złożenie wniosku o grant właściwy, który przeznaczony zostanie w całości wyłącznie na obliczenia z wykorzystaniem kart GPGPU. Grant taki nie powinien być używany do przeprowadzania obliczeń w partycjach innych niż plgrid-gpu. We wniosku o grant należy wyraźnie zaznaczyć, że wymagany jest dostęp do partycji plgrid-gpu. Zalecane jest także (ale nie jest to konieczne), aby grant taki posiadał w nazwie wyraz gpu (np. obliczeniagpu) - ułatwia to identyfikację grantów. Każdy wniosek o dostęp do partycji plgrid-gpu jest rozpatrywany indywidualnie przez dostawcę zasobów.

Dodatkowo dla obliczeń AI została udostępniona partycja plgrid-gpu-v100 posiadająca karty GPGPU NVIDIA Tesla V100. Dostęp do nich realizowany jest podobnie, jak opisano powyżej dla partycji plgrid-gpu.

Informacje ogólne

Karty GPU w systemie kolejkowym SLURM są rodzajem tzw. generic resources (GRES), a ich identyfikatorem jest "gpu".
Informację o tym na których węzłach/partycjach znajdują się karty GPU można otrzymać np. przy pomocy komendy sinfo:

sinfo -o '%P || %N || %G'

Zlecanie zadań odbywa się poprzez podanie opcji --partition=plgrid-gpu --gres=gpu[:count] systemu kolejkowego.
W przypadku gdy nie ma podanej opcji count, system kolejkowy domyślnie alokuje jedną kartę na węźle obliczeniowym.

Po zleceniu zadania system kolejkowy automatycznie ustawia zmienną środowiskową $CUDA_VISIBLE_DEVICES oraz zezwala na dostęp do zaalokowanych do kart.

Zadania interaktywne

Przykładowo, gdy chcemy uruchomić zadanie interaktywne na jednym serwerze i zażądać 2 kart GPU:

srun -p plgrid-gpu -N 1 -n 24 -A <grant_id> --gres=gpu:2 --pty /bin/bash -l

Zadania interaktywne MPI

Uwaga! Wyjątkiem jest uruchamianie interaktywnych aplikacji MPI (np. w celach testów). Z powodu nieco innej obsługi kart GPU niż zwykłych procesorów przez system SLURM, uruchomienie zadania interaktywnego wymaga niestandardowej procedury.

Przykładowo, gdy chcemy uruchomić zadanie interaktywne na dwóch serwerach i zażądać 2 kart GPU na każdym z nich (łącznie 4 karty GPU) na czas 1 godziny:

salloc -p plgrid-gpu -N 2 --ntasks-per-node 24 -n 48 -A <grant_id> --gres=gpu:2 --time 1:00:00

Polecenie salloc zaalokowało nasze zadanie i zwróciło jego numer, przykładowo 1234.

Następnie uruchamiamy srun wymagając 0 kart GPU w zadaniu o numerze zwróconym przez salloc:

srun --jobid=1234 --gres=gpu:0 -O --pty /bin/bash -l

Otrzymaliśmy dostęp do powłoki na jednym z węzłów, teraz po załadowaniu odpowiedniego modułu MPI można już uruchomić własną aplikację za pomocą mpirun lub mpiexec. Isotne jest aby podczas uruchamiania aplikacji nie przekazywać zmiennych środowiska, czyli w przypadku IntelMPI należy dodać parametr -genvnoneAplikacja będzie miała dostęp do wszystkich kart GPU zaalokowanych w komendzie salloc, niezależnie od wymagania gpu:0 użytego w srun.

Po zakończeniu testów należy usunąć alokację za pomocą:

scancel 1234

Zadania wsadowe

Dla skryptu wsadowego dodatkowe zmiany nie są potrzebne, przykładowo gdy żądamy po jednej karcie na węzeł obliczeniowy, wystarczy dopisać do skryptu:

#SBATCH --partition=plgrid-gpu
#SBATCH --gres=gpu


Uwaga: Wszelkie informacje na temat komend SLURMa można znaleźć w manualu, np.: man sbatch


Przykładowe skrypty dla systemu kolejkowego


Code Block
titleTeraChem (zrównoleglenie na dwie karty graficzne)
#!/bin/bash
#SBATCH -N 1
#SBATCH --ntasks-per-node=1
#SBATCH -p plgrid-gpu
#SBATCH --gres=gpu:2
#SBATCH --time 1:00:00
Code Block
languagebash
titleNAND
#!/bin/sh

#PBS -l nodes=3:ppn=12:gpus=2:shared
#PBS -N sample_namd
#PBS -q gpgpu

cd $PBS_O_WORKDIR

# initializing proper environment for NAMD with GPU support
module add gpu/namdTeraChem
plgrid/apps/terachem/1.93

# actual job
runnamd$TERACHEMRUN stmvch.namdinp > stmv2_2x2ch.log 


bash
Code Block
language
titleGAMESSNAMD
#!/bin/sh
bash
# theNAMD numberGPPGU ofrequires GPUsexactly requested
#one atworking the moment it must be set to 2 per node
#PBS -l nodes=2:ppn=4:gpus=2:exclusive_process

#PBS -N sample_gamess 
#PBS -q gpgpu

# changing directory to the one from which the job is submitted
cd $PBS_O_WORKDIR

# initializing proper environment for GAMESS with GPU support
module add gpu/gamess

# actual job
rungms noq15 >& noq15.log

 

 

...

node
#SBATCH -N 1
#SBATCH --ntasks-per-node=24
#SBATCH -p plgrid-gpu
#SBATCH --gres=gpu:2
#SBATCH --time 1:00:00

module load plgrid/apps/namd/2.14-ompi

cd $SLURM_SUBMIT_DIR

if [ ! -f stmv.tar.gz ]; then
        wget http://www.ks.uiuc.edu/Research/namd/utilities/stmv.tar.gz
fi
tar -xvf stmv.tar.gz -C $SCRATCHDIR

cd $SCRATCHDIR/stmv

sed -i 's/500/5000/g' stmv.namd
sed -i 's/\/usr\/tmp\/stmv-output/\$env\(SCRATCHDIR\)\/stmv-output/g' stmv.namd

namdrun stmv.namd