遺伝研スパコン

https://sc.ddbj.nig.ac.jp/

ログイン

ユーザーアカウントを発行したら、 ssh 接続の設定をする。

~/.ssh/config
Host ddbj
  IdentityFile ~/.ssh/id_ed25519
  Hostname gw.ddbj.nig.ac.jp
  RequestTTY yes
  User usename

ジョブ実行

インタラクティブジョブ

暫定的に 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)

バイオインフォマティクスでよく使われる解析ツールは各ソフトウェアの頭文字ごとに /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        |