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コンパイラを使用してコンパイルされたプログラムも、プリポスト環境で実行可能です。

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本体のリソース確保が必要です。(詳細はバッチジョブ以降を参照)

NVIDIA CUDAコンパイラに関する情報は、NVIDIA社ホームページを参照ください。

5.4. 富士通コンパイラ(クロスコンパイラ)

プリポスト環境のインタラクティブジョブにおいて、富士通コンパイラ(クロスコンパイラ)を使用することができます。
ログインノードでコンパイルする際に、メモリ不足等でコンパイルができない場合等にご利用ください。
なお、コンパイルしたモジュールをプリポスト環境で実行することはできません。
詳細は「利用手引書 -言語開発環境編-」を参照してください。

富士通コンパイラを用いたコンパイル例です。

[Login]$ srun -p gpu1 -n 1 --mem 2700 --time=5 --pty bash -i
[GPU]$ frtpx -o a.out sample.f90

6. ジョブの実行方法

ジョブ実行には、バッチジョブとインタラクティブジョブによる2種類の方法があります。
バッチジョブは、あらかじめジョブスクリプトを作成しジョブを投入する方法で、長時間実行する場合などに適しています。
一方、インタラクティブジョブでは、ユーザがコマンド実行を会話的に行うことができるため、バッチジョブ投入前のデバッグ等に使用することができます。

6.1. ジョブキュー(パーティション)

GPUノード、大容量メモリノード上でジョブを実行するには、ジョブキューを指定する必要があります。
指定の方法は、バッチジョブもしくはインタラクティブジョブの投入方法のセクションをご確認ください。

現在、提供されているジョブキューの一覧を以下に示します。[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. インタラクティブジョブ

インタラクティブジョブでは、必要となるリソースをSlurmコマンドのオプションとして、ログインノード上で直接指定し、実行します。
リソースが確保できればインタラクティブジョブに遷移します。その後は、会話的にコマンドが実行できます。

インタラクティブジョブのジョブ投入コマンドの例です。

  • 大容量メモリノード (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. スクラッチ領域(大容量メモリノードで使用可)

大容量メモリノードのキュー (mem1, mem2) にジョブを投入した場合、/worktmp 配下にジョブ毎の作業用ディレクトリが作成されます。
メモリを使用した高速なファイルシステムであり、一時的なスクラッチ領域として使用することができます。
ジョブ毎に作成された作業用ディレクトリは、そのジョブを投入したユーザのみアクセスすることができます。
なお、スクラッチ領域が作成されるのは、大容量メモリノードのみで、GPUノードにはありません。

注意

  • ジョブが使用できる領域は、/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