Каково различие между различными уровнями (правило, параметры, конфигурация кластера) потоков, ресурсов и определения приоритетов в Snakemake? - PullRequest
2 голосов
/ 13 мая 2019

В Snakefile, поток ключевых слов, приоритет, ресурсы могут быть указаны в правиле.Они также могут быть указаны как под-ключевые слова в ключевом слове paramsОни также могут быть помещены в командную строку как параметры или опции в некоторых прикладных программах.Кроме того, эти параметры также могут быть указаны в cluster-config, если задание передается в кластер.Так что я смущен этим.Какова лучшая практика?где поставить эти спецификации?Если вы поместите их везде, какой из них будет эффективным в системе.Другими словами, какой из них имеет более высокий приоритет?какой порядок приоритетов?Я знаю, что должно быть несколько причин, я пытаюсь понять их.Спасибо.

1 Ответ

0 голосов
/ 14 мая 2019

Я не уверен насчет конфигурации кластера, но в отношении общего использования змеиного мата вещи, определенные на уровне правил, не имеют такого же использования, как вещи, которые вы определили бы в разделе params.

Я бы сказал, что самым важным отличием является то, что змеиный мейк "игнорирует" то, что определено как часть раздела params, при решении, какие экземпляры правил следует запускать, в то время как он использует вещи, определенные на уровне правил, чтобы решить, какие правила следует или может быть запущен в данный момент.

Вы можете определить все, что вы хотите в разделе params, и это используется только для определения действий правила (и вы можете управлять этим в разделе run или shell).

В отличие от этого, существует фиксированный список вещей, которые вы можете определить на уровне правил, например threads, ressources и priority, и snakemake «знает», как их использовать, чтобы определить, какие правила должны быть запущены. Эти вещи могут влиять или не влиять на действие правила, в зависимости от того, как и как вы их используете.

Способ использования вещей на уровне правил и вещей, определенных на params, отличается тем, что что-то, определенное в params, должно использоваться как атрибут объекта params (с использованием точечного синтаксиса Python). threads, определенный на уровне правила, может использоваться напрямую. Это позволяет избежать неясностей. Например:

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

«Уровень правила» threads используется, чтобы не запускать больше правил, чем следует (учитывая общее количество «потоков», которые вы назначаете с помощью опции -j). Обратите внимание, что это не мешает действию правила использовать больше потоков. Все зависит от того, как вы используете (или нет) переменную threads, и как программа, с которой вы работаете, работает с этим параметром.

Уровень правила ressources служит аналогичной цели. Snakemake учитывает их при принятии решения о том, какие правила запускать, учитывая общую сумму, предоставленную с помощью параметра командной строки --resources. Я не знаю, можете ли вы использовать их в действиях правила, но если это так, то, скорее всего, то же самое, что и с threads: фактический эффект будет зависеть от вызываемой программы и от того, как она вызывается. .

Аналогично, уровень правил priority будет использоваться snakemake, который решит, какие правила следует запускать, но не влияет на действие правила (если в разделе run или shell не имеется соответствующего объекта). и вы используете это явно для управления чем-либо в вызываемой вами программе).

Подведем итог:

  • Вещи уровня правил принадлежат ограниченному набору, предопределенному snakemake, и автоматически используются для управления потоком выполнения правил .
  • params -определенные вещи могут иметь любое имя, и их действие ограничено действием правила . Эффект зависит от того, как вы используете их в определении действия (run или shell).
  • Уровень правила threads также может использоваться для воздействия на действие правила. Необходимы дальнейшие исследования в отношении возможного использования на уровне действий priority или ressources.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...