Как я могу запустить несколько запусков конвейера с разными конфигурационными файлами - проблема с блокировкой в ​​каталоге .snakemake - PullRequest
1 голос
/ 08 января 2020

Я запускаю конвейер snakemake из одной и той же рабочей директории, но с разными конфигурационными файлами, а ввод / вывод также находится в разных директориях. Кажется, проблема в том, что, хотя оба прогона используют данные в разных папках, snakemake создает блокировку папки конвейера из-за папки .snakemake и папки блокировки внутри. Есть ли способ заставить отдельные папки .snakemake? Пример кода ниже:

Оба прогона выполняются из / home / pipelines / qc_pipeline:

прогон 1:

/home/apps/miniconda3/bin/snakemake -p -k -j 999 --latency-wait 10 --restart-times 3 --use-singularity --singularity-args "-B /pipelines_test/QC_pipeline/PE_trimming/,/clusterTMP/testingQC/,/home/www/codebase/references" --configfile /clusterTMP/testingQC/config.yaml --cluster-config QC_slurm_roadsheet.json --cluster "sbatch --job-name {cluster.name} --mem-per-cpu {cluster.mem-per-cpu} -t {cluster.time} --output {cluster.output}"   

прогон 2:

/home/apps/miniconda3/bin/snakemake -p -k -j 999 --latency-wait 10 --restart-times 3 --use-singularity --singularity-args "-B /pipelines_test/QC_pipeline/SE_trimming/,/clusterTMP/testingQC2/,/home/www/codebase/references" --configfile /clusterTMP/testingQC2/config.yaml --cluster-config QC_slurm_roadsheet.json --cluster "sbatch --job-name {cluster.name} --mem-per-cpu {cluster.mem-per-cpu} -t {cluster.time} --output {cluster.output}"   

ошибка:

Directory cannot be locked. Please make sure that no other Snakemake process is trying to create the same files in the following directory:
/home/pipelines/qc_pipeline
If you are sure that no other instances of snakemake are running on this directory, the remaining lock was likely caused by a kill signal or a power loss. It can be removed with the --unlock argument.

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Maarten-vd-Sande правильно указывает на параметр --nolock (+1), но, на мой взгляд, это очень плохая идея - регулярно использовать --nolock.

Как говорится в сообщении об ошибке, два процесса snakemake пытаются создать один и тот же файл. Если бы ошибка не была ошибкой в ​​snakemake, я бы не стал слепо продолжать и перезаписывать файлы.

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

topdir=`pwd`

mkdir -p run1 
cd run1
snakemake --configfile /path/to/config1.yaml ... 
cd $topdir

mkdir -p run2
cd run2 
snakemake --configfile /path/to/config2.yaml ...
cd $topdir

mkdir -p run3
etc... 

РЕДАКТИРОВАТЬ

На самом деле, он должен быть менее громоздким и, вероятно, лучше использовать параметр --directory/-d:

snakemake -d run1 --configfile /path/to/config1.yaml ...
snakemake -d run2 --configfile /path/to/config2.yaml ...
...
1 голос
/ 08 января 2020

Пока разные конвейеры не генерируют одинаковые выходные файлы, вы можете сделать это с опцией --nolock:

snakemake --nolock [rest of the command]

Посмотрите здесь для короткого до c о nolock.

...