3. ログイン¶
4. ファイル転送¶
scp
コマンド等を用いてファイル転送することで、プリポスト環境で参照・使用することができます。5. コンパイル¶
5.1. GCC¶
GCCを用いたコンパイル例です。
大容量メモリノード
[Login]$ srun -p mem1 -n 1 --mem 27G --time=5 --pty bash -i
[MEM]$ gcc -o a.out sample.c
GPUノード
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
[GPU]$ gcc -o a.out sample.c
注釈
ログインノード上でGCCを使用してコンパイルされたプログラムも、プリポスト環境で実行可能です。
5.2. Intelコンパイラ¶
計算ノードでIntelコンパイラを使用する場合、インタラクティブジョブでジョブを投入し、環境変数を設定してください。
Intelコンパイラを用いたコンパイル例です。
大容量メモリノード
[Login]$ srun -p mem1 -n 1 --mem 27G --time=5 --pty bash -i
[MEM]$ . /opt/intel/oneapi/setvars.sh intel64
[MEM]$ icc -o a.out sample.c
GPUノード
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
[GPU]$ . /opt/intel/oneapi/setvars.sh intel64
[GPU]$ icc -o a.out sample.c
注釈
ログインノードでIntelコンパイラを使用してコンパイルされたプログラムも、プリポスト環境で実行可能です。
5.3. NVIDIA CUDA Compiler¶
インタラクティブジョブでGPUノードにログインし、環境変数を設定してください。
CUDA Compilerを用いたコンパイル例です。
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
[GPU]$ export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
[GPU]$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
[GPU]$ nvcc -o a.out sample.cu
注意
NVIDIA CUDAコンパイラは、GPUノードでのみ利用可能です。
コンパイルされた a.out を実行するには、SLURMオプションによってGPU本体のリソース確保が必要です。(詳細はバッチジョブ以降を参照)
5.4. 富士通コンパイラ(クロスコンパイラ)¶
富士通コンパイラを用いたコンパイル例です。
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
[GPU]$ frtpx -o a.out sample.f90
6. ジョブの実行方法¶
6.1. ジョブキュー(パーティション)¶
現在、提供されているジョブキューの一覧を以下に示します。[1]
キュー名 (PartitionName) |
ノード名 (Nodes) |
デフォルト経過時間 [h] (DefaultTime) |
最大経過時間 [h] (MaxTime) |
ジョブあたりデフォルトCPU数 (cpus-per-task) |
ジョブあたり最大CPU数 (MaxTRESPerJob=cpu) |
ジョブあたりデフォルトメモリ量 (DefMemPerNode) |
ジョブあたり最大メモリ量 (MaxMemPerNode) |
ユーザあたりの最大ジョブ実行数 (MaxJobPerUser) |
ジョブあたりの最大ノード数 (MaxNodes) |
---|---|---|---|---|---|---|---|---|---|
gpu1 |
pps[01-06]
|
0.5
|
3
|
1
|
72
|
2700M
|
186G
|
5
|
1
|
gpu2 |
pps[07-08]
|
0.5
|
24
|
1
|
36
|
2700M
|
93G
|
1
|
1
|
mem1 |
ppm01
|
0.5
|
3
|
1
|
224
|
27G
|
5020G [2]
|
5
|
1
|
mem2 |
ppm[02-03]
|
0.5
|
24
|
1
|
56
|
27G
|
1500G
|
1
|
1
|
ondemand-reserved [3] |
wheel[1-2]
|
0.5
|
720
|
1
|
8
|
4G
|
32G
|
50
|
1
|
注釈
gpu1, mem1は短時間用ジョブ、gpu2, mem2は長時間用ジョブのキューとして用意されています。
リソース量を指定せずにジョブ投入した場合に、デフォルト値が適用されます。ジョブ投入時に要求CPU数、メモリ量、経過時間をジョブスクリプトもしくはSlurmのコマンドオプションで指定することをお願い致します。
6.2. バッチジョブ¶
プリポスト環境へバッチジョブとしてジョブを投入するには、ジョブスクリプトを作成し、ログインノード上でSlurmコマンドを実行します。
6.2.1. 逐次ジョブ¶
逐次ジョブのジョブスクリプト例です。
大容量メモリノード (1cpu)
#!/bin/bash
#SBATCH -p mem1 # キューの指定
#SBATCH -n 1 # CPU数の指定
#SBATCH --mem 27G # メモリ量の指定
./a.out
大容量メモリノード (1node)
#!/bin/bash
#SBATCH -p mem1 # キューの指定
#SBATCH -n 224 # CPU数の指定
#SBATCH --mem 5020G # メモリ量の指定
./a.out
GPUノード (1cpu)
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH -n 1 # CPU数の指定
#SBATCH --mem 2700 # メモリ量の指定 [MB]
./a.out
GPUノード (1node)
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH -n 72 # CPU数の指定
#SBATCH --mem 186G # メモリ量の指定
./a.out
6.2.2. OpenMP¶
OpenMPを用いたジョブスクリプト例です。
Intelコンパイラ+OpenMP
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH --cpus-per-task=72 # タスクごとに使用するCPU数を指定
export OMP_NUM_THREADS=72
export KMP_AFFINITY=granularity=fine,compact
. /opt/intel/oneapi/setvars.sh intel64
./a.out
GCC + OpenMP
#!/bin/bash
#SBATCH -p mem1 # キューの指定
#SBATCH --cpus-per-task=224 # タスクごとに使用するコア数を指定
export OMP_NUM_THREADS=224
./a.out
6.2.3. MPI¶
MPIを用いたジョブスクリプト例です。
Intelコンパイラ + Intel MPI
#!/bin/bash
#SBATCH -p mem1 # キューの指定
#SBATCH --cpus-per-task=224 # タスクごとに使用するコア数の指定
#SBATCH -t 00:10:00 # ジョブ実行時間の制限を指定
. /opt/intel/oneapi/setvars.sh intel64
mpiexec -n 224 ./a.out
GCC + OpenMPI
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH -n 72 # タスク数の指定
#SBATCH -t 00:10:00 # ジョブ実行時間の制限を指定
. /vol0004/apps/oss/spack/share/spack/setup-env.sh
spack load openmpi@3.1.6%gcc@8.5.0
mpiexec --use-hwthread-cpus -n 72 --mca btl_openib_if_include mlx5_0 ./a.out
注意
GCC+Open MPIを使用する際、各ノードに対する最大コア数の半分以上を利用する場合は、--use-hwthread-cpusオプションが必要です。
6.2.4. GPU¶
GPUを用いたジョブスクリプト例です。
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH --gpus-per-node=1 # 利用するGPU数の指定
./a.out
GPUを2台使用する場合は、--gpus-per-node=2
を指定してください。
#!/bin/bash
#SBATCH -p gpu1 # キューの指定
#SBATCH --gpus-per-node=2 # GPUを2台使用する場合の指定
./a.out
6.3. インタラクティブジョブ¶
インタラクティブジョブのジョブ投入コマンドの例です。
大容量メモリノード (1cpu)
[Login]$ srun -p mem1 -n 1 --mem 27G --time=5 --pty bash -i
大容量メモリノード (1node)
[Login]$ srun -p mem1 -n 224 --mem 5020G --time=5 --pty bash -i
GPUノード (1cpu, GPUなし)
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
GPUノード (1node, GPUなし)
[Login]$ srun -p gpu1 -n 72 --mem 186G --time=5 --pty bash -i
GPUノード (1cpu, 1GPU)
[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --gpus-per-node=1 --pty bash -i
[GPU]$ nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.216.01 Driver Version: 535.216.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla V100-PCIE-32GB Off | 00000000:18:00.0 Off | 0 |
| N/A 41C P0 37W / 250W | 0MiB / 32768MiB | 1% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
GPUノード (1node, 2GPU)
[Login]$ srun -p gpu1 -n 72 --mem 186G --time=5 --gpus-per-node=2 --pty bash -i
[GPU]$ nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.216.01 Driver Version: 535.216.01 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla V100-PCIE-32GB Off | 00000000:18:00.0 Off | 0 |
| N/A 39C P0 39W / 250W | 0MiB / 32768MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 Tesla V100-PCIE-32GB Off | 00000000:AF:00.0 Off | 0 |
| N/A 38C P0 38W / 250W | 0MiB / 32768MiB | 1% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
6.4. スクラッチ領域(大容量メモリノードで使用可)¶
注意
ジョブが使用できる領域は、/worktmp/${SLURM_JOBID} となります。
スクラッチ領域は、ジョブおよびユーザ間で共有されており、最大で1TBとなっています。
スクラッチ領域が、他ジョブ(もしくはユーザ)の使用によって最大容量に達していた場合は、書き込みに失敗します。
ジョブ終了後、当該ディレクトリ (/worktmp/${SLURM_JOBID}) は自動的に削除されます。
ジョブスクリプトの例です。
#!/bin/bash
#SBATCH -p mem1
#SBATCH -n 1
export TMPDIR=/worktmp/${SLURM_JOBID}
dd if=/dev/zero of=${TMPDIR}/foo.dat bs=100M count=1
6.5. その他¶
プリポスト環境上でX Window Systemを利用する場合、srun
コマンドに--x11
オプションを付与し、インタラクティブジョブでジョブ投入してください。
[Login]$ srun --x11 -p gpu1 -n 1 --time=5 --pty bash -i