как snakemake может передавать данные между файловой системой nas и узлами кластера - PullRequest
0 голосов
/ 12 февраля 2020

Мы разрабатываем конвейер snake, и нам нужно передавать данные между файловой системой nas и узлами нашего кластера. наш кластер имеет архитектуру с каталогом / scratch в каждом узле. Нам нужно скопировать данные из nas в node / scratch перед запуском правила. Вот пример типичного скриптового скрипта, который мы используем:

#!/bin/bash
############      SLURM CONFIGURATION      ###################
#SBATCH --partition=supermem
#SBATCH --job-name=Spades
#SBATCH --output=Spades-out
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem-per-cpu=20G
#SBATCH --time=100:00:00
############################################################

path_to_dir="/data3/illumina-decontamination";
path_to_tmp="/scratch/user$SLURM_JOB_ID"; 
path_to_dest="/data3/projects/Spades";

module load bioinfo/SPAdes/3.11.1

###### create repertory on scratch
mkdir $path_to_tmp;

####### copy data from nas to /scratch node
scp -r nas3:$path_to_dir $path_to_tmp
echo "tranfert donnees master -> noeud"
cd $path_to_tmp/DATA/

###### Runnning
mkdir $path_to_tmp/DATA/SpadeAssembly
spades.py .... #command line

# transfer
scp -r $path_to_tmp/illumina-decontamination/Spade_*  nas3:$path_to_dest/;
echo "Transfert donnees node -> nas3";

#### remove tmp node
rm -r $path_to_tmp;
echo "Suppression des donnees sur le noeud";

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

1005 * Спасибо.

Jul ie

1 Ответ

0 голосов
/ 12 февраля 2020

Если это только одно правило, вы можете перевести ваш скрипт в директиву оболочки.

Если вам нужно сделать это для каждого правила, возможно, вы можете получить префикс оболочки для работать, но кажется, что поддержка переменных правила по-прежнему WIP .

Я бы, вероятно, сделал бы сценарий bash для выполнения операций копирования и записи, которые принимают назначения ввода и вывода , Для каждого правила вы бы

shell:
   '''
   my_copy.sh {input} {config[temp]}/rule/path/{wildcards.sample}
   # do work
   my_write_back.sh {config[temp]}/rule/results/{wildcards.sample} {output}
   '''

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

Извините, это не прямой ответ, надеюсь, он стимулирует некоторые идеи.

...