Erreur allocation ressources nextflow

Bonjour,

Je suis en train d'essayer d'utiliser nextflow sur le cluster pour faire de la quantification RNAseq.
Pour l'instant je fait un test avec un seul process avec salmon.

Cela fonctionne avec quelques échantillons, mais dès que j'augmente le nombre d'échantillons une erreur apparaît :

Error executing process > 'quantification (80)'

Caused by:
  Process `quantification (80)` terminated with an error exit status (1)

Command executed:

  salmon quant --threads 1 --geneMap gencode.v34.annotation.gtf --libType=U --validateMappings --gcBias --seqBias -i index -1 GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627_1.fastq.gz -2 GO29293_ngs_rna_targrna_rnaaccess_SAM943dexecutor >  slurm (80)
[2d/d7c1c8] process > quantification (79) [100%] 1 of 1, failed: 1
Error executing process > 'quantification (80)'

Caused by:
  Process `quantification (80)` terminated with an error exit status (1)

Command executed:

  salmon quant --threads 1 --geneMap gencode.v34.annotation.gtf --libType=U --validateMappings --gcBias --seqBias -i index -1 GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627_1.fastq.gz -2 GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627_2.fastq.gz -o GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627

Command exit status:
  1

Command output:
  (empty)

Command error:
  WARNING: Skipping mount /usr/local/var/singularity/mnt/session/etc/resolv.conf [files]: /etc/resolv.conf doesn't exist in container
  Version Info Exception: server did not respond before timeout
  ### salmon (selective-alignment-based) v1.4.0
  ### [ program ] => salmon
  ### [ command ] => quant
  ### [ threads ] => { 1 }
  ### [ geneMap ] => { gencode.v34.annotation.gtf }
  ### [ libType ] => { U }
  ### [ validateMappings ] => { }
  ### [ gcBias ] => { }
  ### [ seqBias ] => { }
  ### [ index ] => { index }
  ### [ mates1 ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627_1.fastq.gz }
  ### [ mates2 ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627_2.fastq.gz }
  ### [ output ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM943df5cf15df_20150627 }
  ERROR: Could not find transcript <=> gene map file "gencode.v34.annotation.gtf"
  Exiting now: please either omit the 'geneMap' option or provide a valid file

Malgré le message d'erreur je ne crois pas que le problème vienne de salmon, car j'ai testé de faire la commande directement sans passer par nextflow et ça fonctionne bien.
Je pense que ça peut peut-être venir d'un soucis avec l'allocation des ressources pour les jobs, car j'obtiens la même erreur si j'augmente le nombre de cpu et la ram par process, sans augmenter le nombre d'échantillons.

Voici le fichier nextflow :

params.reads = "$baseDir/data/Mariathasan/GO29293*_{1,2}.fastq.gz"
params.transcript = "$baseDir/reference_genome/gencode.v34.transcripts.fa"
params.gtf_genemap = "$baseDir/reference_genome/gencode.v34.annotation.gtf"
params.outdir = "results"
params.index = "$baseDir/reference_genome/index"

    Channel
        .fromFilePairs( params.reads, checkIfExists:true )
        .into { read_pairs_ch; read_pairs2_ch }

    process quantification {

        cpus 1
        memory '2 GB'
        publishDir params.outdir, mode:'copy'

        input:
        tuple val(pair_id), path(reads) from read_pairs_ch
        path gtf from params.gtf_genemap
        path index from params.index

        output:
        path(pair_id) into quant_ch

        script:
        """
        salmon quant --threads 8 --geneMap $gtf --libType=U --validateMappings --gcBias --seqBias -i $index -1 ${reads[0]} -2 ${reads[1]} -o $pair_id
        """
    }

Ainsi que le nextflow.config :

process.executor = 'slurm'
process.queue = 'fast'

process {
    withName:quantification{
        container = '/shared/ifbstor1/projects/meta_analysis_pd1/nextflow/nextflow-tutorial_2/nextflow-tutorial/singularity/salmon_1.4.0--hf69c8f4_0'
    }
}
singularity {
    enabled = true
}

Auriez-vous une idée d'où le soucis pourrait venir?

Merci d'avance pour votre aide,

Guillaume

Bonjour Guillaume,

