GPU試験利用

お知らせ

  • MPI-IOが意図したように動作しないため,要求資源以外を不可視にする機能を停止しました.
    これにより1基のGPU資源を要求しても全てのGPUが見えるようになったため,現在は dgx-full キューのみが有効になっています.
    この設定変更により下記の既知の問題にある MPI プログラムの実行に数分かかる問題が発生しなくなっています.(2021/10/09)
  • default のメモリ制限が 256 MB に設定されていましたが,明らかに少なすぎたため 64GB に緩和しました.(2021/08/13)
  • 計算ノードで module load nvhpc したときに一部のパスが通らない不具合が解消されました
  • cuda-toolkit 11.0 および 11.3 が利用可能になりました module load cuda-toolkit/11.0 としてご利用下さい.11.3 は互換性の問題が発生する可能性があります.
  • このページの記述通りに動作しない場合にはご報告いただけますようお願いいたします.(2021/06/17)
  • 試験公開を開始しました。(2021/06/17)

既知の問題

  • MPIプログラムを起動するのに時間がかかる.Walltime が 1分程度だとプロセスが立つ前にタイムアウトします.余裕をみて少なくとも5分以上設定するようにしてください.
  • ログインノードで module load nvhpc すると付属の cuda 11.3 にパスが通るが計算ノードの hpc_sdk で同様にすると cuda 11.0 にパスが通る

Last Updated: 2020/07/07


1. NVIDIA GPU試用機材(DGX A100)の概要

DGX A100 ([外部リンク] NVIDIA製品情報) を試用機材として提供しています.
今年度の共同利用計算機ユーザは申請なく利用できます.
(GPU/GRAPE ユーザ向けに公開されている試験機材とは異なります)
計算ノードには8基の SXM 版 NVIDIA A100 が搭載されています.
試用期間中は臨時のメンテナンスが行われる可能性があります.
メンテナンス予定またはメンテナンス中であることの通知はwebのお知らせ欄で行います.
GRAPEライブラリは現在使用できません.

2 システム情報

このシステムは1台のログインノード(g00)と1台の計算ノード(gxa1)で構成されています.

2.1 構成

システム概要

ログインノード:g00.cfca.nao.ac.jp

アドレス g00.cfca.nao.ac.jp
CPU 仮想ホストの AMD EPYC 7282 のうちの 4 コア
主記憶 16 GiB/node
OS Ubuntu 20.04 LTS

計算ノード:gxa1

ノード数 1
CPU AMD EPYC 7742 (64 cores) x 2 / node
加速器 NVIDIA A100 SXM 40GB 8基 / node
主記憶 2 TB/node
OS DGX OS 5 (Ubuntu 20.04 LTS)

2.2 ストレージ

/home/<username > および /gwork0/<username > が利用できます.
/gwork0 は,中規模サーバ,GPU系と共通のストレージで,解析サーバからも使用できます.
quota は以下のコマンドで確認することができます.

$ quota -s

2.3 アクセス方法

本機材はその他のシステム同様,CfCA-HPCネットワーク内に設置されています.
VPNを用いてHPCネットワークに接続し,g00.cfca.ac.jp にログインしてください.

$ ssh -l アカウント名 g00.cfca.nao.ac.jp

VPNによる接続方法の詳細はHPCネットワークへの接続方法を御覧下さい。
CfCA共同利用計算機のアカウント名(本Webシステムのアカウント名ではありません)は本Webシステムのアカウント情報から確認することができます。
また初期NISパスワードは利用申請受理後にメールで配信されます。

とすることでシェルを変更することができますが,動作確認はbashで行っており,その他のシェルでの動作確認は十分ではありません.
特に環境変数は /etc/profile.d/ 以下の nvidia_hpc_sdk.csh , nvidia_hpc_sdk.sh で設定しています.
GPUクラスタ以外の計算機システムでシェルを変更されている方は,シェル由来の不具合が発生する可能性があります.

3 利用方法

計算ノードへ直接ログインすることはできません.ログインノードでプログラムの開発を行なって下さい.
利用可能なキューは随時変更される可能性があります.

$ qstat -Qf

などで確認して下さい.

3.1 コンパイル

NVIDIA HPC SDK に含まれるコンパイラか,cuda-toolkit に含まれるコンパイラを使用します.
仕様の詳細は https://developer.nvidia.com/hpc-sdk の documentation を参照してください.
特に注意すべき点として,Volta以降はWarp内のスレッドスケジューリングが異なっているため,Pascalを意識して書いたコードをコンパイルする際には以下のように指定してください.
この指定では compute_60: Pascal仕様で sm_80: Amper上で動作するバイナリが生成されます.

$ module load cuda-toolkit/11.0
$ nvcc -gencode=arch=compute_60,code=sm_80 -o sample sample.c

