ようこそ¶
このガイドでは、AI4S Supercomputer の早期アクセス利用に必要な基本情報として、ログイン方法と簡単な Slurm ジョブの例を説明します。
システムのハードウェア情報については、https://github.com/RIKEN-RCCS/AI-for-Science-Supercomputer を参照してください。
AI4S Supercomputer の早期アクセス利用アカウントを申請するには、アカウント作成フォームを提出してください。
お知らせ:早期アクセス フェーズ2 への移行について
早期アクセス フェーズ1(現在のシステム) は 2026年7月6日(月)午前(JST) に終了します。その後、7月6日午後から7月7日午後にかけてシステムメンテナンスのため システムが停止 します。早期アクセス フェーズ2 の運用開始は 2026年7月7日(火)午後(JST) を予定しています。
フェーズ1 のアカウント情報は引き継がれません。全ユーザーは7月6日以降にアカウントの再申請が必要です。課題代表者は新たなプロジェクト申請を行ったうえで、ユーザーアカウントの登録を行ってください。
また、フェーズ1 とは異なり、フェーズ2 から利用料金が発生します。プロジェクト申請・アカウント申請・利用料金等の詳細については、別途案内されます。
SSH ログイン¶
以下の USERNAME は自分のユーザー名に置き換えてください。
利用方法¶
Slurm を使ってジョブを投入します。利用可能なパーティションは以下のとおりです。
| パーティション | 最大ノード数 | 最大GPU/ノード | 最大CPUコア/ノード | 最大メモリ/ノード | 最大実行時間 |
|---|---|---|---|---|---|
| 1n1gpu | 1 | 1 | 36 | 400GB | 96 時間 |
| 1n2gpu | 1 | 2 | 72 | 800GB | 96 時間 |
| 1n4gpu | 1 | 4 | 144 | 1600GB | 96 時間 |
| 2n4gpu | 2 | 4 | 144 | 1600GB | 96 時間 |
| 4n4gpu | 4 | 4 | 144 | 1600GB | 96 時間 |
| 4n4gpu-p | 4 | 4 | 144 | 無制限 | 無制限 |
モジュール環境¶
このシステムでは、NVIDIA HPC Software Development Kitを利用した開発・実行向けに複数のモジュール環境を提供しています。
| モジュール | 説明 |
|---|---|
| nvhpc | 標準的な NVHPC 環境 |
| nvhpc-nompi | MPI なしの NVHPC 環境。MPI を自分で管理する場合に使用します |
| nvhpc-hpcx | IB と HPC-X を含む NVHPC 環境 |
| nvhpc-hpcx-cuda13 | HPC-X を含み、CUDA 13 に固定された NVHPC 環境 |
| nvhpc-byo-compiler | システムの GCC を利用する環境。BYO は bring your own の意味です |
利用可能なモジュールを確認する¶
module avail を使うと、利用可能なモジュールの詳細な一覧を確認できます。
ロード済みのモジュールを確認する¶
module list を使うと、現在ロードされているモジュールを確認できます。
モジュールを読み込む¶
利用したい環境は module load で読み込みます。
モジュールを切り替える¶
別のモジュールを読み込む前に、現在のモジュールを unload します。
モジュールの内容を確認する¶
module show を使うと、そのモジュールが環境にどのような変更を加えるかを確認できます。
バッチジョブを投入する¶
job.sh のようなジョブスクリプトを作成します。以下の例では、1n1gpu パーティションで 1 ノード、1 GPU を要求します。
#!/bin/bash
#SBATCH --job-name=test-job
#SBATCH --partition=1n1gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=1
#SBATCH --time=00:10:00
module load nvhpc
hostname
nvidia-smi
sbatch でジョブを投入します。
squeue で自分のジョブを確認します。
インタラクティブジョブを実行する¶
salloc を使う¶
salloc を使うと、インタラクティブセッション用のリソースを確保できます。以下の例では、1n1gpu パーティションで 10 分間、1 ノード、1 GPU を要求します。
割り当てが開始されたら、srun を使って割り当てられたノード上でコマンドを実行します。
終了したら、exit を実行してインタラクティブ割り当てを解放します。
srun を使う¶
srun --pty bash を使うと、計算ノード上でインタラクティブシェルを開始できます。以下の例では、1n1gpu パーティションで 10 分間、1 ノード、1 GPU を要求します。
終了したら、exit を実行してシェルを抜け、srun ジョブを終了します。
ジョブをキャンセルする¶
投入済みまたは実行中のジョブは scancel でキャンセルできます。JOBID は sbatch または squeue で表示されるジョブ ID に置き換えてください。
パーティションの状態を確認する¶
sinfo を使って、パーティションとノードの状態を確認できます。
特定のパーティションを確認するには -p を使います。
ローカル Scratch ストレージ¶
各計算ノードでは、約 7TB の NVMe SSD 上にローカル Scratch 領域を提供しています。ジョブからこの Scratch 領域にアクセスするには、USER_SCRATCH_DIR 環境変数を使用します。
このストレージは、計算中に一時ファイル、データセット、チェックポイント、中間結果などを高速なローカル SSD 上で扱いたい場合に有用です。この領域のファイルはジョブ終了後に自動的に削除されるため、保存が必要な結果はジョブ終了前に永続的なストレージへコピーしてください。
#!/bin/bash
#SBATCH --job-name=scratch-example
#SBATCH --partition=1n1gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=1
#SBATCH --time=00:10:00
module load nvhpc
echo "Scratch directory: ${USER_SCRATCH_DIR}"
./my_application > ${USER_SCRATCH_DIR}/output.log
# ジョブ終了後も保存が必要な結果をコピーします。
# SLURM_SUBMIT_DIR は sbatch コマンドを実行したディレクトリです。
cp ${USER_SCRATCH_DIR}/output.log ${SLURM_SUBMIT_DIR}/
マルチ GPU / マルチノードでの MPI 通信設定(暫定推奨)¶
GPU バッファを直接 MPI に渡す(CUDA-aware MPI / GPUDirect)アプリでは、現時点のソフトウェアスタック(HPC-X 2.25.1 / UCX 1.20)で以下の設定を行わないと、ノードをまたぐ GPU 間通信が極端に遅くなったり失敗したりすることが確認されています。これらは恒久対応までの 暫定(tentative)推奨設定です。
module load nvhpc-hpcx
# (1) CUDA-aware MPI を有効にする環境変数
export OMPI_MCA_pml=ucx
export UCX_CUDA_COPY_DMABUF=no
export UCX_MAX_RNDV_RAILS=4
export NCCL_DMABUF_ENABLE=0
export NCCL_NET_GDR_LEVEL=SYS
# (2) マルチノードで GPU バッファ通信を使う場合に必須
# これが無いとノード間の非ブロッキング GPU 通信(MPI_Isend/Irecv 等)が
# "cannot find remote protocol ... tag_send ... from cuda" で失敗します。
export UCX_PROTO_ENABLE=n
# mpirun には -x で各変数を伝播させてください
X="-x OMPI_MCA_pml -x UCX_CUDA_COPY_DMABUF -x UCX_MAX_RNDV_RAILS -x NCCL_DMABUF_ENABLE -x NCCL_NET_GDR_LEVEL -x UCX_PROTO_ENABLE"
mpirun -n <ranks> --map-by ppr:4:node $X ./your_app
GPU の割り当て(1 プロセス = 1 GPU)¶
1 ノードで複数 GPU を使う場合、各 MPI プロセスを別々の GPU に割り当てないと、全プロセスが GPU 0 を共有して NVLink が使われず、性能が大きく低下します。アプリ側で割り当てるのが理想です。
- C/CUDA:
cudaSetDevice(local_rank) - OpenACC (Fortran):
call acc_set_device_num(mod(local_rank, ndev), acc_get_device_type()) - アプリを変更できない場合は、ラッパースクリプトで
CUDA_VISIBLE_DEVICESをローカルランクに設定します:
cat > devwrap.sh <<'WRAP'
#!/bin/bash
export CUDA_VISIBLE_DEVICES=${OMPI_COMM_WORLD_LOCAL_RANK:-0}
exec "$@"
WRAP
chmod +x devwrap.sh
mpirun -n <ranks> --map-by ppr:4:node $X ./devwrap.sh ./your_app
これらの設定は今後のスタック更新で不要になる可能性があります。
問い合わせ先¶
AI チャットサポートをご利用ください。よくある質問はすぐに解決できます。
解決しない場合は、次のメールアドレスまでご連絡ください: rccs-ai4s-support [at] ml.riken.jp