Time is the essence

J'ai un makefile qui fait tourner différentes tâches pour analyser les génomes de coronavirus.

Je mesure au passage le temps de calcul avec la commande time.

Quand je la lance avec srunj'ai un message d'erreur.

srun time clustalw -infile=data/virus_genomes/coronavirus_selected_genomes.fasta -align -type=dna -quicktree -outfile=results/genome_phylogeny/clustalw_alignments//coronavirus_selected_genomes_clustalw.aln
slurmstepd: error: execve(): time: No such file or directory
srun: error: cpu-node-12: task 0: Exited with exit code 2

Si je lance la même commande sans srun elle démarre sans problème, mais je l'interromps immédiatement pour ne pas tuer le noeud de login.

Si je la lance avec srun mais sans time elle tourne sans problème.

Serait-il possible de voir ce qui cloche ? Le workflow tourne sur mon Mac sans problème et j'aimerais si possible qu'il tourne sous slurm sans devoir supprimer la mesure du temps.

Merci

Jacques

Bonjour,

Je pense que c'est parce que "time" n'est pas un programme mais une fonction du shell bash

Passer explicitement par bash pourrait peut-être résoudre le problème, mais je ne sais pas si c'est une bonne pratique ou pas:

srun bash -c "time ls -lrt"

Bonjour,

Oui c'est bien parce qu'ici time est une fonction de bash.

Slurm propage les variables d'environnements de l'utilisateur à l'environnement d’exécution du job. En revanche, les "fonctions" bash ne sont pas transmises et les scripts ~/.profile et ~/.bashrc ne sont pas exécutés.
https://slurm.schedmd.com/faq.html#user_env

Du coup, la solution de François me semble une bonne solution de contournement.

A noter qu'il existe aussi un utilitaire GNU Time (a ne pas confondre avec la fonction bash du même nom). Cet utilitaire n'est pas installé sur le cluster. Mais on peut imaginer l'installer (ce qui permettrait de faire un srun time <command>).
@team.ifbcorecluster un avis ?

Merci pour vos réponses.
En fait je passe ma vie sous bash, je n'avais même pas imaginé que j'en sortais quand je lançais un slurm.

Quel est le shell par défaut sous slurm ?

Je serais assez tenté d'expérimenter slurm sous bash car il y a peut-être d'autres fonctionnalités spécifiques de bash que j'utiliserai. Pouvez-vous 'indiquer comment faire ? C'est un paramètre de srun ?

Dans le cas d'un script lancé par sbatch, l'interpréteur/shell est celui spécifié dans le shebang. /bin/bash normalement.

Dans le cas de srun, le Shell n'est pas vraiment exécuté, seul la commande est exécutée.
Ainsi, on a pas les fonctions intégré à Bash et le ~/.profile ou ~/.bashrc ne sont pas chargés.
Mais c'est complètement transparent dans 99% des cas. Les variables d'environnements de l'utilisateur sont par exemple transmises et utilisables dans le processus lancé par srun.
Pour avoir l'environnement Bash avec srun, on peut le lancer explicitement comme le propose François: srun --pty bash -c <command>

La gestion des environnements n'est pas simple mais on a normalement pas à s'en soucier :slight_smile: