Есть ли способ установить параметры для виртуальной машины Java при использовании оболочки Snakemake?
При использовании таких инструментов, как picard
или же fgbio
через обертки змеиного производства я продолжаю сталкиваться с проблемами нехватки памяти. На данный момент я прибегаю к прямой shell
звонки, которые позволяют мне установить память виртуальных машин. Я бы предпочел передать эти параметры обернутым инструментам. Есть ли способ, может быть, через resources
директива, передавая что-то вроде mem_mb=10000
? Я пытался, но пока не получил его на работу.
2 ответа
Согласно источникам-обёрткам ( https://bitbucket.org/snakemake/snakemake-wrappers/src/bd3178f4b82b1856370bb48c8bdbb1932ace6a19/bio/picard/markduplicates/wrapper.py?at=master&fileviewer=file-view-default itfile-view)
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"
раздел.
Если вы проверите 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"
Я никогда не использовал директиву обертки, но, глядя на пример в http://picar d/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