User Tools

Site Tools


slurm_configgpu

Restringir, limitar y registrar horas GPU

Inicialmente, no podíamos realizar una correcta limitación de las GPUs debido a una configuración errónea de las mismas en gres.conf

Logramos identificar que la configuración correcta es esta:

Archivos de configuración

/etc/slurm/gres.conf
AutoDetect=off
Name=gpu Type=intel_xt1550 MultipleFiles=/dev/dri/card0,/dev/dri/renderD128
Name=gpu Type=intel_xt1550 MultipleFiles=/dev/dri/card1,/dev/dri/renderD129
Name=gpu Type=intel_xt1550 MultipleFiles=/dev/dri/card2,/dev/dri/renderD130
Name=gpu Type=intel_xt1550 MultipleFiles=/dev/dri/card3,/dev/dri/renderD131
/etc/slurm/cgroup.conf
ConstrainCores=yes
ConstrainDevices=yes
/etc/slurm/slurm.conf
...
...
JobAcctGatherType=jobacct_gather/cgroup
ProctrackType=proctrack/cgroup
TaskPlugin=task/cgroup,task/affinity
AccountingStorageTRES=cpu,mem,energy,node,billing,fs/disk,vmem,pages,gres/gpu,gres/gpumem,gres/gpuutil
...
NodeName=cn[001-005,007-016,018-021,023-074] Sockets=2 \
CoresPerSocket=32 ThreadsPerCore=1 Gres=gpu:intel_xt1550:4 RealMemory=506808 
...

De esta manera, el usuario sólo podrá utilizar GPUs si especifica la flag –gpus en los comandos de slurm srun/sbatch/salloc.

Restringir bypasseo via SSH

Sin setear límites, un usuario podría reservar un nodo sin gpus, y luego hacer ssh al mismo y utilizar todos los recursos sin restricciones. Para evitar esto es necesario usar el plugin de PAM para slurm pam_slurm_adopt.

Para esto es necesario modificar algunos archivos de los nodos de cómputo. Por lo tanto, haremos la configuración de los mismos vía un post boot script de Confluent.

/etc/pam.d/sshd
#%PAM-1.0
auth       substack     password-auth
auth       include      postlogin
account    required     pam_sepermit.so
account    required     pam_nologin.so
account    include      password-auth
-account    sufficient      pam_slurm_adopt.so
account    required     pam_access.so
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    optional     pam_motd.so
session    include      password-auth
session    include      postlogin

Donde

-account    sufficient      pam_slurm_adopt.so

permite el acceso a los usuarios autorizados

account    required     pam_access.so

en caso de los qadmines o root, permite que accedan al nodo a través el módulo pam_access ya que también agregamos las siguietes líneas a el archivo de configuración de pam_access.

/etc/security/access.conf
+:root:ALL
+:(qadmin):ALL
-:ALL:ALL

Nota: Previamente insertábamos estas dos lineas al stack accout de sshd

account    sufficient   pam_succeed_if.so user ingroup qadmin
account required pam_slurm.so

Es necesario removerlas para esta nueva implementación.

Conflictos con systemd_logind

Es necesario desactivar pam_systemd de password-auth

/etc/pam.d/password-auth
 ...
...
#-session     optional      pam_systemd.so
...
...

y enmascarar el servicio:

 systemctl mask systemd_logind

Accounting

De esta manera el usuario sólo podrá usar GPUs usando slurm como intermediario. De esta manera, podemos realizar un accounting de las horas para respetar lo propuesto por los IPACS.

    case $ipac in
        pad)    
	    sudo sacctmgr -i modify qos $project set  GrpTRESMins=gres/gpu=15000000
	;;
        pci)    
	    sudo sacctmgr -i modify qos $project set  GrpTRESMins=gres/gpu=3600000
	;;
        pisca)    
	    sudo sacctmgr -i modify qos $project set  GrpTRESMins=gres/gpu=60000
	;;
    esac
slurm_configgpu.txt · Last modified: by bbruzzo