使用リソースの検討#

使用リソースの検討#

大規模、大量ジョブ投入時は事前に必ずテストを実施してください。

  • CPUやメモリが枯渇し、ノードがハングアップすることがあります。

  • 大量に出力されるエラーにより、ディスクが枯渇することがあります。

  • 他のユーザがジョブを実行できなくなることがあります。

テストから大量ジョブ実行までは、(1) intrを用いたテスト実行、 (2) mjobsを用いたテスト実行、 (3) 本番実行 の順で行います。

(1) intrを用いたテスト実行#

intrパーティションを使用し、対話型で処理を確認します。

1. slurmlogin コマンドで intr にログイン#

$ slurmlogin -c 10 --mem-per-cpu 8G

slurmloginインタラクティブパーティションに入るためのコマンドです。--x11オプションを除いた他のオプションは、 Slurmのsrunコマンドに渡されます。これはsbatchコマンドと同じオプションを渡すことができます。

-c <ncore>#

ジョブに対しncoreCPUコアを確保します

--mem-per-cpu=<size>[units]#

1CPUコアあたりに確保するメモリ量を指定します

unitsを省略した場合、単位はMBです。また、unitsにはKB,MB,GBなどが指定できます。

--gpus=<num>#

GPUボードをnum枚確保します

--x11#

X11を有効にします。GUIソフトウェアを使用する場合に指定します。

--mpi=pmix_v3 -N <node> -n <process>#

build済みのmpiプログラムをslurmから実行する場合に指定します。

$ srun --mpi=pmix_v3 -N 2 -n 4 <実行コマンド>

テストするジョブの負荷に合わせて、おおよそのCPUコア数やメモリ量を指定します。

警告

制限を超えたリソースを設定した場合、インタラクティブジョブは開始されません。

2. 確認対象となるスクリプトをテスト実行#

例として、bwa-mem2をアレイジョブとして実行するスクリプト(bwa_test.sh)をテストします。以下のコマンドを実行します。

注釈

この手順はインターネットへの接続が必要なため、UnitAのみの対応となります。UnitAにて次のコマンドを実行してから手順を進めてください。

$ export https_proxy=http://epx3x01:8080
$ export http_proxy=http://epx3x01:8080

テストで使用するファイルは以下よりダンロードしてください。

以下のディレクトリを作成し、以降の工程を進めます。

$ mkdir DRA000583/DRX001619
$ ls ~/DRA000583/DRX001619/  # 入力ファイルのディレクトリ
DRR002191_1.fastq.bz2
DRR002191_2.fastq.bz2
DRR002192_1.fastq.bz2
DRR002192_2.fastq.bz2
DRR002193_1.fastq.bz2
DRR002193_2.fastq.bz2
DRR002194_1.fastq.bz2
DRR002194_2.fastq.bz2
 1#!/bin/bash
 2
 3#SBATCH -c 10
 4
 5set -euo pipefail
 6
 7# Activate binaries
 8module load bwa-mem2/2.2.1 samblaster/0.1.25 samtools/1.15
 9
10# Database
11INDEX=/share1/public/genome/JG2.1.0/index/bwamem2_2.2.1/jg2.1.0.fa
12REFERENCE=$INDEX
13
14# Input files
15FASTQ1_FILES=(~/DRA000583/DRX001619/*_1.fastq.bz2)
16FQ1=${FASTQ1_FILES[$SLURM_ARRAY_TASK_ID]}
17FQ_PREFIX=${FQ1%_1\.fastq\.bz2}
18FQ2=${FQ_PREFIX}_2.fastq.bz2
19
20# OUTPUT
21OUTDIR=~/output
22OUT_PREFIX=$OUTDIR/$(basename $FQ_PREFIX)
23
24mkdir -p $OUTDIR
25
26# Mapping
27BWA_THREADS=$(($SLURM_CPUS_PER_TASK - 2))
28
29bwa-mem2 mem -v 1 -t $BWA_THREADS $INDEX <(bzcat $FQ1) <(bzcat $FQ2) \
30    | samblaster \
31    | samtools sort --reference $REFERENCE \
32> $OUT_PREFIX.bam
33
34# Indexing
35samtools index -@ $SLURM_CPUS_PER_TASK $OUT_PREFIX.bam

ヒント

1行目

#!/bin/bash

シバン

3行目

#SBATCH

sbatchのオプション指定方法

5行目

set -euo pipefail

シェルスクリプトにおけるエラーの扱い

8行目

moduleコマンド

各種ソフトウェアの利用方法

11行目

/share1/public

スパコンのサービス →データベース

11行目

NAME=value

変数

15, 16行目

NAME=(value1 value2 ...),${NAME[index]}

配列

17行目

${...%...}

パラメーター展開

22行目

$(...)

コマンド置換

27行目

$((...))

算術演算

29行目

<(...)

プロセス置換

29行目

\

コマンドの改行

30行目

|

パイプ

32行目

>

リダイレクト

シェルスクリプトを実行します。

$ chmod u+x bwa_test.sh
$ SLURM_CPUS_PER_TASK=10 SLURM_ARRAY_TASK_ID=0 ./bwa_test.sh  # 一時的な変数設定を使う場合
$ export SLURM_CPUS_PER_TASK  # `export`を使う場合
$ export SLURM_ARRAY_TASK_ID=0
$ ./bwa_test.sh
samblaster: Version 0.1.25
samblaster: Inputting from stdin
samblaster: Outputting to stdout
Looking to launch executable "/usr/local/software/ubuntu-20.04/bioinfo/bwa-mem2/2.2.1/bin/bwa-mem2.avx2", simd = .avx2
Launching executable "/usr/local/software/ubuntu-20.04/bioinfo/bwa-mem2/2.2.1/bin/bwa-mem2.avx2"
...
samblaster:
samblaster: Marked     3198536 of  126605856 (2.526%) total read ids as duplicates using 2342484k memory in 2M12S(131.742S) CPU seconds and 1H15M44S(4544S) wall time.
[bam_sort_core] merging from 80 files and 10 in-memory blocks...

ヒント

一時的な変数設定またはexportコマンドを使用することで、sbatch実行時に設定される変数を手動で設定してテストを実行することができます。

ヒント

スクリプトが強制終了と表示された後に中断したり、slurmloginの終了時に次のようなメッセージが表示される場合は、実行したスクリプトがメモリ制限の上限に達しています。

slurmstepd: error: Detected 1 oom-kill event(s) in StepId=195838.0. Some of your processes may have been killed by the cgroup out-of-memory handler.
srun: error: c3x001: task 0: Out Of Memory

このような場合は、--mem-per-cpuオプションでメモリ量を増やしてから再試行してください。

3. 結果が正常であることを確認#

$ ls ~/output/
DRR002191.bam  DRR002191.bam.bai

4. intr パーティションのノードからexit#

$ exit

(2) mjobsを用いたテスト実行#

続いてmjobsパーティションを使用し、小規模なテストを実行をします。例えばアレイジョブの場合、1ジョブのみを投入して、正常終了するか・計算ノードが過負荷にならないか・メモリの最大消費量はどれくらいかを確認します。

1. 必要に応じてスクリプトにsbatchのオプションを変更#

1#!/bin/bash
2
3#SBATCH -c 10
4#SBATCH --mem-per-cpu 8G
5
6set -euo pipefail
7...

2. mjobs にジョブを投入#

$ sbatch -a 0-0 bwa_test.sh
 Submitted batch job 123456

3. 計算ノードへの負荷を確認#

計算ノードの負荷状況は、slurminfoコマンドに表示されるLoadの欄で確認できます。一般的に、確保されているCPUコアの総数よりもLoadの値が大きい場合は過負荷状態です。

4. バッチジョブが正常終了することを確認#

適宜ジョブの出力も確認します。

5. バッチジョブ結果からメモリ使用量を確認#

$ job_record -j 123456_0 | grep max_rss
max_rss              30376.09M

メモリを最大で約30GB使用していたことが確認できました。

(3) 本番実行#

テスト実行の結果から、本番実行で指定するメモリ使用量やCPUコア数を調整し、sbatchコマンドでジョブを実行します。

アレイジョブのように複数の入力ファイルに対して処理を実行する場合、テストデータでのメモリ使用量が30GBだったとき、本番では入力の違いによる使用量の変化も考慮して余裕をもち、例えばテスト環境の約1.5倍の45GBを確保します。

10CPUコアを使用するため、--mem-per-cpuオプションでは、45GB/10 = 4,500MB/CPUコアを指定します。

1#!/bin/bash
2
3#SBATCH -c 10
4#SBATCH --mem-per-cpu 4500
5#SBATCH -a 0-3
6
7set -euo pipefail
8...
$ sbatch bwa_test.sh

ログインノード利用時の注意事項#

負荷の高い処理は、テストであっても、Slurmでジョブとして実行してください。Slurmを利用せず、ログインノードで負荷の高い処理を実行してしまうと、他のユーザがログインできない、各種処理のレスポンスが低下する、などの症状が発生し、他のユーザにも悪影響を及ぼします。

また、リソース制限を超えるジョブを実行した場合、システムによってそのプロセスが強制終了されることがありますのでご注意ください。