💡 Astuces

Grappes de calcul - Alliance Canada

Récupérer les tùches échouées et les relancer

Il s’agit d’une solution “à la mitaine” qui peut ĂȘtre remplacĂ©e par l’utilisation de l’outil META-Farm de l’Alliance.

Mise en contexte

On veut calculer le PCI pour plusieurs espÚces. Initialement le array range allait de 1-243, ce qui correspondait aux 243 espÚces. AprÚs le premier lancement du script, 33 espÚces (ou tùches) avaient échouées:

  • RĂ©cupĂ©rer le statut des tĂąches (sjobexitmod)
  • RĂ©cupĂ©rer les lignes qui prĂ©sentent le pattern FAILED (grep)
  • RĂ©cupĂ©rer la premiĂšre colonnes qui contient jobId_taskId (awk)
  • Couper les strings au niveau de _ et rĂ©cupĂ©rer la deuxiĂšme partie de string qui correspond Ă  la tĂąche ID (cut)
  • Enregistrer la sortie dans un fichier (>)
sjobexitmod -l jobId > sjobexitmod_status.txt
grep -e 'FAILED' sjobexitmod_status.txt | awk '{print $1}' | cut -d '_' -f 2 > failed_task_id.txt
  • Dans le fichier bash envoyĂ© Ă  l’ordonnanceur slurm, crĂ©er une variable shell qui pourra ĂȘtre importĂ© dans l’environnement R.
#!/bin/bash
#SBATCH --account=def-dgravel
#SBATCH --array=1-33
#SBATCH -t 01:00:00
#SBATCH --mem-per-cpu=50GB
#SBATCH --cpus-per-task=1
#SBATCH --job-name=Summer_school_test
#SBATCH --mail-user=juhc3201@usherbrooke.ca
#SBATCH --mail-type=ALL

echo $SLURM_ARRAY_TASK_ID

FAILED_TASK_ID=$(sed -n "${SLURM_ARRAY_TASK_ID}p" failed_task_id.txt)

echo $FAILED_TASK_ID

module load StdEnv/2023 gcc/12.3 gdal/3.7.2 arrow/15.0.1 udunits/2.2.28 r/4.4.0
Rscript pci.r
failed_task_id <- as.integer(Sys.getenv("FAILED_TASK_ID")) #récupÚre la variable shell FAILED_TASK_ID

Ici la taille de l’array correspond au nombre de tĂąches qui ont Ă©chouĂ©. sed permet de rĂ©cupĂ©rer la valeur dans le fichier failed_task_id.txt qui correspond au numĂ©ro du SLURM_ARRAY_TASK_ID. Et cette task_id est utilisĂ©e pour indexer le nom de l’espĂšce qui manque (dans cet exemple).