Snakemake: как реализовать механизм для копирования файлов ввода / вывода в / из папки tmp и применения там правил - PullRequest
1 голос
/ 19 марта 2020

Мы используем Slurm менеджер рабочей нагрузки для отправки работ в наш высокопроизводительный кластер . Во время выполнения задания нам необходимо скопировать входные файлы из сетевой файловой системы в локальную файловую систему узла, выполнить там анализ и затем скопировать выходные файлы обратно в каталог проекта в сетевой файловой системе.

Пока система управления рабочим процессом Snakemake интегрируется со Slurm (путем определения профилей) и позволяет запускать каждое правило / шаг в рабочем процессе как задание Slurm, я не нашел простого способа указать для каждого правила, является ли Следует использовать папку tmp (со всеми указанными выше последствиями или нет.

Я очень рад за простые решения, как реализовать это поведение.

1 Ответ

1 голос
/ 20 марта 2020

Я не совсем уверен, правильно ли я понимаю. Я предполагаю, что вы не хотите копировать ввод каждого правила в определенную директорию, выполните правило, а затем скопируйте вывод обратно в другую файловую систему, так как это приведет к перемещению большого количества ненужных файлов. Поэтому в первой половине ответа я предполагаю, что перед выполнением вы перемещаете свои файлы в /scratch/mydir.

Я полагаю, что вы могли бы использовать команду --directory (https://snakemake.readthedocs.io/en/stable/executing/cli.html). Однако я считаю, что это плохо работает, так как с тех пор змеиному мастеру трудно находить config.yaml и samples.tsv.

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

rule example:
    input:
        config["cwd"] + "{sample}.txt"
    output:
        config["cwd"] + "processed/{sample}.txt"
    shell:
        """
        touch {output}
        """

Итак, все, что вам нужно сделать, это изменить cwd в вашем config.yaml.

local:

cwd: ./

slurm:

cwd: /scratch/mydir

Затем вам придется вручную скопировать их обратно в вашу долговременную файловую систему или создать правило, которое сделает это за вас.

Теперь, если вы все же хотите скопировать свои файлы из файловой системы A - > B, сделай свое правило, а затем перемести результат из B -> A, тогда я думаю, что ты хочешь использовать правила теней . Я думаю, что документы правильно объясняют, как использовать это, поэтому я просто даю ссылку:).

...