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