Exécution d'une commande sur SLURM qui prend des arguments de ligne de commande
Je suis complètement nouveau dans l'utilisation des HPC et SLURM, alors j'apprécierais vraiment quelques conseils ici.
J'ai besoin d'exécuter de manière itérative une commande qui ressemble à ceci
kallisto quant -i '/home/myName/genomes/hSapien.idx' \
-o "output-SRR3225412" \
"SRR3225412_1.fastq.gz" \
"SRR3225412_2.fastq.gz"
où la SRR3225412pièce sera différente à chaque interaction
Le problème est que, comme je l'ai découvert, je ne peux pas simplement ajouter ceci à la fin d'une sbatchcommande
sbatch --nodes=1 \
--ntasks-per-node=1 \
--cpus-per-task=1 \
kallisto quant -i '/home/myName/genomes/hSapien.idx' \
-o "output-SRR3225412" \
"SRR3225412_1.fastq.gz" \
"SRR3225412_2.fastq.gz"
Cette commande ne fonctionne pas. J'obtiens l'erreur
sbatch: error: This does not look like a batch script. The first
sbatch: error: line must start with #! followed by the path to an interpreter.
sbatch: error: For instance: #!/bin/sh
Je voulais demander, comment exécuter la sbatchcommande, en spécifiant ses paramètres d'exécution et en ajoutant également les arguments de ligne de commande pour le kallistoprogramme que j'essaie d'utiliser? En fin de compte, j'aimerais avoir quelque chose comme
#!/bin/bash
for sample in ...
do
sbatch --nodes=1 \
--ntasks-per-node=1 \
--cpus-per-task=1 \
kallistoCommandOnSample --arg1 a1 \
--arg2 a2 arg3 a3
done
Réponses
L'erreur sbatch: error: This does not look like a batch script.est due au fait que sbatchvous attendez un script de soumission . Il s'agit d'un script batch, généralement un script Bash, dans lequel les commentaires commençant par #SBATCHsont interprétés par Slurm comme des options.
Donc, la manière typique de soumettre un travail est de créer un fichier, nommons-le submit.sh:
#! /bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
kallisto quant -i '/home/myName/genomes/hSapien.idx' \
-o "output-SRR3225412" \
"SRR3225412_1.fastq.gz" \
"SRR3225412_2.fastq.gz"
puis soumettez-le avec
sbatch submit.sh
Si vous avez plusieurs travaux similaires à soumettre, il est avantageux pour plusieurs raisons d'utiliser un tableau de travaux . La boucle que vous souhaitez créer peut être remplacée par un seul script de soumission ressemblant à
#! /bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --array=1-10 # Replace here with the number of iterations in the loop
SAMPLES=(...) # here put what you would loop over
CURRSAMPLE=${SAMPLE[$SLURM_ARRAY_TASK_ID]}
kallisto quant -i '/home/myName/genomes/hSapien.idx' \
-o "output-${CURRSAMPLE}" \ "${CURRSAMPLE}_1.fastq.gz" \
"${CURRSAMPLE}_2.fastq.gz"
Comme indiqué par @Carles Fenoy, si vous ne souhaitez pas utiliser de script de soumission, vous pouvez utiliser le --wrapparamètre de sbatch:
sbatch --nodes=1 \
--ntasks-per-node=1 \
--cpus-per-task=1 \
--wrap "kallisto quant -i '/home/myName/genomes/hSapien.idx' \
-o 'output-SRR3225412' \
'SRR3225412_1.fastq.gz' \
'SRR3225412_2.fastq.gz'"