2 votes

Quelle est la distinction entre les différents niveaux (règle, paramètres, configuration du cluster) de définition des threads, ressources et priorités dans Snakemake ?

Dans un Snakefile, les mots-clés thread, priorité, ressources peuvent être spécifiés dans une règle. Ils peuvent également être spécifiés en tant que sous-mots-clés dans le mot-clé params. Ils peuvent également être mis dans une commande shell comme paramètres ou options dans certains programmes d'application. De plus, ces paramètres peuvent également être spécifiés dans le cluster-config si un travail est soumis à un cluster. Je suis donc confus. Quelle est la meilleure pratique ? Où placer ces spécifications ? Si vous les mettez partout, lequel sera efficace dans le système. En d'autres termes, laquelle est la plus prioritaire ? Quel est l'ordre de priorité ? Je sais qu'il doit y avoir des raisons, j'essaie de les comprendre. Merci.

0voto

bli Points 2369

Je ne suis pas sûr de la configuration du cluster, mais en ce qui concerne l'utilisation générale de snakemake, les choses définies au niveau des règles n'ont pas le même usage que les choses que vous définiriez à l'intérieur d'une règle. params section.

Je dirais que la différence la plus importante est que snakemake " ignore " ce qui est défini comme faisant partie de la params pour décider quelles instances de règles doivent être exécutées, tandis qu'il utilise les éléments définis au niveau des règles pour décider quelles règles doivent ou peuvent être exécutées à un moment donné.

Vous pouvez définir ce que vous voulez dans un params et celle-ci est uniquement utilisée pour déterminer les actions de la règle (et c'est à vous de gérer cela dans la section run o shell section).

En revanche, il existe une liste fixe d'éléments que vous pouvez définir au niveau des règles, tels que threads , ressources y priority et snakemake "sait" comment les utiliser pour déterminer les règles à appliquer. Ces éléments peuvent ou non avoir un effet sur l'action de la règle, selon si et comment vous les utilisez.

La façon d'utiliser les choses au niveau des règles et params -Les choses définies diffèrent en ce que quelque chose défini dans params doit être utilisé comme attribut de la params (en utilisant la syntaxe point de Python). threads définis au niveau des règles peuvent être utilisés directement. Cela permet d'éviter les ambiguïtés. Par exemple :

rule foo:
    # [...]
    params:
        threads=8
    threads:
        4
    shell:
        """my_command -j {params.threads} -p {threads} -i {input} -o {output}"""

"Au niveau des règles" threads est utilisé pour éviter d'exécuter plus de règles qu'il ne le devrait (étant donné le nombre total de "threads" que vous attribuez à l'aide de l'option -j option). Notez que cela n'empêche pas réellement une action de règle d'utiliser plus de threads. Tout dépend de la façon dont vous utilisez (ou non) l'option threads et comment le programme que vous utilisez traite ce paramètre.

Au niveau des règles ressources servent un objectif similaire. Ils sont pris en compte par snakemake lorsqu'il décide des règles à exécuter, étant donné le montant total fourni à l'aide de l'outil de gestion de l'environnement. --resources option de ligne de commande. Je ne sais pas si vous pouvez les utiliser dans les actions de la règle, mais si c'est le cas, c'est probablement la même chose qu'avec threads L'effet réel dépendra du programme appelé et de la manière dont il est appelé.

De même, le niveau des règles priority sera utilisé par snakemake pour décider quelles règles doivent être exécutées, mais n'a aucun effet sur l'action de la règle (à moins qu'il n'y ait un objet correspondant disponible à l'intérieur de la balise run o shell et vous l'utilisez explicitement pour contrôler quelque chose dans le programme que vous appelez).

Pour résumer :

  • Les choses au niveau de la règle appartiennent à un ensemble restreint prédéfini par snakemake et sont utilisées automatiquement pour contrôler la flux d'exécution des règles .
  • params -Les choses définies peuvent avoir n'importe quel nom, et leur effet est limité à l'environnement de l'utilisateur. action en règle . L'effet dépend de la manière dont vous les utilisez dans la définition de l'action ( run o shell ).
  • Niveau des règles threads peut également être utilisé pour avoir un effet dans l'action de la règle. Des recherches supplémentaires sont nécessaires concernant une éventuelle utilisation au niveau de l'action de l'option priority o ressources .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X