使用リソースの検討¶
使用リソースの検討¶
大規模、大量ジョブ投入時は事前に必ずテストを実施してください。
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>¶
ジョブに対し
ncore
CPUコアを確保します
- --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行目 |
|
|
3行目 |
|
|
5行目 |
|
|
8行目 |
|
|
11行目 |
|
スパコンのサービス →データベース |
11行目 |
|
|
15, 16行目 |
|
|
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...
ヒント
スクリプトが強制終了
と表示された後に中断したり、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を利用せず、ログインノードで負荷の高い処理を実行してしまうと、他のユーザがログインできない、各種処理のレスポンスが低下する、などの症状が発生し、他のユーザにも悪影響を及ぼします。
また、リソース制限を超えるジョブを実行した場合、システムによってそのプロセスが強制終了されることがありますのでご注意ください。