遺伝研スパコン
ログイン
ユーザーアカウントを発行したら、 ssh 接続の設定をする。
~/.ssh/config
Host ddbj
IdentityFile ~/.ssh/id_ed25519
Hostname gw.ddbj.nig.ac.jp
RequestTTY yes User usename
ジョブ実行
- https://sc.ddbj.nig.ac.jp/guides/software/JobScheduler/Slurm/
- https://slurm.schedmd.com/documentation.html
インタラクティブジョブ
暫定的に a001
, a002
, a003
の3つのインタラクティブノードが用意されている。 ゲートウェイノードへ ssh
ログイン後、インタラクティブノードのいずれかに ssh
ログインする:
[youraccount@local ~]$ ssh username@gw.ddbj.nig.ac.jp
[youraccount@gw ~]$ ssh a001
[youraccount@a001 ~]$
後日変わると思うので、公式サイトをチェック。
srun
コマンドを用いてインタラクティブジョブ用の計算ノードを要求する:
srun --pty bash
AGE でいう qlogin
のイメージ。
バッチジョブ
sbatch
コマンドを使う。 基本的な流れは AGE と同じで、ジョブスクリプトを書いて qbatch example.sh
するだけ:
example.sh
#!/bin/bash
#SBATCH -t 0-00:10:00
#SBATCH --mem-per-cpu 4G
#SBATCH -J an_example
pwd
ジョブ実行時のオプション設定は #SBATCH
で渡す。 sbatch
のコマンドライン引数で渡してもいい。 AGE でいう #$ -cwd
(カレントディレクトリの設定) と #$ -V
(環境変数の引継ぎ) は、Slurm ではデフォルトらしい。
インタープリタの指定オプションはない (?) ので、shebang で指定する必要がある: #!/bin/bash
, #!/bin/csh
, #!/use/bin/python
使いそうなオプション:
-b
,--bigin
- ジョブの実行割り当て開始時間を指定するする。
-D
,--chdir
- バッチジョブのワーキングディレクトリを指定。 (デフォルトはカレントディレクトリ。)
-c
,--cpus-per-tasks
- 複数のタスクがあるときに、タスクあたりに必要な CPU の数を指定する。
-o
,--output
-
標準出力の出力先をファイル名で指定する。 デフォルトでは
slurm-[JOBID]_[JOBインデックス].out
に吐き出される。 -e
,--error
-
標準エラーの出力先をファイル名で指定する。 デフォルトでは標準出力と同じファイルで、なにも指定しなければ
slurm-[JOBID]_[JOBインデックス].out
に吐き出される。 -i
,--input
- バッチジョブの標準入力。
--export
- ジョブに渡す環境変数を制御する。
-J
,--job-name
- ジョブの名前。デフォルトではスクリプトのファイル名になる。
--mem
- ノードごとに必要なメモリの指定。単位は K, M, G, T を使う。(デフォルトは M)
--mem-per-cpu
- CPU あたりに必要なメモリ量の指定。
-
バッチジョブで使うのは1ノード1コアなので、
--mem
でも同じ。 -t
,--time
- ジョブの実行時間を指定する。 デフォルトの単位は “minutes” で、他に “minutes:seconds”, “hours:minutes:seconds”, “days-hours”, “days-hours:minutes”, “days-hours:minutes:seconds” の形式で指定できる。
アレイジョブ
-a
で制御する。 SLURM_ARRAY_TASK_ID
, SLURM_ARRAY_TASK_COUNT
などの変数を参照可能。
例えば6個の SRA データを同時に取得する場合:
#!/bin/bash
#SBATCH -a 1-6
seq_ids=(SRR030253 SRR030254 SRR030255 SRR030256 SRR030257 SRR030258)
seq_id=${seq_ids[$SLURM_ARRAY_TASK_ID-1]}
prefetch ${seq_id}
一度に投入されるタスク数の上限は %
で制御する。 (AGE でいう -tc
):
#SBATCH -a 1-1000%100 # 1から1000までの並列。同時に走る上限は100。
パラレルジョブ
https://slurm.schedmd.com/mc_support.html
Slurm には AGE でいうパラレルジョブに直接該当する機能はない。 --nodes
, --ntasks
, --ntasks-per-node
などを使って並列ジョブを制御する。
-N
,--nodes
- ジョブに割り当てるノードの数を指定する。[最小-最大] の範囲指定も可。
--spread-job
- ジョブの割り当てをできるだけ多くのノードに均等に分散させる。
-n
,--ntasks
- ジョブに割り当てる CPU コアの数を指定する。
# 例
#!/bin/bash
#SBATCH --nodes 1-1
#SBATCH --ntasks 5
#SBATCH --mem-per-cpu 4G
orthofinder -f ExampleData -a 5
この時ノード全体では、4G
×5core
=20G
のメモリを使う。
その他のコマンド
squeue
-
ジョブの状況を確認 (i.e.
qstat
) scancel [JOBID]
-
実行中のジョブをキャンセルする (i.e.
qdel
) scontrol
- ジョブの設定変更
Apptainer (Singularity)
- https://sc.ddbj.nig.ac.jp/guides/software/Container/Apptainer/
- https://sc.ddbj.nig.ac.jp/guides/software/Container/BioContainers/
バイオインフォマティクスでよく使われる解析ツールは各ソフトウェアの頭文字ごとに /usr/local/biotools/
に配置されており、インストール不要で使うことができる。
複数のバージョン用意されている場合もある。 たとえば:
ls /usr/local/biotools/s/samtools*
使用例:
apptainer exec /usr/local/biotools/s/samtools
Grid Engine と Slurm の対応
コマンド
- qsub -> sbatch
- qstat -> squeue
- qdel -> scancel
オプション
AGE: -> Slurm:
#!/bin/bash | #!/bin/bash
#$ -S /bin/bash | # Shebang でよい?
#$ -cwd | # デフォルトでカレントディレクトリ
#$ -V | # デフォルトで環境変数をすべて引き継ぐ
#$ -l short | #SBATCH -p <partition>
#$ -l d_rt=00:10:00 | #SBATCH -t 0-00:10:00
#$ -l s_rt=00:10:00 |
#$ -l s_vmem=4G | #SBATCH --mem-per-cpu 4G
#$ -l mem_req=4G |