**文書の過去の版を表示しています。**
グリッドエンジンの使い方
解析の場所はホーム(~/)以下に適当にフォルダを作って、その中で行う。
もし解析結果が1TB以上になりそうであれば、適当に空き容量の大きなサーバをdf -h
コマンドで探して、例えばm768bだったとするなら、/suikou/files/m768b/<<ユーザ名>>/work
に移動して適当なフォルダを作ってその中で解析する。
例えば、
echo a
というコマンドをグリッドエンジンで投げる場合、
qsub -pe def_slot 4 -l mem_req=4G -j Y -N myjob /suikou/tool/yoshitake/qsubsh4 "echo a"
という風に入力するとグリッドエンジンで処理される。 上の例では、4CPU、メモリは4GBx4CPU=16GBだけ確保するという意味。 必要なCPU数、メモリ量を、まずは小さい入力ファイルでテスト実行し、見当をつけておくこと。確保するメモリ量を必要以上に多く取ってしまうと、同時実行可能なジョブ数が減ってしまう。逆に必要以上に確保するメモリを小さくすると、サーバの実メモリが足りなくなり、サーバがハングアップしてしまう。必ずメモリは必要量以上は指定すること!
必要メモリの目安:
- マッピング・・・合計10GB
- アセンブル・・・合計300GB
- HISATのインデックス作成・・・合計100GB
実行結果は、上の例なら、例えば「myjob.o504971」などに出力される。このときファイル名末尾の「504971」がジョブID。
現在自分の投げたジョブの状態を見るにはqstat
を使う。そのほか、qdel, qacctなどのコマンドも良く使う。
よく使うグリッドエンジン操作コマンド例:
#ジョブ一覧表示 qsubで投げたジョブが実行前(qw)、実行中(r)の時は表示され、完了すると表示から消える。 qstat #ジョブ詳細表示 ジョブがqw, rなどの状態の時に使用可能。リストから消えたジョブは表示できない。 qstat -j 504971 #完了したジョブの詳細表示 qacct -j 504971 #ジョブの削除 間違って投げたジョブを消すとき。ステータスがqw, rなどqstatに出るジョブを消す。 qdel 504971 #自分のジョブを全部消したいとき qdel `qstat|tail -n+3|awk '{print $1}'`
普通グリッドエンジンを使いたくなる時は、FASTQが沢山あって、ファイルごとにバラバラにマッピングしたいときなどで、例えば次のように使うことになる。
for i in *.fastq.gz; do qsub -pe def_slot 4 -l mem_req=4G /suikou/tool/yoshitake/qsubsh4 "bwa mem -t 4 ref.fasta $i|samtools sort -@ 4 -o $i.bam -" done
workフォルダの中で並列実行したい場合 (こちらでも可能だけど、qsubを直接扱うのを推奨)
ジョブを並列実行させたい人も居ると思うので、簡単に研究室のサーバ全体に分散処理して計算させるスクリプトを用意しました。 (一つのコマンドを分割処理するわけではなく、bwaやblastなど、サンプルごとに同じような処理を何度も行うときに使用します。) 分散処理の行い方は簡単で、例えば blastn -db database -query sample1.fasta -num_thread 4 > output.blast といったコマンドをサーバ上で複数実行したいとします。 1つのコマンドにつき4 CPU, メモリ16 GB程度のリソースを使って実行する場合、下記のようにコマンドを「" (ダブルクオーテーション)」で囲んでrunGE-4cpu-16gbの引数に渡してください。 runGE-4cpu-16gb "blastn -db database -query sample1.fasta -num_thread 4 > output.blast" こうすると、runGE-4cpu-16gbのスクリプトの中で、グリッドエンジンに適切なパラメータを指定して分散処理を実行するようになっています。 ターミナルに出力される文章などは、上記の例であれば、blastn__db_database_.o5878といったファイルに出力されるようになります。 もっと多くのリソースを使う場合は、 4CPUで64GBの場合は、runGE-4cpu-64gb 8CPUで32GBの場合は、runGE-8cpu-32gb 8CPUで128GBの場合は、runGE-8cpu-128gb といったコマンドを使ってください。 特にハードリミットは設けていないので、もし仮に指定した以上のメモリを使ってもジョブを強制終了したりしませんが、メモリを使い果たすとサーバが止まってしまうので、なるべく適切な量を指定してください。(かと言って、リソースを多めに予約してしまうと、分散処理の効率が下がってしまうので、多めに指定したほうが良いというわけではありません。) 自分の実行したジョブがどのサーバで実行されているかなどは、 qstat というコマンドで確認してください。
グリッドエンジン用のスクリプトとして、1コアでメモリ4GBまでのジョブ用のスクリプトを用意しました。 使い方は同様に runGE-1cpu-4gb "echo a > log.txt" といった感じです。 グリッドエンジン使用時によく使うコマンドとして、下記のコマンドがあります。 ・qstat ジョブの状態を確認します。 ・qdel ジョブを削除するときに使用します。qstatでjob-IDを確認して、例えばjob-IDが5803だった場合、 qdel 5803 などと入力します。 ・qhost サーバのCPU数、メモリ数、負荷状況を表示します。qhost -j と入力すると、サーバ上で実行しているジョブも併せて表示してくれます。