Partenaires et commanditaires
Nouvelles de Calcul Canada
2019-11-05
Nouvelles générales
Nouvelles générales
https://computecanada.github.io/visualizeThis/competition/2019/07/15/competition-details.html
Nouvelles de Béluga
Nouvelles de Cedar
Nouvelles de Graham
Maintenances à venir
https://status.computecanada.ca/view_incident?incident=303
Accélérer ses tâches avec GNU Parallel et les lots de tâches Slurm
2019-11-05
To people who live life in the parallel lane - Ole Tange
Qui suis-je?
Plan
Cas d’utilisation
Imaginons que nous avons plusieurs patrons ou séquences à chercher à l’intérieur d’un ou plusieurs fichiers.
Lots de tâches
Lots de tâches
Un ensemble de tâches où chacune possède un indice unique : $SLURM_ARRAY_TASK_ID.
sbatch --array=0-7
sbatch --array=1,3,5,7
sbatch --array=1-7:2
sbatch --array=1-100%10
Parallélisme de données
Décomposer l’ensemble de données en sous-ensembles :
Source : https://computing.llnl.gov/tutorials/parallel_comp/
divide et impera
# 1M patrons par fichiers data.XX
split -d -l 1000000 data.txt data.
pat1
pat2
pat3
...
Uniligne :
divide et impera
# 10 fasta seqXX.fa
faSplit sequence seqs.fa 10 seq
>seq1
GGCACGAGGCGTACTGTT
>seq2
TTCGGCACAGGNATACTTTTAGAAGA
AAAAAGATAAATTTAAACCTGAAA
FASTA Multi-lignes:
BLAST+ et lot de tâches
#SBATCH --time=00:02:00
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=512M
#SBATCH --array=0-9
module load gcc/7.3.0 blast+/2.7.1
blastn -db ref.fa -query seq0${SLURM_ARRAY_TASK_ID}.fa\�> seq0${SLURM_ARRAY_TASK_ID}.ref
Documentation : https://docs.computecanada.ca/wiki/BLAST#Task_array
GNU Parallel
Multi-coeurs
Multi-coeurs
GNU Parallel
Un outil permettant d’exécuter une ou plusieurs commandes avec leurs paramètres en parallèle.�
Exemples :
parallel echo ::: 1 2 3 4
parallel echo :::: params.txt
parallel < commandes.txt
parallel --jobs 4 echo ::: {1..12}
parallel --resume --joblog jobs.log < commandes.txt
Morcellement d’un fichier
Lecture de plusieurs blocs du fichier.
Par défaut : bloc de 1MB.
# Lent. Jusqu’à 500MB/s
cat database.fa | parallel --pipe --recstart '>' wc
# Rapide. Jusqu’à 5GB/s
parallel --pipepart --recstart '>' wc :::: database.fa
Taille du bloc
Il est important de définir une taille de bloc approprié. Par exemple, wc :
| # coeurs | Taille fichier | Taille bloc | Tâches GNU Parallel | # coeurs utilisés | Temps |
1 | 8 | 827MB | 1MB | 805 | 8 | 8.75s |
2 | 8 | 827MB | 10MB | 83 | 8 | 2.64s |
3 | 8 | 827MB | 100MB | 9 | 8 | 2.09s |
4 | 8 | 827MB | 827MB | 1 | 1 | 11s |
5 | 8 | 827MB | -1 | 8 | 8 | 1.81s |
parallel -k --block <b> --recstart '>' --pipepart wc :::: database.fa
BLAST+ multi-coeurs
#SBATCH --time=03:00:00
#SBATCH --cpus-per-task=12
#SBATCH --mem-per-cpu=512M
module load gcc/7.3.0 blast+/2.7.1
cmd='blastn -db database.fa -query - '
parallel -k --block -1 --recstart '>' --pipepart \
$cmd :::: queries.fa > queries.out
Documentation : https://docs.computecanada.ca/wiki/BLAST#GNU_Parallel
GNU Parallel
Multi-noeuds
Multi-noeuds multi-coeurs
Multi-noeuds
parallel --delay 0.2 -S noeud1,noeud2 < cmds.txt
parallel --delay 0.2 -S 2/noeud1,3/noeud2 < cmds.txt
parallel --delay 0.2 -j 2 -S 4/noeud1,4/noeud2 < cmds.txt
GNU Parallel utilise SSH afin d’exécuter 1 à N tâches sur les noeuds.
Liste des noeuds
# Liste de noeuds et leurs coeurs : coeurs/noeud,
slurm_hl2hl.py --format GNU-Parallel \
> ./liste_noeuds_${SLURM_JOB_ID}
Dans une tâche, il est possible d’obtenir la liste des noeuds alloués.
BLAST+ multi-noeuds-coeurs
#SBATCH --time=03:00:00
#SBATCH --ntasks=16
#SBATCH --mem-per-cpu=512M
module load gcc/7.3.0 blast+/2.7.1
cmd='blastn -db database.fa -query - '
noeuds=$(slurm_hl2hl.py --format GNU-Parallel)
parallel -S $noeuds -k --block -1 --recstart '>' \
--pipepart --workdir $PWD $cmd :::: queries.fa \
> queries.out
Hybride
GNU Parallel et lots de tâches
BLAST+ Hybride démo
#SBATCH --time=00:01:00
#SBATCH --cpus-per-task=2
#SBATCH --mem-per-cpu=2G
#SBATCH --array=0-9
parallel -k --recstart '>' --block -1 --pipepart \
wc :::: "data0${SLURM_ARRAY_TASK_ID}.fa"
module load kentutils
faSplit sequence database.fa 10 data
Merci!
Questions?
Références - BLAST+
Références - GNU Parallel
Extra
Simulation de N paramètres
parallel sim ::: {1..5} ::: {1..80} ::: {1..10} ::: {1..3}
parallel sim -a {1} -b {2} -z {3} ::: {1..5} ::: z f q ::: {1..10}
Simulation de N paramètres
# SBATCH --nodes=2
# SBATCH --ntasks-per-node=10
# SBATCH --mem-per-cpu=2G
module load glost
srun glost_launch commandes.txt
Documentation : https://docs.computecanada.ca/wiki/GLOST