[外部リンク]independent-thread-scheduling-compatibility
[外部リンク]options-for-steering-gpu-code-generation
CUDA Fortran で書かれたプログラムの場合は以下のように nvfortran または mpif90 でコンパイラでコンパイルしてください.
nvccとはオプションがやや異なります.
ログインノードの NVIDIA HPC SDK は CUDA 11.3 がデフォルトになるためにインストールされていますが,
計算ノード側の GPU Driver version が正式に対応しているのは cuda 11.0 までのため,
使用するライブラリによっては動作しない可能性があります.
申し訳ありませんが,問題が生じた場合はご報告くださいますようお願いいたします.

$ module load nvhpc
$ nvfortran -cuda -gpu=cuda11.0,cc80 -tp=zen2 -mcmodel=medium -o hello hello.f90

その他の機能は [外部リンク] NVIDIA HPC SDK のドキュメント を参照してください.

GRAPE用プログラムをコンパイルするには別途GRAPE G5/G6 用のGRAPEライブラリをリンクする必要があります.(未対応).

3.2 ジョブ管理システム

GPUクラスタではジョブ管理システムとしてOpenPBS (version 20.0.0)を導入しています.
ログインノードからジョブ管理システムを用いてジョブを実行して下さい.
試験公開中のため,予告なくキューの設定を改定することがあります.
現時点でのキューは以下の通りです.

dgx-debug 最大8GPU, 128CPU, walltime 10 min
dgx-small 最大2GPU, 16CPU, walltime 48h
dgx-half 最大4GPU, 32CPU, walltime 12h
dgx-full 最大8GPU, 128CPU, walltime 3h

制限値の実態は

[g00 ~]$ qstat -Qf

で確認できます.

利用可能なキュー

利用可能なキューは随時変更される可能性があります.

$ qstat -Qf

などで確認して下さい.

ジョブの投入方法

計算の投入に必要な最小のジョブスクリプトは以下の通りです.test.sh など適当な名前で保存してください.
ジョブスクリプトのシェルを bash 以外をにするとmoduleの環境変数が読み込まれないことがあります.bashを指定するよにしてください.

#! /bin/bash
#PBS -q dgx-small
#PBS -l walltime=00:00:60
#PBS -l select=1:ngpus=2:ncpus=8
module load nvhpc
cd $PBS_O_WORKDIR
./a.out > a.log
# mpiexec -n 8 a.out # ※ MPI プログラムの場合

プログラムを実行するディレクトリの設定が必要です。
以下のようにプログラムを実行するディレクトリをcd コマンドで設定してください。

cd /home/YOUR_ACOUNT/DIR

ジョブスクリプトを投入したディレクトリは $PBS_O_WORKDIR という環境変数に格納されます.
したがって投入ディレクトリへの移動は以下のように記述することもできます.

cd $PBS_O_WORKDIR

ジョブスクリプトの最終行でプログラムを実行しています.
標準出力が多くなったときに不具合が生じることがあるため,リダイレクトは必ず書くようにしてください.

./a.out > a.log

スクリプトを作成後,qsubコマンドでジョブを投入します.

% qsub test.sh

1つのジョブが使用できるメモリは default で 64GiB に制限されています.
さらに多くのメモリが必要な場合には,

#PBS -l select=1:ngpus=2:ncpus=8:mem=128gb

などとして必要量を確保してください.
今のところ上限は設けておりませんが,過剰に確保せずに必要量を指定してご利用下さい.

MPIジョブのためのジョブスクリプト

[2021年7月17日] MPIプログラムを起動するのに数分かかります.Walltime が 1分程度だとプロセスが立つ前にタイムアウトします.余裕をみて少なくとも5分以上設定するようにしてください.
MPIプロセスはmpiexec で起動する必要があります.最も単純なジョブスクリプトは以下のようなものです.
-np オプションでプロセス数を指定します.

#!/bin/bash
#PBS -q dgx-small
#PBS -l walltime=00:00:60
#PBS -l select=1:ngpus=2:ncpus=8
cd $PBS_O_WORKDIR
module load nvhpc
mpiexec -np 8 a.out

ジョブの確認

qstat -a

以下は表示例です。

bash-4.2$ qstat -a

g00:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
135.g00 <user_name> dgx-full hello.sh 18366 1 1 -- 00:00 R 00:00

状態(S の列,Status の意味) は以下の種類がある.

E (Exiting) 実行済みで終了中
H (Held) 保留状態
Q (Queued) キュー待機状態
R (Running) 実行中
S (Suspended) 中断中

ジョブの消去

以下のコマンドによってジョブをキャンセルできます。

qdel <JOB-ID>

JOB-ID は上記qstat コマンドで調べることができます。

3.3 GRAPEライブラリの利用方法

未対応です

4 その他の注意事項

GRAPE/GPUシステムは利用申請を行い、申請が受理された利用者が使用出来ます。
GPUの試用のみを希望される場合もGRAPE利用申請フォームから利用申請を行ってください。
各利用者は利用方法を守り、他の利用者の利便を損なわないようにしてください。
利用方法が守られていないとこちらで判断した場合、警告無く利用者のプロセスを終了することをご了承下さい。