Parallélisation snakemake drmaa

Bonjour,

Je teste un pipeline snakemake, dans lequel j'aimerai faire tourner des outils en multi-threading.
J'ai suivi les instructions décrites dans ce post : Parallélisation slurm avec snakemake

Je lance la commande snakemake :
snakemake --drmaa " --cpus-per-task={cluster.cpus-per-task}" --jobs 6 --use-conda -p -s rules/quantification.rules --configfile ./config/cluster.yaml

avec le fichier cluster.yaml :

__default__:
  cpus-per-task: 1

quantify:
  cpus-per-task: 12

et la rule pour laquelle j'essaye de faire tourner salmon en multi-threading :

rule quantify:
    input:
        forward = input_path + "/{sample}_R1.fastq.gz",
        rev = input_path + "/{sample}_R2.fastq.gz",
        index = directory("data/ref/transcriptome/index_salmon")
    output:
        quant_dir = directory(output_path + "/{sample}")
    conda:
        "salmon.yaml"
    shell:
        """
        salmon quant -i {input.index} -l A -1 {input.forward} -2 {input.rev} -o {output.quant_dir} -p 12 --seqBias
        """

J'obtiens l'erreur suivante :

WorkflowError in line 34 of /shared/ifbstor1/projects/meta_analysis_pd1/RNA_seq_pipeline/validation/rnaseq_pipeline_ose/rules/quantification.rules:
'Wildcards' object has no attribute 'cpus-per-task'

Auriez-vous une idée de ce qui bloque ici?
Merci d'avance !

EDIT :
Le problème venait du fait que j'utilisais un autre fichier de configuration dans mon fichier snakemake et qu'il y avait un conflit avec cluster.yaml.

J'ai finalement trouvé une solution en lancant la commande :
snakemake --drmaa " --cpus-per-task=12" --jobs 6 --use-conda -p -s rules/quantification.rules

et en rajoutant l'option suivante dans ma rules "quantify" :
threads: 12

Je me demande cependant si c'est une manière "correcte" de procéder, là je ne définis pas de cpu-per-task par défaut, est-ce que ça ne risque pas de réserver 12 thread pour toutes les rules sans distinction?

Guillaume

Bonjour,

Peut être regarder du côté des profiles (c'est ce que recommande snakemake). Pour slurm il y a le profil officiel mais également un profil simplifié.

Quentin

Bonjour,
dans ton exemple, il me semble qu'il faut utiliser --cluster-config et pas --configfile. Un exemple qui marche pour moi:

snakemake --cluster-config cluster.yaml --drmaa " --mem={cluster.mem} -J {cluster.name} -c {cluster.cpus}" --use-conda --conda-prefix ~/.snakemake/conda/ --cores 100 --jobs 50 --latency-wait 40 -s workflow/align_count_genome.rules

avec cluster.yaml comme tu l'as défini.

__default__:
  mem: 500
  name: snakejob
  cpus: 1

qualityControl:
  mem: 6000
  name: QC
  cpus: 2

Mais je suis d'accord avec Quentin, il faut qu'on passe aux profiles...

Bonne journée,

Magali