Je n'y connaît pas grand chose à nextflow mais j'ai deux petites remarques/questions:

  • L'erreur (Could not find transcript <=> gene map file "gencode.v34.annotation.gtf") semble indiquer une erreur avec le fichier "gencode.v34.annotation.gtf". Etes-vous êtes sûr du fichier / nom / chemin ? Entre le répertoire courant, le job et NextFlow, les chemins peuvent bouger.

  • Dans le fichier nextflow cpus 1 ne corresponds pas à l'option de la commande --threads 8. Pour simplifier, j'aime bien considérer 1 CPU = 1 Process = 1 Thread, donc pour moi, 8 threads --> 8 CPU.

Je laisse la parole aux experts NextFlow...

1 « J'aime »

Bonjour,
Merci le retour!

Concernant le fichier d'annotation j'ai bien vérifié le chemin, cela ne pose pas de soucis quand je lance le pipeline avec peu d'échantillons.

Pour les thread j'ai du copier le log d'un run ou j'avais testé avec cpus=8 (je corrige ça dans le post).

Peut-être que la @team.workflow aura une idée ?

Yes ! En général c'est une erreur de montage des reportoires dans l'image singularity.

Est ce que l'on peut voir ta ligne nextflow ? Tu utilises quoi comme profil ?

Je pense que dans ton nextflow.config il faut ajouter

singularity {
  enabled = true
  autoMount = true
  runOptions = '-B /pointDeMontage -B /save -B /home'
}

L'important est cette ligne runOptions et là je t'ai mis des exemples de point de montage, je ne sais pas comment ils sont fait sur le cluster de l'IFB. @dbenaben je te laisse compléter.

@ Ifb team: Dès que vous aurez les bonnes options, je pense vraiment qu'il faudra déposer la config de IFB core là GitHub - nf-core/configs: Config files used to define parameters specific to compute environments at different Institutions pour eviter ces pbs.

1 « J'aime »

Côté IFB Core cluster, les dossiers suivants sont automatiquement montés dans l'image singularity (configuration: /usr/local/etc/singularity/singularity.conf):

  • /shared
  • /shared/projects
  • /shared/home
  • /shared/bank
  • /shared/software

En effet, je crois qu'il faut qu'on relance la discussion pour déposer la config propre à l'IFB sur le dépôt nf-core. Je mets un mot sur notre Slack en ce sens.

Le pb que j'avais constaté c'est que les montages n'étaient pas forcement fait quand on passe par nextflow.
Donc conf a tester:

singularity {
  enabled = true
  autoMount = true
  runOptions = '-B /shared -B /shared/projects -B /shared/home -B /shared/bank -B /shared/software'
}

Merci pour le retour !

J'ai testé avec les nouvelles options dans le nextflow.config mais malheureusement ça donne toujours la même erreur. Ca lance bien 100 jobs, qui doit être la limite par défaut, puis ils s'arrêtent au bout d'une minute environ, quand je vais voir dans les répertoires work/XX/XXXXXXXXXX... il n'y a ni log de slurm ni log de salmon, du coup difficile de dire ce qui se passe précisément.

Je lance nextflow sans paramètre particulier :

./nextflow script_PD1_noQC.nf

Mon "profil" nextflow il s'agit du nextflow.config?

Pour info j'utilise une image singularity de salmon que j'ai téléchargé sur le depot galaxy.

Autant pour moi pour le "profil" effectivement c'est la config (tu n'es pas avec un workflow nf-core donc pas de profil particulier)

En re-regardant ton erreur :

je suppose que le passage a grande echelle pose un pb de temps de réponse des noeuds d'I/O (je ne suis pas admin sys mais ca ressemble à ca)

je testerai donc d'augmenter ce temps cf doc: Configuration — Nextflow 23.10.0 documentation

executor.exitReadTimeout='600s'

Est ce que le fichier de sortie alors que le job est en erreur a été créé? Si oui ca valide cette hypothèse.

Merci pour le conseil, effectivement il pourrait bien s'agir d'un pb d'I/O!

J'ai essayé avec ce nouveau paramètre et j'ai toujours la même erreur. Il y a bien un fichier d'erreur ".command.err" dans les repertoire de travail, avec

WARNING: Skipping mount /usr/local/var/singularity/mnt/session/etc/resolv.conf [files]: /etc/resolv.conf doesn't exist in container
Version Info Exception: server did not respond before timeout
### salmon (selective-alignment-based) v1.4.0
### [ program ] => salmon
### [ command ] => quant
### [ threads ] => { 1 }
### [ geneMap ] => { gencode.v34.annotation.gtf }
### [ libType ] => { U }
### [ validateMappings ] => { }
### [ gcBias ] => { }
### [ seqBias ] => { }
### [ index ] => { transcriptome_index_gencodev34 }
### [ mates1 ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM7a9093b9c7e9_20150627_1.fastq.gz }
### [ mates2 ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM7a9093b9c7e9_20150627_2.fastq.gz }
### [ output ] => { GO29293_ngs_rna_targrna_rnaaccess_SAM7a9093b9c7e9_20150627 }
ERROR: Could not find transcript <=> gene map file "gencode.v34.annotation.gtf"

