Skip to content
hero

TP cluster abrégé

Objectif

Apprendre à utiliser le cluster genotoul-bioinfo:

  • Se connecter au cluster
  • Chercher et utiliser les ressources du cluster (logiciels, banques, ...)
  • Utiliser SLURM (srun, sbatch, squeue, seff, sacct, ...), en particulier
    • job interactif
    • sbatch sur plusieurs coeurs
    • job array
  • Aspects ecoresponsables

Slides

Ouvrir dans nouvel onglet

Connection au cluster

Démarrez votre machine et ouvrez un terminal (sous Windows, utilisez mobaXterm). Connectez-vous au noeud de login genobioinfo de genotoul-bioinfo en utilisant ssh.

ssh -X <username>@genobioinfo.toulouse.inrae.fr

Récupération de données

Question

Récupérez sur le cluster le données nécessaires au TP et déposez les dans le dossier ~/work/cluster, pour enfin les décompressez. Les données sont disponibles à l'adresse https://web-genobioinfo.toulouse.inrae.fr/~formation/cluster/data/contigs.fasta.gz

Solution

mkdir -p ~/work/clustercd ~/work/clusterwget http://web-genobioinfo.toulouse.inrae.fr/~formation/cluster/data/contigs.fasta.gz...gunzip contigs.fasta.gzlscontigs.fastaless contigs.fasta...

Mon premier job

Nous allons créer un job interactif pour la durée de la formation

# En temps normal on ne met ni `--reservation=m1geno`, ni `--time 04:00:00`srun --reservation=m1geno --time 04:00:00 --pty bash

Utiliser blast

On souhaite comparer des séquences de nucléotides avec une banque de séquences de protéines. Nous allons utiliser blast pour cela, en particulier blastx.

blast n'est pas disponible directement sur le cluster. Il faut utiliser les modules, avec la commande module pour le rendre disponible. Les commandes principales de module sont les suivantes:

# Lister tous les modules disponibles (i.e. programmes)module avail# Chercher un programme en particulier (ici blast)module search blast...
bioinfo/NCBI_Blast+/2.15.0+: loads the bioinfo/NCBI_Blast+/2.15.0+ environment
...
# Rendre un programme accessiblemodule load bioinfo/NCBI_Blast+/2.15.0+# blast est maintenant accessibleblastx -help# Rendre un autre programme accessiblemodule load bioinfo/DIAMOND/2.1.12# Afficher la liste des modules chargésmodule list# Décharger un modulemodule unload bioinfo/NCBI_Blast+/2.15.0+# Décharger tous les modulesmodule purge

La liste des logiciels installés est aussi disponible sur le site de la plateforme.

Lancer blastx

Afin d'aller de travailler vite nous allons extraire les 5 premières séquences du fichier contigs.fasta pour les mettre dans le fichier contigs.5.fasta à l'aide de la commande suivante:

# Les 159 premières lignes sont les 5 premières séquences du fichier head -n 159 contigs.fasta > contigs.5.fasta# Aide de blastblastx -helpUSAGE
blastx [-h] [-help] ...

DESCRIPTION
Translated Query-Protein Subject BLAST 2.15.0+

OPTIONAL ARGUMENTS
-h
Print USAGE and DESCRIPTION; ignore all other parameters
-help
Print USAGE, DESCRIPTION and ARGUMENTS; ignore all other parameters
-version
Print version number; ignore other arguments

*** Input query options
-query <File_In>
Input file name
Default = `-'
...

-db <String>
BLAST database name
* Incompatible with: subject, subject_loc
-out <File_Out, file name length < 256>
Output file name
Default = `-'
-evalue <Real>
Expectation value (E) threshold for saving hits. Default = 10
...
# Doit durer 5sblastx -query contigs.5.fasta -db ensembl_danio_rerio_pep \ -evalue 10e-10 -out contigs.5.blast

Read The Fine Manual (RTFM)

  • Lisez la doc du logiciel.
  • Pour les utiliser sur le cluster:
    • module help <module-name>
    • /usr/local/bioinfo/src/<soft_name>/How_to_use_SLURM
    • /usr/local/bioinfo/src/<soft_name>/example_on_cluster
    • la liste des logiciels

Mon premier batch

Voici un modèle de script pour un job.

blastx.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#SBATCH -J blastx                     # set job name (to replace)
#SBATCH --partition=workq             # partition to use
#SBATCH --cpus-per-task=1             # number of cpus
#SBATCH --mem=2G                      # quantity of RAM
#SBATCH --time=02:00:00               # maximum job duration
#SBATCH --output=slurm.%N.%j.out      # filename where stdout is written (to replace)
#SBATCH --error=slurm.%N.%j.err       # filename where stderr is written (to replace)
#SBATCH --mail-type=BEGIN,END,FAIL    # event notification
#SBATCH --mail-user=user@domain.tld   # user email (to replace)

module purge
module load bioinfo/NCBI_Blast+/2.15.0+

DB="/bank/blastdb/ensembl_danio_rerio_pep"
INPUT="contigs.fasta"
OUTPUT="$(basename "$INPUT" .fasta).blast"

