Exécution d'une commande sur SLURM qui prend des arguments de ligne de commande

Oct 28 2020

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

2 damienfrancois Oct 30 2020 at 14:40

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'"