遺伝研スパコン
ログイン
ユーザーアカウントを発行したら、 ssh 接続の設定をする。
~/.ssh/config
Host ddbj
IdentityFile ~/.ssh/id_ed25519
Hostname gw.ddbj.nig.ac.jp
RequestTTY yes User yukimatsu
ssh
接続後はゲートウェイノードにいる。 ここで作業をしてはいけない。 qlogin
してログインノードへ移動:
ssh ddbj
qlogin
-l s_vmem
, -l mem_req
でログインノードのメモリ量を指定できる。 デフォルトは 4GB で、96GB まで指定可能。
qlogin -l s_vmem=16G -l mem_req=16G # 16GB でログイン
インタラクティブジョブ
https://sc.ddbj.nig.ac.jp/software/grid_engine/interactive_jobs
手元のターミナルと同じように、Linux コマンドやスクリプトの実行が可能:
$ pwd
/home/yukimatsu
$ python3
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(1+2)
3
バッチジョブ
https://sc.ddbj.nig.ac.jp/software/grid_engine/batch_jobs
簡単なジョブであればインタラクティブジョブでよいが、 時間のかかるジョブやリソースを食うジョブ、繰り返し行うジョブを実行する場合は ジョブスクリプトを書いて計算ノードにやらせる。
ジョブスクリプトはシェルスクリプトまたは Python スクリプトで書くことができる。
sample.sh
#!/bin/bash
#$ -S /bin/bash
#$ -cwd
#$ -V
#$ -l short
#$ -l d_rt=00:10:00
#$ -l s_rt=00:10:00
#$ -l s_vmem=4G
#$ -l mem_req=4G
echo "HOME: " ${HOME}
echo "USER: " ${USER}
sample.py
#!/usr/bin/python3
#$ -S /usr/bin/python3
#$ -V
#$ -l d_rt=00:10:00
#$ -l s_rt=00:10:00
import os
print("HOME: ", os.environ["HOME"])
print("USER: ", os.environ["USER"])
qsub
コマンドでジョブスクリプトを計算ノードに投げる:
qsub sample.sh
qsub sample.py -cwd -l short -l s_vmem=4G -l mem_req=4G
オプションはジョブスクリプト内で #$
に続けて渡してもいいし、 qsub
するときのコマンドライン引数として渡してもいい。
-cwd
-
バッチジョブをカレントディレクトリ上で実行する。デフォルトは
$HOME
-V
-
qsub
を実行した際の環境変数を全て計算ノードに引き継ぐ。 -l short
-
計算ノードのキューの指定。
epyc
,intel
,gpu
,short
,medium
がある。 (Grid Engineキューの種類) -l d_rt=00:10:00
,s_rt=00:10:00
-
ジョブの実行上限時間。デフォルトは
72:00:00
(=3日間) -l s_vmem=4G
,-l mem_req=4G
-
使用するメモリ量の指定。単位は
G
,M
,K
。 -N example
- ジョブ名の指定。指定しなければはジョブスクリプトのファイル名になる。
-S /bin/bash
- インタープリタの指定
-o
,-e
- 標準出力/標準エラーファイルの出力先
-
デフォルトではカレントディレクトリに
{ジョブ名}.o{ジョブID}
,{ジョブ名}.e{ジョブID}
で出力される。
パラレルジョブ
https://sc.ddbj.nig.ac.jp/software/grid_engine/parallel_jobs/
CPU コアを複数同時に使用するジョブ。 例えば OrthoFinder であれば -a N
で N スレッドの並列解析を指定する。 これを遺伝研上で投げるときは、下のようにする:
# 例
#$ -S /bin/bash
#$ -pe def_slot 5
#$ -cwd
orthofinder -f ExampleData -a 5
スレッド数の指定にはいくつか方法がある:
-pe def_slot N
- 同一計算ノード上に N 個の CPU コアを確保する。
-pe mpi N
- 複数の計算ノードにわたって、 なるべく多数のノードに散るように N 個の CPU コアを確保する。
-pe mpi-fillup N
- 複数の計算ノードにわたって、 なるべく少数のノードに N 個の CPU コアを確保する。
-l s_vmem=4G
, -l mem_req=4G
でメモリ量を指定する場合、×スレッド数 だけメモリを要求する。例えば qsub -pe def_slot 16 -l s_vmem=4G -l mem_req=4G
であれば 4×16=64G を使うことになる。
アレイジョブ
https://sc.ddbj.nig.ac.jp/software/grid_engine/array_jobs
多数のジョブを同時に、あるいは順次に実行していくジョブ。
例えば6個の SRA データを同時に取得する場合:
#$ -S /bin/bash
#$ -t 1-6:1
#$ -tc 3
#$ -cwd
seq_ids=(SRR030253 SRR030254 SRR030255 SRR030256 SRR030257 SRR030258)
seq_id=${seq_ids[$SGE_TASK_ID-1]}
prefetch ${seq_id}
-t 1-N
- N個のタスクを持つアレイジョブとして投入する。
- 計算機が空いていれば同時に実行される。そうでなくても空き次第順次導入される。
-tc M
- 一度に実行されるアレイジョブのタスク数の上限を指定。 これをやらないとユーザーに割り振られた計算機数をオーバーしてしまうことがある。
-
qquota
でリソースを確認できる。2023/11/30時点で300。
ファイルの中身を seq_ids
に流し込む
10,000遺伝子の並列など、seq_ids
が長くなるとジョブスクリプトの可読性が落ちる。 先に seq_ids
の中身をテキストファイルに書き出して それをジョブスクリプトに読み込む場合、以下のようにする:
array10000.sh
#$ /bin/bash
#$ -t 1-10000:1
#$ -cwd
seq_ids=()
while read -r x; do
seq_ids+=($x)
done < $1
seq_id=${seq_ids[$SGE_TASK_ID-1]}
echo ${seq_id}
genes.txt
Gene_1
Gene_2
Gene_3
⋮ Gene_10000
genes.txt
を引数にして qsub
:
qsub array10000.sh genes.txt
cat genes.txt | while read -r x
で直接読もうとすると想定した挙動をしない。
その他のコマンド
qstat
- ジョブの投入状況の確認
-
r
: 実行中,qw
: 投入待機中,t
: 計算ノードへ転送中,E
: エラー,d
: 削除中 qstat -g c
- 計算・ログイン含む全ノードの混雑状況をみる。
qdel jobID
- ジョブの削除
Apptainer (Singularity)
https://sc.ddbj.nig.ac.jp/software/Apptainer
バイオインフォマティクスでよく使われる解析ツールは各ソフトウェアの頭文字ごとに /usr/local/biotools/
に配置されており、 インストール不要で使うことができる。
複数のバージョン用意されている場合もある。 どんなツールが使えるか見てみる。たとえば BLAST:
ls /usr/local/biotools/b/blast*
使用例:
apptainer exec /usr/local/biotools/b/blast:2.6.0--boost1.60_0 blastp -help
# singularity exec /usr/local/biotools/b/blast:2.6.0--boost1.60_0 blastp -help
パッケージ管理
guix
2023/11/30 の OS アップデートと同時にドキュメントがアーカイブされた。 もうすぐ使われなくなるかもしれない。
ユーザー権限で利用できるパッケージマネージャで、最初から使えるようになっている。
- GNU Guix Reference Manual (公式マニュアル)
- 遺伝研での使い方ページ (アーカイブ)
前準備:
~/.bashrc
に以下を追記:
export GUIX_DAEMON_SOCKET=guix://at111
export GUIX_PROFILE="$HOME/.guix-profile"
source "$GUIX_PROFILE/etc/profile"
guix search
,guix package --search
-
利用可能なパッケージの検索。標準出力だと見切れるので
less
に渡す。 -
(例)
guix search paml | less
guix install
,guix package --install
- パッケージのインストール
-
上記のように設定した場合のデフォルトのインストールパスは
$HOME/.guix-profile/bin/
になる。 guix pull
-
guix
本体を最新版に更新する。 guix update
,guix package --update
- インストールしたパッケージを最新版に更新する。 正規表現でパッケージを指定可。
guic remove
,guix package --remove
- パッケージのアンインストール
バイオインフォマティクス関連のパッケージ: