This is an old revision of the document!
Table of Contents
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 <del>account sufficient pam_succeed_if.so user ingroup qadmin account required pam_slurm.so</del>
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
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
