knowhow:slurm

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
knowhow:slurm [2026/03/09 10:01] – borrado - editor externo (Fecha desconocida) 127.0.0.1knowhow:slurm [2026/06/11 20:10] (actual) lbernal
Línea 1: Línea 1:
 +<WRAP center round info 60%>
 +Tipos de nodos disponibles:
 +  * Partición CPU (40 vCPU, 128GB)
 +  * Partición GPU (40 vCPU, 256GB, H100 96GB VRAM): ''--gres=H_100_NVL''
 +  * Partición GPU (40 vCPU, 128GB, L40s 48GB VRAM): ''--gres=L40s''
 +  * Partición GPU (20 vCPU, 128GB, L4 24GB VRAM): ''--gres=L4''
  
 +Recuerda que si no especificas recurso con gres, entrará en la primera gpu libre
 +</WRAP>
 +
 +<WRAP center round important 60%>
 +Si detectamos malgasto de recursos (por ejemplo reservar grandes cantidades de memoria para trabajos que no las necesiten) se aplicarán penalizaciones.
 +
 +Los recursos son comunes a todo el grupo y hay que hacer un uso responsable de ellos.
 +</WRAP>
 +
 +
 +====== Uso de Slurm ======
 +
 +Guía de usuario para el uso del cluster de Slurm desplegado. **Página visible a externos sin autenticación**
 +
 +Ver también cómo [[knowhow:slurm:guias_de_uso|enviar trabajos al clúster con sbatch]], cómo [[knowhow:slurm:ejemplo_workflow_jupyternb|ejecutar Jupyter en Slurm mediante sbatch]] y el [[knowhow:slurm:faq|FAQ]]
 +
 +===== 1. Requisitos previos =====
 +
 +  * Tener cuenta de usuario activa: ''LDAP ANTS'' o ''[[https://externos.inf.um.es/fusiondirectory|LDAP EXTERNOS]]''.
 +  * Tener acceso SSH al clúster: ''155.54.210.99''.
 +  * Tener permiso de uso en al menos una partición:
 +    * ''CPU''
 +    * ''GPU'' (si aplica)
 +
 +===== 2. Acceso al clúster =====
 +
 +Conexión típica:
 +
 +<code bash>
 +ssh <USUARIO_LDAP>@<HOST_IP>
 +</code>
 +
 +Te dejará en ''/slurm/home/<USUARIO>''.
 +
 +===== 3. Comandos básicos que vas a usar siempre =====
 +
 +  * Ver estado general del clúster:
 +
 +<code bash>
 +sinfo
 +</code>
 +
 +  * Ver cola de trabajos:
 +
 +<code bash>
 +squeue
 +</code>
 +
 +  * Ver solo tus trabajos:
 +
 +<code bash>
 +squeue -u <USUARIO>
 +</code>
 +
 +  * Ver detalle de un job:
 +
 +<code bash>
 +scontrol show job <JOB_ID>
 +</code>
 +
 +  * Cancelar un job:
 +
 +<code bash>
 +scancel <JOB_ID>
 +</code>
 +
 +===== 4. Flujo estándar de trabajo =====
 +
 +==== 4.1 Crear un script de job (''.sbatch'') ====
 +
 +Ejemplo CPU:
 +
 +<code bash>
 +cat > job_cpu.sbatch <<'EOF'
 +#!/bin/bash
 +#SBATCH --job-name=cpu_test
 +#SBATCH --partition=cpu
 +#SBATCH --nodes=1
 +#SBATCH --ntasks=1
 +#SBATCH --cpus-per-task=4
 +#SBATCH --time=00:10:00
 +
 +echo "Usuario: $USER"
 +echo "Host: $(hostname)"
 +echo "JobID: $SLURM_JOB_ID"
 +echo "Trabajo CPU de prueba"
 +sleep 20
 +EOF
 +</code>
 +
 +Ejemplo GPU:
 +
 +<code bash>
 +cat > job_gpu.sbatch <<'EOF'
 +#!/bin/bash
 +#SBATCH --job-name=gpu_test
 +#SBATCH --partition=gpu
 +#SBATCH --nodes=1
 +#SBATCH --ntasks=1
 +#SBATCH --cpus-per-task=4
 +#SBATCH --gres=gpu:1
 +#SBATCH --time=00:10:00
 +
 +nvidia-smi || true
 +echo "Trabajo GPU de prueba"
 +sleep 20
 +EOF
 +</code>
 +
 +==== 4.2 Enviar el job ====
 +
 +<code bash>
 +sbatch job_cpu.sbatch
 +</code>
 +
 +Slurm devolverá algo como:
 +
 +<code>
 +Submitted batch job <JOB_ID>
 +</code>
 +
 +==== 4.3 Monitorizar ====
 +
 +<code bash>
 +squeue -u <USUARIO>
 +</code>
 +
 +Estados comunes:
 +
 +  * ''PD'': pendiente (pendiente de recursos/políticas).
 +  * ''R'': ejecutando.
 +  * ''CG'': terminando.
 +  * ''CD'': completado.
 +  * ''F'': fallado.
 +
 +===== 5. Dónde salen stdout y stderr =====
 +
 +En este despliegue, si no defines ''--output''/''--error'', Slurm aplica rutas por defecto:
 +
 +  * ''stdout'' -> ''/slurm/home/%u/output/%j/stdout.txt''
 +  * ''stderr'' -> ''/slurm/home/%u/output/%j/stderr.txt''
 +
 +Equivalente para un job real:
 +
 +  * ''/slurm/home/<USUARIO>/output/<JOB_ID>/stdout.txt''
 +  * ''/slurm/home/<USUARIO>/output/<JOB_ID>/stderr.txt''
 +
 +Consultar:
 +
 +<code bash>
 +cat /slurm/home/<USUARIO>/output/<JOB_ID>/stdout.txt
 +cat /slurm/home/<USUARIO>/output/<JOB_ID>/stderr.txt
 +</code>
 +
 +===== 6. Scratch por job (importantísimo) =====
 +
 +Durante la ejecución, el clúster crea automáticamente:
 +
 +  * ''/scratch/slurm/<USUARIO>/<JOB_ID>''
 +
 +Y al terminar el job, se elimina automáticamente.
 +
 +Recomendación:
 +
 +  * Copia resultados importantes desde scratch a una ruta persistente antes de finalizar.
 +  * Usa rutas persistentes para salidas finales (por ejemplo ''/slurm/home/<USUARIO>/...'')
 +
 +===== 7. Job interactivo =====
 +
 +Para abrir una sesión interactiva en un nodo:
 +
 +<code bash>
 +srun --partition=<PARTICION_CPU> --ntasks=1 --cpus-per-task=2 --time=00:30:00 --pty bash
 +</code>
 +
 +Para GPU:
 +
 +<code bash>
 +srun --partition=<PARTICION_GPU> --gres=gpu:1 --ntasks=1 --cpus-per-task=2 --time=00:30:00 --pty bash
 +</code>
 +
 +===== 8. Arrays de jobs =====
 +
 +Ejemplo:
 +
 +<code bash>
 +cat > job_array.sbatch <<'EOF'
 +#!/bin/bash
 +#SBATCH --job-name=array_demo
 +#SBATCH --partition=<PARTICION_CPU>
 +#SBATCH --array=1-10
 +#SBATCH --time=00:05:00
 +
 +echo "Task ID: $SLURM_ARRAY_TASK_ID"
 +sleep 5
 +EOF
 +</code>
 +
 +Enviar:
 +
 +<code bash>
 +sbatch job_array.sbatch
 +</code>
 +
 +===== 9. Dependencias entre jobs =====
 +
 +Enviar un primer job:
 +
 +<code bash>
 +jid1=$(sbatch --parsable job_cpu.sbatch)
 +</code>
 +
 +Enviar un segundo job que empiece cuando termine bien el primero:
 +
 +<code bash>
 +sbatch --dependency=afterok:${jid1} job_cpu.sbatch
 +</code>
 +
 +===== 10. Historial y contabilidad =====
 +
 +Ver historial básico:
 +
 +<code bash>
 +sacct -u <USUARIO> --starttime today
 +</code>
 +
 +Formato ampliado:
 +
 +<code bash>
 +sacct -u <USUARIO> --format=JobID,JobName,Partition,State,Elapsed,ExitCode
 +</code>
 +
 +===== 11. Ver recursos de nodos =====
 +
 +<code bash>
 +sinfo -N -l
 +</code>
 +
 +Detalle de un nodo:
 +
 +<code bash>
 +scontrol show node <NODO>
 +</code>
 +
 +===== 12. Errores comunes y solución rápida =====
 +
 +  * ''Invalid account or account/partition combination specified''
 +    * Tu usuario no está asociado a esa cuenta/partición.
 +    * Contacta con administración.
 +
 +  * Job en ''PD'' mucho tiempo
 +    * Puede faltar recursos o prioridad.
 +    * Revisa motivo:
 +
 +<code bash>
 +squeue -j <JOB_ID> -o "%.18i %.9P %.20j %.8u %.2t %.10M %.6D %R"
 +</code>
 +
 +  * No aparece output esperado
 +    * Revisa rutas por defecto ''/slurm/home/<USUARIO>/output/<JOB_ID>/''
 +    * Revisa ''stderr.txt''
 +
 +  * Error de GPU (''Requested node configuration is not available'')
 +    * ''--gres=gpu:<N>'' no cuadra con lo disponible.
 +    * Verifica con ''sinfo -N -l''
 +
 +===== 13. Buenas prácticas de uso =====
 +
 +  * Solicita solo recursos que realmente necesitas.
 +  * Define ''--time'' realista.
 +  * Usa scripts reproducibles y versionados.
 +  * Guarda resultados finales en almacenamiento persistente.
 +  * Limpia datos intermedios pesados.
 +
 +===== 14. Plantilla mínima recomendada =====
 +
 +<code bash>
 +#!/bin/bash
 +#SBATCH --job-name=<NOMBRE_JOB>
 +#SBATCH --partition=<PARTICION_CPU_O_GPU>
 +#SBATCH --nodes=1
 +#SBATCH --ntasks=1
 +#SBATCH --cpus-per-task=<N_CPUS>
 +#SBATCH --time=<HH:MM:SS>
 +#SBATCH --mem=<RAM_MB_O_GB>
 +
 +set -euo pipefail
 +echo "Job $SLURM_JOB_ID en $(hostname)"
 +
 +# Tu carga de trabajo aquí
 +</code>
 +
 +===== 15. Checklist rápido antes de enviar =====
 +
 +  * Script ''.sbatch'' tiene ''#!/bin/bash''.
 +  * Partición correcta (''CPU'' o ''GPU'').
 +  * Recursos correctos (''cpu'', ''mem'', ''time'', ''gres'' si GPU).
 +  * Ruta de datos de entrada existe.
 +  * Resultado final se guarda en ruta persistente.
 +
 +----