Bash
Version 6 (Andrey Golovin, 12.08.2014 10:36)
1 | 1 | Andrey Golovin | h1. Использование GNU parallel |
---|---|---|---|
2 | 1 | Andrey Golovin | |
3 | 1 | Andrey Golovin | Итак, есть задача по запуску счёта для некоторого количества задач. |
4 | 1 | Andrey Golovin | Чаще всего используется скрипт с циклом: |
5 | 1 | Andrey Golovin | <pre> |
6 | 1 | Andrey Golovin | for i in $(seq 0 6);do |
7 | 1 | Andrey Golovin | # mkdir model_${i} |
8 | 1 | Andrey Golovin | ## remove OXT and H1-H2, rename H3 to H in original autodock pdb |
9 | 1 | Andrey Golovin | echo "save model_${i}/pep.pdb, all, $i" |
10 | 1 | Andrey Golovin | cat flex_short.pdb model_${i}/pep.pdb > model_${i}/compl.pdb |
11 | 1 | Andrey Golovin | cd model_${i} |
12 | 1 | Andrey Golovin | FlexPepDocking.linuxgccrelease -s compl.pdb -flexpep_prepack -ex1 -ex2aro \ |
13 | 1 | Andrey Golovin | -peptide_chain A -receptor_chain H >& log.prepack |
14 | 1 | Andrey Golovin | FlexPepDocking.linuxgccrelease -s compl_0001.pdb -receptor_chain H -peptide_chain A \ |
15 | 1 | Andrey Golovin | -out:file:silent decoys.silent -out:file:silent_struct_type binary \ |
16 | 1 | Andrey Golovin | -pep_refine -ex1 -ex2aro -use_input_sc -nstruct 300 >& log.run & |
17 | 1 | Andrey Golovin | cd .. |
18 | 1 | Andrey Golovin | done |
19 | 1 | Andrey Golovin | </pre> |
20 | 1 | Andrey Golovin | |
21 | 1 | Andrey Golovin | Часто, в ходе работы надо коментировать некторые строки, так как эти задачи уже выполнены. Так же не плохо бы было реализовать эффективное использование всех вычмслительных ядер компьютера. |
22 | 1 | Andrey Golovin | |
23 | 1 | Andrey Golovin | Давайте я предложу несколько примеров как эти шаги можно эффективно реализовать с GNU parallel: |
24 | 1 | Andrey Golovin | |
25 | 1 | Andrey Golovin | |
26 | 1 | Andrey Golovin | h5. Сделать N директорий: |
27 | 2 | Andrey Golovin | |
28 | 1 | Andrey Golovin | <pre> |
29 | 1 | Andrey Golovin | parallel --gnu mkdir model_{1} ::: {1..6} |
30 | 1 | Andrey Golovin | or |
31 | 1 | Andrey Golovin | export n=6 |
32 | 1 | Andrey Golovin | parallel --gnu mkdir model_{1} ::: $(seq 1 $n) |
33 | 2 | Andrey Golovin | </pre> |
34 | 2 | Andrey Golovin | |
35 | 2 | Andrey Golovin | h5. Генерация скрипта для Pymol |
36 | 2 | Andrey Golovin | |
37 | 2 | Andrey Golovin | <pre> |
38 | 2 | Andrey Golovin | parallel --gnu echo "save model_{1}/pep.pdb, all, {1}" ::: $(seq 1 $n) > run.pml |
39 | 2 | Andrey Golovin | </pre> |
40 | 2 | Andrey Golovin | |
41 | 2 | Andrey Golovin | h5. Склеить файлы: |
42 | 2 | Andrey Golovin | |
43 | 2 | Andrey Golovin | <pre> |
44 | 2 | Andrey Golovin | parallel --gnu cat flex_short.pdb model_${1}/pep.pdb > model_${1}/compl.pdb ::: $(seq 1 $n) |
45 | 2 | Andrey Golovin | </pre> |
46 | 2 | Andrey Golovin | |
47 | 2 | Andrey Golovin | h5. Запуск задач по prepacking на восьми ядрах: |
48 | 2 | Andrey Golovin | |
49 | 2 | Andrey Golovin | <pre> |
50 | 2 | Andrey Golovin | parallel --gnu -j8 "cd model_{1} ; FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack" ::: $(seq 1 $n) |
51 | 2 | Andrey Golovin | </pre> |
52 | 2 | Andrey Golovin | |
53 | 2 | Andrey Golovin | h5. Можно подавать функции bash на исполнение: |
54 | 2 | Andrey Golovin | |
55 | 2 | Andrey Golovin | <pre> |
56 | 4 | Andrey Golovin | |
57 | 2 | Andrey Golovin | export SHELL=$(type -p bash) |
58 | 2 | Andrey Golovin | |
59 | 2 | Andrey Golovin | prepack() { |
60 | 2 | Andrey Golovin | cd model_${1} |
61 | 2 | Andrey Golovin | FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack |
62 | 2 | Andrey Golovin | } |
63 | 2 | Andrey Golovin | |
64 | 2 | Andrey Golovin | n=9 |
65 | 2 | Andrey Golovin | |
66 | 3 | Andrey Golovin | export -f prepack |
67 | 1 | Andrey Golovin | |
68 | 4 | Andrey Golovin | parallel -j6 prepack ::: $(seq 1 $n) |
69 | 4 | Andrey Golovin | </pre> |
70 | 4 | Andrey Golovin | |
71 | 4 | Andrey Golovin | Итак весь скрипт можно представить как набор однострочных команд исполняюшихся паралельно: |
72 | 4 | Andrey Golovin | |
73 | 4 | Andrey Golovin | <pre> |
74 | 4 | Andrey Golovin | #!/bin/bash |
75 | 4 | Andrey Golovin | export SHELL=$(type -p bash) |
76 | 4 | Andrey Golovin | |
77 | 4 | Andrey Golovin | prepack() { |
78 | 4 | Andrey Golovin | cd model_${1} |
79 | 4 | Andrey Golovin | FlexPepDocking.linuxgccrelease @../flags.prepack -overwrite >& log.prepack |
80 | 4 | Andrey Golovin | } |
81 | 4 | Andrey Golovin | refine() { |
82 | 4 | Andrey Golovin | cd model_${1} |
83 | 4 | Andrey Golovin | FlexPepDocking.linuxgccrelease @../flags.refine -overwrite >& log.refine |
84 | 4 | Andrey Golovin | } |
85 | 4 | Andrey Golovin | |
86 | 4 | Andrey Golovin | export -f prepack refine |
87 | 4 | Andrey Golovin | |
88 | 4 | Andrey Golovin | n=9 |
89 | 4 | Andrey Golovin | |
90 | 4 | Andrey Golovin | parallel --gnu mkdir model_{1} ::: $(seq 1 $n) |
91 | 4 | Andrey Golovin | |
92 | 4 | Andrey Golovin | parallel --gnu echo "save model_{1}/pep.pdb, all, {1}" ::: $(seq 1 $n) > run.pml |
93 | 4 | Andrey Golovin | |
94 | 4 | Andrey Golovin | parallel --gnu cat flex_short.pdb model_{1}/pep.pdb > model_{1}/compl.pdb ::: $(seq 1 $n) |
95 | 4 | Andrey Golovin | |
96 | 6 | Andrey Golovin | parallel --gnu -j6 prepack ::: $(seq 1 $n) |
97 | 4 | Andrey Golovin | |
98 | 6 | Andrey Golovin | parallel --gnu -j6 refine ::: $(seq 1 $n) |
99 | 4 | Andrey Golovin | |
100 | 1 | Andrey Golovin | </pre> |