Bash
Version 4 (Andrey Golovin, 12.08.2014 10:32)
| 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 | 4 | Andrey Golovin | parallel -j6 prepack ::: $(seq 1 $n) |
| 97 | 4 | Andrey Golovin | |
| 98 | 4 | Andrey Golovin | parallel -j6 refine ::: $(seq 1 $n) |
| 99 | 4 | Andrey Golovin | |
| 100 | 1 | Andrey Golovin | </pre> |