blastx -db "$DB" -query "$INPUT" -out "$OUTPUT" \
    -evalue 10e-10 -num_threads $SLURM_CPUS_PER_TASK -outfmt 0

Options par défaut et limites

Extrait de la FAQ

  • partition workq (2h par default - 4h max)
  • 1 noeud
  • 1 coeur (= 1 cpu = 1 thread)
  • 2G de mémoire RAM par coeur (2G si 1 coeur)
  • 100KH de temps de calcul annuel (plus sur demande)
  • 10000 jobs simultanés tous utilisateurs confondus
  • 2500 jobs simultanés par utilisateur
  • 2500 taches simultanées par job array

On lance le job avec sbatch:

# Habituellement on ne met pas `--reservation=m1geno`sbatch --reservation=m1geno blastx.sh

Question

Testez les commandes suivantes pendant que le job tourne:

squeue -u <login>scancel <job-id>sacct -j <job-id>seff <job-id>

Changez le nombre de coeurs et relancez le job. Utilisez seff à la fin pour regarder ses stats

Mon premier job array

Ceci est une version abrégée du TP3 de la formation cluster

Découper les données

Nous allons découper notre job en 10 sous-jobs (appelés taches) afin de faire plusieurs alignements en parallèle. Nous devons découper le fichier fasta en plusieurs fichiers fasta à l'aide de fastasplit disponible dans le module Exonerate.

mkdir contigs_splitmodule load bioinfo/Exonerate/2.2.0fastasplit --fasta contigs.fasta --chunk 10 --output contigs_splitls contigs_split/contigs.fasta_chunk_0000000 contigs.fasta_chunk_0000005
...

Créer un template pour le job array

À partir de notre script sbatch nous créons un script pour le job array. La partie surlignée ci-dessous met en évidence le changement important entre le deux.

À l'avenir, lorsque vous verez SLURM_ARRAY_TASK_ID, pensez job array.

blastx_pe.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
#SBATCH -J blastx_pe                  # set job name (to replace)
#SBATCH --cpus-per-task=1             # number of cpus
#SBATCH --mem=2G                      # quantity of RAM
#SBATCH --time=02:00:00               # maximum job uration
#SBATCH --partition=workq             # partition to use
#SBATCH --output=blastx_pe.out        # filename where stdout is written (to replace)
#SBATCH --error=blastx_pe.err         # filename where stderr is written (to replace)
#SBATCH --mail-type=BEGIN,END,FAIL    # event notification
#SBATCH --mail-user=user@domain.tld   # user email (to replace)

DB="/bank/blastdb/ensembl_danio_rerio_pep"

# On créer un tableau bash contenant la liste des fichiers dans contigs_split
FILE_LIST=($(ls contigs_split/*))
# Chaque tache identifie son fichier dans le tableau, à la case SLURM_ARRAY_TASK_ID
INPUT=${FILE_LIST[$SLURM_ARRAY_TASK_ID]}

OUTPUT="blastx_split/$(basename "$INPUT").blast_pe"

module purge
module load bioinfo/NCBI_Blast+/2.15.0+

blastx -db "$DB" -query "$INPUT" -out "$OUTPUT" \
    -evalue 10e-10 -num_threads $SLURM_CPUS_PER_TASK -outfmt 0

Un job array se lance de la façon suivante:

# On crée le dossier de sortiemkdir blastx_split# On compte le nombre de sous-jobsls contigs_split/* | wc -l10
# On lance les taches de 0 à 9# Habituellement on ne met pas `--reservation=m1geno`sbatch --array 0-9 --reservation=m1geno blastx_pe.sh

Regrouper les données

Pour finir on regroupe toutes les alignements dans un seul fichier:

cat blastx_split/*.blast > contigs.blastx_pe

Ecoresponsabilité

Question

Lancez ce jobs sur 8 coeurs regardez ses stats avec seff quand il a fini. Que peut-on dire?

diamond.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#SBATCH -J diamond                    # set job name (to replace)
#SBATCH --cpus-per-task=1             # number of cpus
#SBATCH --mem=2G                      # quantity of RAM
#SBATCH --time=02:00:00               # maximum job uration
#SBATCH --partition=workq             # partition to use
#SBATCH --output=diamond.out          # filename where stdout is written (to replace)
#SBATCH --error=diamond.err           # filename where stderr is written (to replace)
#SBATCH --mail-type=BEGIN,END,FAIL    # event notification
#SBATCH --mail-user=user@domain.tld   # user email (to replace)

module purge
module load bioinfo/DIAMOND/2.1.12

DB="/bank/users_banks/banks_tp_cluster/ensembl_danio_rerio_pep.dmnd"
INPUT="contigs.fasta"
OUTPUT="$(basename "$INPUT" .fasta).diamond"

diamond blastx --db "$DB" --query "$INPUT" --out "$OUTPUT" \
    --evalue 10e-10 --threads $SLURM_CPUS_PER_TASK --outfmt 0