J'ai aussi essayé le paramètre executor.submitRateLimit = '1/1s'
pour ne lancer qu'un job par seconde, mais ça ne règle pas le problème.

Si je resume l'erreur concerne le fichier d'entrée. Quand le pipeline est lancé avec quelques jobs en parallele ca passe si bcp d'echantillon ca ne passe plus, alors que le fichier d'entrée est toujours là.
@GuillaumeRS
dans le cas ou ca ne passe pas , est ce que tu as quelques jobs qui sont ok ?
est ce que tu retrouves le warning suivant dans les process qui se passent bien ?

 WARNING: Skipping mount /usr/local/var/singularity/mnt/session/etc/resolv.conf [files]: /etc/resolv.conf doesn't exist in container
  Version Info Exception: server did not respond before timeout

@dbenaben
y'a -t-il des limites en lecture concurentielle sur les fichiers ?
y'aurait-t-il des limites sur les montages fait en parallèle dans les images singularity ?

y'a -t-il des limites en lecture concurrentielle sur les fichiers ?

Pas à ma connaissance. Les limites sont "physiques" (taux max de lecture) mais même dans ce cas, cela devrait juste ralentir la lecture (ie. il ne devrait pas y avoir d'erreur).

y'aurait-t-il des limites sur les montages fait en parallèle dans les images singularity ?

Je ne sais pas (même si cela m'étonnerait).

serait-il possible d'avoir accès a vos données ?
je n'ai pas pu reproduire l'erreur avec 3 echantillons.

Les warnings suivants sont présents même quand ca se passe bien:

WARNING: Skipping mount /usr/local/var/singularity/mnt/session/etc/resolv
.conf [files]: /etc/resolv.conf doesn't exist in container
Version Info Exception: server did not respond before timeout

Quand il y a l'erreur il n'y a aucun job qui finit la quantif, sur le dernier run que j'ai tenté sur mes 348 échantillons il y avait 347 job "ABORTED" et 1 "FAILED".

J'ai testé sans l'option --geneMap $gtf pour voir si c'est juste l'accès au gtf qui est bloquant, mais ça donne quand même une erreur.

Quand je fais sur un seul échantillon il y aussi le warning concernant le montage de l'image singularity dans le log mais ça fonctionne bien.

Pour voir si ça venait de l'image singularity j'ai testé d'utiliser une version de salmon installée sur le cluster (module load salmon/1.3.0) mais ça donne aussi l'erreur quand je lance tout les échantillons.

Quand je lance l'image singularity de salmon ça donne l'avertissement suivant :

singularity run singularity/salmon_1.4.0--hf69c8f4_0
WARNING: Skipping mount /usr/local/var/singularity/mnt/session/etc/resolv.conf [files]: /etc/resolv.conf doesn't exist in container
/bin/sh: /usr/bin/ps: not found

J'ai donné les droits d'accès sur le répertoire ou je travaille pour la quantification. Je voudrais vous envoyer le path en DM mais je n'y arrive pas sur ce forum (il y marqué que le profil public de l'utilisateur est caché quand je vais sur votre profil et il n'y a pas l'option de message direct)

Merci!

@GuillaumeRS Je viens d'envoyer un message privé pour en discuter (avec cnoirot en copie).

Je n'ai pas acces aux données, veuillez confirmer a david l'autorisation pour que j'y ai accès.

Sinon effectivement comme l'a indiqué david dans son 1er message, il faut mettre 8 sur la ligne cpu puisque dans la ligne de commande il y a --threads 8
Et si vos fichiers sont gros je dirais memory '8 GB' aussi

process quantification {

        cpus 8
        memory '8 GB'
        publishDir params.outdir, mode:'copy'
...
1 « J'aime »

Finalement j'ai réussi à faire fonctionner le pipeline.
Effectivement il y avait un réglage à faire sur les ressource allouées au process quantification.
J'ai mis 4 cpus et 12Gb de ram et là ça fonctionne bien :slight_smile:
Merci beaucoup pour vos conseils!

1 « J'aime »