Diferencias
Muestra las diferencias entre dos versiones de la página.
| 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.1 | knowhow: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): '' | ||
| + | * Partición GPU (40 vCPU, 128GB, L40s 48GB VRAM): '' | ||
| + | * Partición GPU (20 vCPU, 128GB, L4 24GB VRAM): '' | ||
| + | Recuerda que si no especificas recurso con gres, entrará en la primera gpu libre | ||
| + | </ | ||
| + | |||
| + | <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. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== 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: | ||
| + | |||
| + | ===== 1. Requisitos previos ===== | ||
| + | |||
| + | * Tener cuenta de usuario activa: '' | ||
| + | * Tener acceso SSH al clúster: '' | ||
| + | * Tener permiso de uso en al menos una partición: | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ===== 2. Acceso al clúster ===== | ||
| + | |||
| + | Conexión típica: | ||
| + | |||
| + | <code bash> | ||
| + | ssh < | ||
| + | </ | ||
| + | |||
| + | Te dejará en ''/ | ||
| + | |||
| + | ===== 3. Comandos básicos que vas a usar siempre ===== | ||
| + | |||
| + | * Ver estado general del clúster: | ||
| + | |||
| + | <code bash> | ||
| + | sinfo | ||
| + | </ | ||
| + | |||
| + | * Ver cola de trabajos: | ||
| + | |||
| + | <code bash> | ||
| + | squeue | ||
| + | </ | ||
| + | |||
| + | * Ver solo tus trabajos: | ||
| + | |||
| + | <code bash> | ||
| + | squeue -u < | ||
| + | </ | ||
| + | |||
| + | * Ver detalle de un job: | ||
| + | |||
| + | <code bash> | ||
| + | scontrol show job < | ||
| + | </ | ||
| + | |||
| + | * Cancelar un job: | ||
| + | |||
| + | <code bash> | ||
| + | scancel < | ||
| + | </ | ||
| + | |||
| + | ===== 4. Flujo estándar de trabajo ===== | ||
| + | |||
| + | ==== 4.1 Crear un script de job ('' | ||
| + | |||
| + | Ejemplo CPU: | ||
| + | |||
| + | <code bash> | ||
| + | cat > job_cpu.sbatch <<' | ||
| + | #!/bin/bash | ||
| + | #SBATCH --job-name=cpu_test | ||
| + | #SBATCH --partition=cpu | ||
| + | #SBATCH --nodes=1 | ||
| + | #SBATCH --ntasks=1 | ||
| + | #SBATCH --cpus-per-task=4 | ||
| + | #SBATCH --time=00: | ||
| + | |||
| + | echo " | ||
| + | echo "Host: $(hostname)" | ||
| + | echo " | ||
| + | echo " | ||
| + | sleep 20 | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | Ejemplo GPU: | ||
| + | |||
| + | <code bash> | ||
| + | cat > job_gpu.sbatch <<' | ||
| + | #!/bin/bash | ||
| + | #SBATCH --job-name=gpu_test | ||
| + | #SBATCH --partition=gpu | ||
| + | #SBATCH --nodes=1 | ||
| + | #SBATCH --ntasks=1 | ||
| + | #SBATCH --cpus-per-task=4 | ||
| + | #SBATCH --gres=gpu: | ||
| + | #SBATCH --time=00: | ||
| + | |||
| + | nvidia-smi || true | ||
| + | echo " | ||
| + | sleep 20 | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | ==== 4.2 Enviar el job ==== | ||
| + | |||
| + | <code bash> | ||
| + | sbatch job_cpu.sbatch | ||
| + | </ | ||
| + | |||
| + | Slurm devolverá algo como: | ||
| + | |||
| + | < | ||
| + | Submitted batch job < | ||
| + | </ | ||
| + | |||
| + | ==== 4.3 Monitorizar ==== | ||
| + | |||
| + | <code bash> | ||
| + | squeue -u < | ||
| + | </ | ||
| + | |||
| + | Estados comunes: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ===== 5. Dónde salen stdout y stderr ===== | ||
| + | |||
| + | En este despliegue, si no defines '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Equivalente para un job real: | ||
| + | |||
| + | * ''/ | ||
| + | * ''/ | ||
| + | |||
| + | Consultar: | ||
| + | |||
| + | <code bash> | ||
| + | cat / | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | ===== 6. Scratch por job (importantísimo) ===== | ||
| + | |||
| + | Durante la ejecución, el clúster crea automáticamente: | ||
| + | |||
| + | * ''/ | ||
| + | |||
| + | 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 ''/ | ||
| + | |||
| + | ===== 7. Job interactivo ===== | ||
| + | |||
| + | Para abrir una sesión interactiva en un nodo: | ||
| + | |||
| + | <code bash> | ||
| + | srun --partition=< | ||
| + | </ | ||
| + | |||
| + | Para GPU: | ||
| + | |||
| + | <code bash> | ||
| + | srun --partition=< | ||
| + | </ | ||
| + | |||
| + | ===== 8. Arrays de jobs ===== | ||
| + | |||
| + | Ejemplo: | ||
| + | |||
| + | <code bash> | ||
| + | cat > job_array.sbatch <<' | ||
| + | #!/bin/bash | ||
| + | #SBATCH --job-name=array_demo | ||
| + | #SBATCH --partition=< | ||
| + | #SBATCH --array=1-10 | ||
| + | #SBATCH --time=00: | ||
| + | |||
| + | echo "Task ID: $SLURM_ARRAY_TASK_ID" | ||
| + | sleep 5 | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | Enviar: | ||
| + | |||
| + | <code bash> | ||
| + | sbatch job_array.sbatch | ||
| + | </ | ||
| + | |||
| + | ===== 9. Dependencias entre jobs ===== | ||
| + | |||
| + | Enviar un primer job: | ||
| + | |||
| + | <code bash> | ||
| + | jid1=$(sbatch --parsable job_cpu.sbatch) | ||
| + | </ | ||
| + | |||
| + | Enviar un segundo job que empiece cuando termine bien el primero: | ||
| + | |||
| + | <code bash> | ||
| + | sbatch --dependency=afterok: | ||
| + | </ | ||
| + | |||
| + | ===== 10. Historial y contabilidad ===== | ||
| + | |||
| + | Ver historial básico: | ||
| + | |||
| + | <code bash> | ||
| + | sacct -u < | ||
| + | </ | ||
| + | |||
| + | Formato ampliado: | ||
| + | |||
| + | <code bash> | ||
| + | sacct -u < | ||
| + | </ | ||
| + | |||
| + | ===== 11. Ver recursos de nodos ===== | ||
| + | |||
| + | <code bash> | ||
| + | sinfo -N -l | ||
| + | </ | ||
| + | |||
| + | Detalle de un nodo: | ||
| + | |||
| + | <code bash> | ||
| + | scontrol show node < | ||
| + | </ | ||
| + | |||
| + | ===== 12. Errores comunes y solución rápida ===== | ||
| + | |||
| + | * '' | ||
| + | * Tu usuario no está asociado a esa cuenta/ | ||
| + | * Contacta con administración. | ||
| + | |||
| + | * Job en '' | ||
| + | * Puede faltar recursos o prioridad. | ||
| + | * Revisa motivo: | ||
| + | |||
| + | <code bash> | ||
| + | squeue -j < | ||
| + | </ | ||
| + | |||
| + | * No aparece output esperado | ||
| + | * Revisa rutas por defecto ''/ | ||
| + | * Revisa '' | ||
| + | |||
| + | * Error de GPU ('' | ||
| + | * '' | ||
| + | * Verifica con '' | ||
| + | |||
| + | ===== 13. Buenas prácticas de uso ===== | ||
| + | |||
| + | * Solicita solo recursos que realmente necesitas. | ||
| + | * Define '' | ||
| + | * 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=< | ||
| + | #SBATCH --partition=< | ||
| + | #SBATCH --nodes=1 | ||
| + | #SBATCH --ntasks=1 | ||
| + | #SBATCH --cpus-per-task=< | ||
| + | #SBATCH --time=< | ||
| + | #SBATCH --mem=< | ||
| + | |||
| + | set -euo pipefail | ||
| + | echo "Job $SLURM_JOB_ID en $(hostname)" | ||
| + | |||
| + | # Tu carga de trabajo aquí | ||
| + | </ | ||
| + | |||
| + | ===== 15. Checklist rápido antes de enviar ===== | ||
| + | |||
| + | * Script '' | ||
| + | * Partición correcta ('' | ||
| + | * Recursos correctos ('' | ||
| + | * Ruta de datos de entrada existe. | ||
| + | * Resultado final se guarda en ruta persistente. | ||
| + | |||
| + | ---- | ||