Пример Snakemake + docker, как использовать тома

Давайте создадим простой змеиный файл вроде

rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    shell:
        "somecommand {input} {output}"

Я хочу обобщить правило сюжета, чтобы его можно было запускать внутри контейнера докеров, что-то вроде

rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    singularity:
        "docker://joseespinosa/docker-r-ggplot2"
    shell:
        "somecommand {input} {output}"

Если я хорошо понял, когда я запускаю snakemake --use-singularity, я получаю, что somecommand запускается внутри контейнера докеров, где входные файлы csv не могут быть найдены без некоторой конфигурации тома контейнера.

Не могли бы вы предоставить небольшой рабочий пример, описывающий, как можно настроить тома в Snakefile или других файлах Snakemake?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
6
0
2 938
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы запускаете snakemake и говорите ему использовать изображения сингулярности, вы делаете следующее:

snakemake --use-singularity

Вы также можете передать сингулярности дополнительные аргументы, включая точки привязки, например:

snakemake --use-singularity --singularity-args "-B /path/outside/container/:/path/inside/container/"

Теперь, если ваш CSV-файл находится в /path/outside/container/, он может быть просмотрен какой-либо командой без проблем.

Имейте в виду, что если ваши внутренние и внешние пути не идентичны, вам нужно будет использовать оба пути в своем правиле создания змейки в разных разделах. Вот как я это сделал:

rule targets:
    input:
        "plots/dataset1.pdf",
        "plots/dataset2.pdf"

rule plot:
    input:
        "raw/{dataset}.csv"
    output:
        "plots/{dataset}.pdf"
    params:
        i = "inside/container/input/{dataset}.csv",
        o = "inside/container/output/{dataset}.pdf"
    singularity:
        "docker://joseespinosa/docker-r-ggplot2"
    shell:
        "somecommand {params.i} {params.o}"

Когда вы запускаете этот файл-змею, привяжите raw/ к inside/container/input/ и привяжите plots/ к inside/container/output/. Snakemake будет искать файлы ввода / вывода на вашем локальном компьютере, но даст контейнеру команду для запуска с внутренними путями, и все будет замечательно.

TL; DR: локальные пути на входе и выходе, пути к контейнерам в параметрах и оболочке. Свяжите локальные пути и пути контейнера при вызове командной строки.

Я получаю «snakemake: error: unrecognized arguments:» при использовании аргумента -B или -b. Разве формат не должен быть таким? snakemake --use-singularity --singularity-args "-B <path_to_shared_directory>"

Jan-Michael Tressler 17.09.2019 00:59

Ой, вы совершенно правы. Я изменю свой ответ выше!

Bari Ballew 18.09.2019 15:48

Другие вопросы по теме