Есть ли способ установить параметры для виртуальной машины Java при использовании оболочки Snakemake? - PullRequest
0 голосов
/ 17 января 2019

При использовании таких инструментов, как picard или fgbio через оболочки snakemake, я продолжаю сталкиваться с проблемами нехватки памяти. На данный момент я прибегаю к прямым shell вызовам, которые позволяют мне устанавливать память виртуальных машин. Я бы предпочел передать эти параметры обернутым инструментам. Есть ли способ, может быть, через директиву resources, передать что-то вроде mem_mb=10000? Я пытался, но пока не получил его на работу.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Согласно источникам обёртки (https://bitbucket.org/snakemake/snakemake-wrappers/src/bd3178f4b82b1856370bb48c8bdbb1932ace6a19/bio/picard/markduplicates/wrapper.py?at=master&fileviewer=file-view-default), используется cmdline:

from snakemake.shell import shell


shell("picard MarkDuplicates {snakemake.params} INPUT={snakemake.input} "
      "OUTPUT={snakemake.output.bam} METRICS_FILE={snakemake.output.metrics} "
      "&> {snakemake.log}")

Таким образом, вы можете передать любые опции, используя params: "smth" section.

Если вы проверите picard исключительные источники сценариев:

 cat `which picard`

Вы найдете:

...
pass_args=""
for arg in "$@"; do
    case $arg in
        '-D'*)
            jvm_prop_opts="$jvm_prop_opts $arg"
            ;;
        '-XX'*)
            jvm_prop_opts="$jvm_prop_opts $arg"
            ;;
         '-Xm'*)
            jvm_mem_opts="$jvm_mem_opts $arg"
            ;;
         *)
            if [[ ${pass_args} == '' ]] #needed to avoid preceeding space on first arg e.g. ' MarkDuplicates'
            then 
                pass_args="$arg" 
            else
                pass_args="$pass_args \"$arg\"" #quotes later arguments to avoid problem with ()s in MarkDuplicates regex arg
            fi
            ;;
    esac
done
...

Итак, я предполагаю, что это должно работать:

rule markdups:
    input:
        "in.bam",
    output:
        bam = "out.bam",
        metrics = "metrics.tmp",
    params:
        "-Xmx10000m"
    wrapper:
        "0.31.0/bio/picard/markduplicates"
0 голосов
/ 17 января 2019

Я никогда не использовал директиву обертки, но искал, например, markduplicates / wrapper.py команда оболочки picard MarkDuplicates {snakemake.params} .... Так, может быть, использование слота params работает?

rule markdups:
    input:
        'in.bam',
    output:
        bam= 'out.bam',
        metrics= 'metrics.tmp',
    params:
        mem= "-Xmx4g",
    wrapper:
        "0.31.0/bio/picard/markduplicates"

Пикард должен понимать, что -Xmx... - это параметр Java.

...