Tutorial d'ús Shirka

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
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>