Mise en pratique des méthodes d'analyse de l'expression génique grâce aux données utilisées par le package airway: création des index nécessaires aux outils d'alignement
Introduction
- Ici, on va avoir notre première application de l'utilisation de SLURM
La construction des index demande à la base un ensemble de fichiers contenant les informations décrivant notre génome d'intérêt. Il y a plusieurs sources potentiels de tels fichiers mais un bon point de départ lorsqu'on travaille avec H. sapiens est le site du projet Gencode. Gencode est un effort international de construction des annotations provenant de diverses sources publiques en y mettant une couche de curation humaine et pas simplement construit programmatiquement. Comme ce processus d'annotation est en mutation constante, Gencode crée les fichiers sous la forme de versions (releases) qui sont publiés sur une base semi-régulière.
- Deuxième application de SLURM sur grappe de calcul: construire les index. Nous allons utiliser trois approches d'alignement: via HISAT2, via STAR et via Salmon. Dans tous les cas, créer les index pour chaque outil profite de l'usage d'une grappe de calcul: la création est accélérée par une exécution multi-fils (multi-threaded) et dans tous les cas, demande une très grande quantité de mémoire pour s'exécuter. Comme il faut créer les index à chaque nouvelle version de Gencode (ou de tout autre fichier d'annotation), mettre ce processus dans un script facile à éditer facilite le travail.
Procédure
Téléchargement des fichiers d'annotation
- Pour commencer, il faut aller chercher les fichiers d'annotation sur le site du projet Gencode. En partant de notre espace personnel (
$HOME), on se dirige là où l'on désire mettre les index pour la suite:
# On assume que l'on se dirige vers /shares/data pour créer # les répertoires nécessaires # Ajuster en fonction de votre environnement, évidemment! % mkdir /shares/data/indexes % mkdir /shares/data/annotations % cd /shares/data/annotations % mkdir gencode # Dernière version en date % mkdir gencode/r49 % cd gencode/r49 # Fichier avec les annotations complètes en format GTF % curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.annotation.gtf.gz # Fichier avec les annotations complètes en format GFF3 % curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.annotation.gff3.gz # Fichier FASTA des transcrits pour protéines, utilisé par Salmon % curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/gencode.v49.pc_transcripts.fa.gz # Fichier FASTA du genome humain, GRCh38 % curl -L -O https://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_49/GRCh38.primary_assembly.genome.fa.gz # Decompression des fichiers % for i in `ls | grep gz`; do gunzip $i; done
- Si une nouvelle version (disons r50) est publiée, simplement créez un répertoire sous
/shares/data/annotations/gencodeet téléchargez les nouvelles versions.
Création des index : usage de scripts pour SLURM
Créer les index pour les outils d'alignement est un processus exigeant et le premier exemple où l'utilisation d'une grappe de calcul et d'un système de gestion des tâches qui y réside est un atout. Dans le cas de la création des index, on est confronté à quelques problèmes:
- C'est un processus qui prend du temps… Les outils sont capables d'opérations multi-fils pour accélérer la tâche alors plus on a de coeurs de calcul, plus ça se fera rapidement.
- C'est un processus qui construit des structures de données qui habitent en premier en mémoire vive et ça demande beaucoup, beaucoup de mémoire vive.
Si on prend pour exemple la grappe de calcul Rorqual, on y trouve des serveurs qui ont tout ce que nous aurons de besoin, il faut simplement leur dire commente faire. En passant, faire cette construction sur une grappe SuperClafoutis n'est pas une option: certaines opérations d'indexation demandent des centaine de Gb de mémoire vive Cependant, une fois les index construits, on peut les télécharger pour utilisation locale car ces fichiers sont indépendants de la plateforme où ils ont été calculés.
Comme ce sont des tâches qui demandent du temps (plusieurs minutes à plusieurs heures), c'est le moment idéal pour apprendre à utiliser SLURM. À la base, SLURM est un système où un usager soumet des actions (interactives ou scriptées) via une application (srun ou sbatch) à une queue de traitement qui gèrera la suite des choses. Une fois la tâche assignée à un noeud de calcul, elle s'exécute indépendamment de votre attention (dans le cas de sbatch).
Création des index pour HISAT2
- HISAT2 construit une série de fichiers qui constituera l'index servant à chercher le meilleur alignement pour chaque séquence sur un génome de référence. Il profite des informations sur la position des exons et des sites d'épissage contenus dans un fichier d'annotations en format GTF et, dans le cas de H. sapiens, il peut aussi utiliser un fichier contenant les infos des variations génétiques, soit en format VCF ou bien en provenance de UCSC avec son format particulier. Si ces fichiers sont disponibles (et ils le sont dans les archives publiques), on utilise des scripts écrit en Python pour créer des fichiers intermédiaires qui seront utiliser par l'utilitaire
hisat2-buildpour construire les fichiers nécessaires.
- Pour commencer, on passe par les scripts Python pour la création des fichiers intermédaires:
# On crée l'arborescence nécessaire sous /shares/data % cd /shares/data/indexes % mkdir hisat2_indexes % mkdir hisat2_indexes/r49 % mkdir hisat2_indexes/r49/interim_files # Ici, on assume que HISAT2 est sur le $PATH; les scripts devraient se trouver # au même niveau que l'application. % cd hisat2_indexes/r49/interim_files # Il faut rediriger la sortie vers un fichier sinon ça sort sur STDOUT... % hisat2_extract_extract_exons.py /shares/data/annotations/gencode/r49/gencode.v49.annotation.gtf > ./gencode_r49_ss.txt % hisat2_extract_extract_splice_sites.py /shares/data/annotations/gencode/r49/gencode.v49.annotation.gtf > ./gencode_r49_ss.txt # Etape facultative: extraction des infos pour les variations génétiques # Dernière version disponible % curl -L -O http://hgdownload.soe.ucsc.edu/goldenPath/hg38/database/snp151Common.txt.gz % gunzip snp151Common.txt.gz # Ici, le script est un peu plus exigeant... Ça prend plus de temps que les étapes précédentes. % hisat2_extract_snps_haplotypes_UCSC.py /shares/data/annotations/gencode/r49/GRCh38.primary_assembly.genome.fa ./snp151Common.txt gencode_r49_snp_haplo
- Ok, pour la suite, ça nous prend un serveur bien doté en mémoire vive et SLURM pour lancer cette tâche. Il nous faut écrire un script
bashqui sera donner en entrée à l'applicationsbatchpour soumettre à l'ordonnanceur de tâches de SLURM. On doit écrire dans l'entête du script des instructions qui seront lues par l'ordonnanceur et qui permettront d'utiliser les bonnes ressources pour l'exécution. Le script qui suit est simplement un exemple capable de rouler surrorqual; une autre grappe nécessitera fort probablement des instructions différentes. - À l'aide de
nano, écrire le texte suivant:
Plus à venir...
- Plus à venir…
Création des index pour STAR
- Plus à venir…
Création des index pour Salmon
- Plus à venir…