Tutorial d'ús Shirka
- 1 Introducció
- 2 Recursos
- 2.1 Nodes
- 2.1.1 Tipus
- 2.1.2 Característiques
- 2.1.3 Quantitat
- 2.2 Cues i particions
- 2.3 Processadors, *cores i tasques
- 2.4 GPUs
- 2.1 Nodes
- 3 Comandos més comuns
- 3.1 Informació sobre els nodes i les particions
- 3.2 Llançament de treballs al clúster
- 3.3 Informació sobre el Treball
- 3.3.1 Mostrar la data esperada d'entrada a execució dels treballs pendents
- 3.3.2 Llistar els treballs d'un usuari
- 3.3.3 Llistar tots els treballs en execució d'un usuari
- 3.3.4 Mostrar tots els treballs en espera d'un usuari
- 3.3.5 Llistar tots els treballs d'un usuari en una partició
- 3.3.6 Mostrar informació detallada d'un treball
- 3.3.7 Mostrar informació sobre els recursos consumits per un treball
- 3.3.8 Visualització dels treballs d'un usuari en manera gràfica
- 3.4 Control de treballs
- 3.4.1 Control de treballs
- 3.4.2 Cancel·lar els treballs d'un usuari
- 3.4.3 Cancel·lar tots els treballs pendents d'un usuari
- 3.4.4 Cancel·lar un o més treballs pel seu nom
- 3.4.5 Detindre un treball
- 3.4.6 Reprendre un treball retingut
- 3.4.7 Tornar a encolar un treball en particular (cancel·lar i executar)
Introducció
Quan els usuaris inicien sessió en la facilitat de càlcul shirka, ho fan en el node central que dona accés als recursos del sistema. Per això, els usuaris no han d'executar cap treball sobre aquest equip ja que tots comparteixen aquesta màquina i l'execució de processos en ella, alenteix el treball de la resta d'usuaris i penalitza en la gestió del clúster.
Tots els treballs HPC que s'executen en el sistema han de ser executats en els nodes de càlcul mitjançant l'enviament d'un script al gestor de treballs de shirka.
El gestor de treballs o gestor de cues s'encarrega d'enviar els treballs als nodes de càlcul als quals cada usuari té accés, controla la seua execució i evita que diversos treballs compartisquen els mateixos recursos, veient així incrementats els seus temps d'execució. El gestor de cues usat per la facilitat de càlcul shirka és SLURM.
SLURM Workload Manager, o formalment (Simple Linux Utility for Resource Management), és un sistema de maneig de cues i planificador de tasques per a clústers Linux (https://slurm.schedmd.com).
Recursos
Nodes
El maquinari que compon la facilitat de càlcul és el següent:
Tipus | Característiques | Quantitat |
---|---|---|
NODE CÀLCUL
| MODEL: Supermicro SYS-6029P-TRT CPU: Xeon(R) Gold 6248R CPU @ 3 00GHz (24 Cores) MEMÒRIA: 12 x 16GB DDR4 a 2933 MT/s (2934 MT/s) DISCOS: 4 x INTEL SSDSC2KB960G8 960GB 6Gb/s PORTS DE CONNEXIÓ: 2 x 10G BASE-T + 1 IPMI | 29 |
NODE GPU
| MODEL: Supermicro SYS-1029GQ-TVRT CPU: 2 x Xeon(R) Gold 5220R CPU @ 2.20GHz (24 cores) MEMÒRIA: 12 x 32GB DDR4 a 2933 MT/s (2666 MT/s) CONTROLADORA DISCOS: AVAGO MegaRAID SAS 9480-8i8e amb 4GB de Memòria RAID Level Supported: RAID0, RAID1, RAID5, RAID6, RAID00, RAID10, RAID50, RAID60 DISCOS: 2 x INTEL SSDSC2KB960G8 960GB 6Gb/s PORTS DE CONNEXIÓ: 2 x 10G BASE-T + 1 IPMI GPU: 4 x Tesla V100-SXM2 32GB | 2 |
JBOD GPU
| DISCS: (2 + 2) x INTEL SSDSC2KB960G8 960GB 6Gb/s PORTS DE CONNEXIÓ: 1 IPMI | 1 |
NODE CENTRAL
| MODEL: Supermicro SYS-6029P-TRT CPU: 2 x Xeon(R) Silver 4214 CPU @ 2.20GHz (12 cores) MEMÒRIA: 8 x 32GB DDR4 a 2933 MT/s (2400 MT/s) CONTROLADORA DISCOS: AVAGO 3108 MegaRAID 2GB de Memòria RAID Level Supported: RAID0, RAID1, RAID5, RAID6, RAID00, RAID10, RAID50, RAID60 CONTROLADORA JBOD: AVAGO MegaRAID SAS 9480-8i8e amb 4GB de Memòria RAID Level Supported: RAID0, RAID1, RAID5, RAID6, RAID00, RAID10, RAID50, RAID60 DISCOS: 8 x SAS SEAGATE ST2400MM0129 2,4TB 12Gb/s PORTS DE CONNEXIÓ: 2 x 10G BASE-T + 1 IPMI | 1 |
JBOD CENTRAL
| MODEL: Supermicro CSE-PTJBOD-CB3 CPU: N/A MEMÒRIA: N/A DISCOS: 11 x SAS HGST HUH721212AL5200 12TB 12Gb/s PORTS DE CONNEXIÓ: 1 IPMI | 1 |
SWITCH | MODEL: Lenovo NE1072T CPU: NXP T1042 MEMÒRIA: 4096 MB DISCS: Flaix: 128 MB PORTS DE CONNEXIÓ: 48 x 10G BASE-T + 6 x Slots QSFP+ 40GbE (incloent un transceiver 40GbE per al switch Lenovo i un altre per al core HP Aruba) | 2 |
Cues i particions
En SLURM les cues passen a denominar-se particions.
En la facilitat de càlcul s'han configurat les següents particions:
Partició q1: per a treballs que demanden 12 cores o menys en total.
Partició q2: per a treballs que demanden més de 12 cores i fins a un màxim de 24 en total.
Partició q3: per a treballs que requerisquen la utilització de GPUs i fins a un màxim de 8 GPUs.
Totes les particions tenen una limitació en la duració dels càlculs de 72 hores. Si els usuaris necessiten temps majors hauran d'optar per dur a terme un procés de checkpoint+restart.
Les particions q1 i q2 comparteixen els 29 nodes de càlcul. Mentre que la partició q3 està formada pels 2 nodes amb GPU.
Processadors, *cores i tasques
En general en el sistema de cues SLURM s'apliquen les següents equivalències:
1 tasca = 1 processador
1 processador = 1 core
És a dir, que si no se li especifica el contrari, quan s'assigna un nombre de tasques (-n), s'està indicant el nombre de processadors que s'utilitzaren en executar un treball. No obstant això, existeixen treballs en els quals les tasques requereixen més processadors, com per exemple els executables que utilitzen brins (threads).
Per exemple, si un executable utilitza la biblioteca OpenMP per a paralelizar creant diversos brins, serà necessari indicar al gestor de cues el nombre de brins/cores que ha d'assignar al treball. Si l'executable crea 4 brins, llavors s'han de reservar 4 cores de la següent forma:
$ sbatch -n 1 --cpus-per-task=4 script.sh
El comando anterior li indica a SLURM que reserve per a 1 tasca amb 4 cores.
En el següent exemple, un executable que utilitza OpenMP i MPI combinats requereix 2 processos MPI (tasques) en diferents nodes i llança 2 brins per procés MPI:
$ sbatch -N 2 -n 2 --tasks-per-node=1 --cpus-per-task=2 script.sh
En aquest cas s'està especificant que es reserven 2 nodes (-N) per a 2 tasques (-n) en total, de manera que en cada node m'assigne 1 tasca amb 2 cores per tasca.
Si es fa ús sol de MPI per a paralelizar, seria necessari executar el següent comando en el gestor de cues per a obtindre el mateix resultat :
$ sbatch -N 2 -n 4 --tasks-per-node=2 --cpus-per-task=1 script.sh
GPUs
Els treballs que requerisquen l'ús de GPUs han de ser executats en la partició q3. A més, és necessari indicar mitjançant l'argument --gpus-per-node el número de gps que s'empraran en cada node:
$ sbatch -p q3 -N 2 -n 2 --gpus-per-node=4 script.sh
Comandos més comuns
A continuació es descriuen els comandos més utilitzats en aquest sistema de particions (cues). Per a ampliar la informació sobre algun d'aquests comandos és suficient amb teclejar en el clúster:
$ man <comando slurm>
On <comando slurm> és un dels comandos descrits en els següents apartats.
Informació sobre els nodes i les particions
Mostrar informació d'una partició
$ sinfo -p <partition>
Mostrar informació de totes les particions a intervals de 60 segons
$ sinfo -i60
Mostrar els nodes no operatius i el seu motiu
$ sinfo -R
Llançament de treballs al clúster
Existeixen dos maneres d'executar un treball en els nodes del clúster:
Comando sbatch (enviament d'un treball a una partició per a esperar a la seua execució)
Comando srun (enviament d'un treball a una partició en temps real de manera interactiva i bloqueante).
Mai s'han d'executar els programes en els nodes a través d'un ssh. Per a realitzar proves d'un executable és necessari utilitzar el comando srun en manera interactiva (descrit en els següent apartats).
Enviament d'un treball per a la seua execució posterior
En primer lloc s'ha de crear un fitxer (script) amb dades del treball a executar.
Per exemple:
#!/bin/bash
#
#SBATCH -p q1 # Partición (cola)
#SBATCH -N 1 # Número de nodos
#SBATCH -n 1 # Número de cores(CPUs)
#SBATCH -t 0-00:02:00 # Duración (D-HH:MM:SS)
#SBATCH -o %x.%j-%N.out #STDOUT
#SBATCH -e %x.%j-%N.err #STDERR
#SBATCH --mail-type=END,FAIL # Notificación si termina o falla
#SBATCH --mail-user=usuario@uji.es # Enviar correo al email
ulimit -v unlimited
ulimit -t unlimited
srun -l bash -c 'echo $(hostname)'
Tal com s'ha indicat anteriorment per a llançar el treball n'hi ha prou amb executar:
$ sbatch ejemplo.sh
sbatch és un comando utilitzat per a enviar treballs al sistema de cues usant el processament per lots i sense bloqueig (de manera que els resultats s'escriuen en un arxiu i és possible enviar altres comandos immediatament)
La majoria de les opcions del script es poden incloure en la línia d'arguments del comando sbatch:
$ sbatch -p q1 ejemplo.sh
$ sbatch -p q1 -N1 -n1 ejemplo.sh
Enviament en temps real d'un treball o de manera interactiva
El comando srun permet enviar treballs en temps real a una partició. El comando srun és interactiu i bloqueante (el resultat s'obté en el terminal i no és possible escriure altres comandos fins que haja acabat).
Per a llançar un treball en temps real amb srun:
$ srun -p <partición> -N1 -n1 <programa/orden>
Per a executar un treball en manera Interactiva:
$ srun -p <partición> -N1 -n1 --pty $SHELL -i
Informació sobre el Treball
Mostrar la data esperada d'entrada a execució dels treballs pendents
$ squeue --start
Llistar els treballs d'un usuari
$ squeue -u <username>
Llistar tots els treballs en execució d'un usuari
$ squeue -t RUNNING
Mostrar tots els treballs en espera d'un usuari
$ squeue -t PENDING
Llistar tots els treballs d'un usuari en una partició
$ squeue -u <nombreusuario> -p <partición>
Mostrar informació detallada d'un treball
$ scontrol show jobid -dd <jobid>
Mostrar informació sobre els recursos consumits per un treball
$ sacct -j <jobid> --format=JobID,JobName,MaxRSS,Elapsed
Visualització dels treballs d'un usuari en manera gràfica
(És necessari disposar d'un servidor gràfic en el client)
$ sview
Control de treballs
Control de treballs
$ scancel <jobid>
Cancel·lar els treballs d'un usuari
$ scancel -u <nombreusuario>
Cancel·lar tots els treballs pendents d'un usuari
$ scancel -t PENDING -u <nombreusuario>
Cancel·lar un o més treballs pel seu nom
$ scancel --name <nombretrabajo>
Detindre un treball
$ scontrol hold <jobid>
Reprendre un treball retingut
$ scontrol resume <jobid>
Tornar a encolar un treball en particular (cancel·lar i executar)
$ scontrol requeue <jobid>