====== Restringir, limitar y registrar horas GPU ======
Inicialmente, no podíamos realizar una [[admin_slurm|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 [[https://slurm.schedmd.com/pam_slurm_adopt.html|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|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