Domanda:
combinando l'uso di workdir e dell'opzione --jobscript in snakemake
Eric C.
2017-07-18 20:34:50 UTC
view on stackexchange narkive permalink

Sembra che in snakemake lo script specificato dopo --jobscript non possa essere utilizzato correttamente se una workdir: è specificata nel file snake. Il percorso dello script specificato diventa relativo alla directory di lavoro definita nel file snake invece di essere relativo alla directory di lavoro corrente. Non so se questa sia una funzionalità o un bug !!

Tuttavia, diventa piuttosto doloroso risolvere questo problema. L'unico modo che ho trovato è stato analizzare la riga di comando nel file snake, ad esempio: snakemake -c "qsub" -j 30 --js ./sge.sh --latency-wait 30 -rp per copiare ./sge.sh nella directory di output definita dalla parola chiave workdir nel file snake.

Come effetto collaterale, se specifica l'opzione per qsub sulla riga di comando, ad esempio: snakemake -c "qsub -e ./logs/ -o ./logs/" -j 30 --js ./sge.sh --latency-wait 30 -rp la cartella logs deve essere creata nella directory workdir.

C'è qualcosa che non capisco con --jobscript opzione? Non lo sto usando nel modo giusto? Vado contro la migliore pratica?

Due risposte:
Devon Ryan
2017-07-18 23:17:26 UTC
view on stackexchange narkive permalink

Per citare la documentazione di snakemake

Tutti i percorsi nel file di serpente vengono interpretati in relazione alla directory in cui viene eseguito snakemake. Questo comportamento può essere sovrascritto specificando un workdir nel file snake:

workdir: "path / to / workdir"

Di solito si preferisce impostare solo la directory di lavoro tramite la riga di comando , perché la direttiva di cui sopra limita la portabilità dei flussi di lavoro di Snakemake.

Non è esplicitamente dichiarato, ma è in qualche modo implicito che tutti i percorsi relativi diventino quindi relativi alla directory di lavoro. Mi aspetto che la specifica di un percorso assoluto possa aggirare questo problema.

Per inciso, nella mia mente l'impostazione della directory di lavoro è solitamente necessaria solo su cluster senza un file system condiviso (presumibilmente condiviso tra i nodi di lavoro, ma non con il nodo head), poiché lì non puoi cd $ WORKDIR prima di eseguire snakemake. Questo viene normalmente fatto con il tuo scheduler, in questi casi.

grazie per la tua risposta. Avevo visto questa dichiarazione nel doc. Capisco che tutti i percorsi nel file snake siano interpretati in relazione alla workdir (molto pratico tra l'altro) ma ritengo che sia ancora un comportamento strano che un'opzione della riga di comando sia interpretata allo stesso modo. Inoltre, l'impostazione di una directory di lavoro semplifica molto la scrittura degli input e degli output (non è necessario anteporre a tutti i file la directory di output desiderata)
@EricC. Sono d'accordo in questo caso, avrei anche preferito che la directory di lavoro non si applicasse ai percorsi specificati sulla riga di comando.
sì, forse Johannes Köster un giorno cambierà questo comportamento, tranne se per qualche motivo non capisco, ha altri inconvenienti.
Kamil S Jaron
2017-11-10 19:40:24 UTC
view on stackexchange narkive permalink

È solo una supposizione, ma penso che potresti voler utilizzare il flag --keep-target-files per non modificare i percorsi dei target. Dal manuale di snakemake:

–keep-target-files

Non modificare i percorsi di determinati file di destinazione relativo alla directory di lavoro.

Predefinito: False

Quindi, se ho capito bene la risposta di Devon, la combinazione di questo flag e l'impostazione di workdir potrebbe forzare la destinazione di calcolo in una directory diversa in cui viene eseguito snakemake.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...