jh220046

次世代演算加速装置とそのファイル IO に関する研究塙 敏博（東京大学）

概要

GPU クラスタにおいて，実アプリケーションを効率よく実行するためには GPU に対するデータの入出力の考慮が必要であり，データ転送と演算のオーバラップ，転送レイテンシの短縮を工夫する必要がある．そこで本研究では，GPU 上データの直接ファイル IO である GPUDirect Storage(GDS)，あるいは計算とファイル IO のオーバラップの両者を容易に取り扱い可能にする手法を確立し，様々なファイル入出力特性を持つ実アプリケーションにおいて GPU-ファイル IO 間の処理を効率化することを目的とする．さらにファイル IO を考慮したベンチマークを実装する．今年度
は，N 体シミュレーション，都市気候シミュレーション，機械学習トレーニングのそれぞれについて GDS の利用について実装検討，一部については予備評価を行った．その結果，GDS は多くの場合に高い性能を示し，mdx では VM 環境であっても GDS が非 GDS に対して最大 1.67 倍の性能を示した．

佐藤 拓人 (筑波大): City-LES コード

1 共同研究に関する情報1.1

星野 哲也 (東大 → 名古屋大): GPU プログラ
ミング

共同研究を実施した拠点名• 東京大学 情報基盤センター

河合 直聡 (東大): 数値アルゴリズム• 名古屋大学 情報基盤センター

中島 研吾 (東大): 計算科学アプリケーション• mdx

住元 真司 (東大): ストレージ技術

1.2

小林 諒平 (筑波大): GPU 通信，IO

課題分野

藤田 典久 (筑波大): GPU 通信，IO• 大規模計算科学課題分野
1.3

朴 泰祐 (筑波大): GPU 通信，IO
平賀 弘平 (筑波大): ストレージ技術、機械学習共同研究分野 (HPCI 資源利用課題のみ)• 超大規模情報システム関連研究分野
1.4

小山 創平 (筑波大): ストレージ技術、機械学習参加研究者の役割分担

2 研究の目的と意義

塙 敏博 (東大・代表): 全体取りまとめ，GPU通信，機械学習

HPC システムにおいて，アクセラレータと建部 修見 (筑波大・副代表): ストレージ技術，して GPU が広く利用されているが，実アプリ

機械学習

ケーションでは本質的に GPU に対するデー

三木 洋平 (東大): 宇宙物理コード

タの入出力の考慮が必要であり，データ転送1

と演算のオーバラップ，転送レイテンシの短縮見られることも確認できた．本研究では，別を工夫する必要がある．近年 NVIDIA によっ

途 AMD EPYC Milan CPU, NVIDIA A100て，GPUDirect RDMA をファイル IO に拡張

80GB PCIe GPU を搭載する GPU サーバ，おした GPUDirect Storage (GDS) が提供されよび筑波大学計算科学研究センターに導入さるようになり、IO オーバヘッドの短縮が期待れた，Intel Sapphire Rapids CPU, NVIDIAされる．本研究は，GPU 上データの直接ファ

H100 80GB PCIe GPU を搭載する Pegasus

イル IO，あるいは計算とファイル IO のオーシステムも使用して実施している．

バラップの両者を容易に取り扱い可能にする

4 前年度までに得られた研究成果の手法を確立し，様々なファイル入出力特性を概要持つ実アプリケーションにおいて GPU-ファイル IO 間の処理を効率化することを目的とす

該当なし

る．さらにこの成果を，最先端共同 HPC 基盤

5 今年度の研究成果の詳細

施設 (JCAHPC) の次期システム “Oakforest-

PACS II (OFP-II)” の設計に反映し，OFP-II

5.1

N 体シミュレーション

および次世代 GPU クラスタにおいて利用可能

今年度は，GPU 向けに最適化された重力ツな，ファイル IO を考慮したベンチマークを実

リーコード GOTHIC (Miki & Umemura 2017;

装する．

Miki 2019) に，GDS を用いたファイル出力機能を組み込み，銀河衝突シミュレーションにお3 当拠点公募型研究として実施したける性能評価を実施した．HDF5 13.x におい

意義て導入された Virtual File Driver（VFD）を

本 研 究 で は ，計 算 科 学 の 実 ア プ リ に お け

利用する HDF5 GDS VFD*1 を東京大学情報るファイル IO の観点で，宇宙物理コードの基盤センターが保有する実験システムに導入

GOTHIC，気象コードの City-LES を対象にし，GOTHIC からは HDF5 経由で GDS を利用し ，各 分 野 の 専 門 家 を 交 え て 研 究 を 実 施 しするよう実装した．通常の実装（Listing 1）とた．さらに PyTorch などの機械学習フレーの違いは，HDF5 ファイルをオープンする際ムワークも対象にしている. 本研究で利用しに GDS を利用するための適切なプロパティをた NVIDIA A100 GPU は，Wisteria/BDEC-指定するということ（Listing 2）であり，これ

01 Aquarius，mdx で採用されている．当初

によって GPU 上のアドレス空間を直接 HDF5は，Wisteria/BDEC-01 Aquarius および不老の write 関数に指定することで GDS 機能を用Type II において GDS の利用を想定していいたファイル出力が可能となる．

たが，GPU ドライバやストレージの制約等

アンドロメダ銀河周辺の構造をよく再現できにより実現できなかった．一方で，mdx におる銀河衝突シミュレーション（Kirihara, Miki

いては，VM を採用しており，ハードウェア

et al. 2017，全粒子数 16 777 216，約 18 万ス

としては抽象化され，必ずしもデバイスに対テップ）において，GDS を利用して 1024 粒して最適な構成であるか不可視な部分はある子分のデータだけを全タイムステップ出力する

ものの，必要に応じた OS や所望のドライバ構成を取ることができ，実際に性能の改善が*1 https://github.com/hpc-io/vfd-gds

2

Listing 1 通常の HDF5 ファイルのオープン方法．

target = H5Fcreate ( filename , H5F_ACC_TRUNC , H5P_DEFAULT ,H5P_DEFAULT ) ;Listing 2 GDS を有効にした HDF5 ファイルのオープン方法．

# include " H5FDgds . h "fapl = H5Pcreate ( H5P_FILE_ACCESS ) ;H5Pset_fapl_gds ( fapl , MBOUNDARY_DEF , FBSIZE_DEF , CBSIZE_DEF ) ;target = H5Fcreate ( filename , H5F_ACC_TRUNC , H5P_DEFAULT , fapl ) ;という実験を行った．この際に，各ステップにおけるデータを個別のファイルに出力すると総ファイル数が膨大となるため，全体のスナップショットファイル出力（数千ステップに一度の頻度，全 400 ファイル）ごとに一つのファイルに書き込むこととし，HDF5 のグループ機能を用いて各タイムステップのデータが容易に取り出せるような実装としている．
使 用 し た GPU は NVIDIA A100 80GB

PCIe であり，データ出力先は KIOXIA CM6-V
3.2TB KCM61VUL3T20 である．ソフトウェ
ア環境としては，CUDA 11.7, HDF5 1.13.1,

HDF5 Nvidia GPUDirect Storage VFD 1.0.1

図 1 GDS 使用の有無によるデータ出力時間を用いた．図 1 に，1024 粒子分のデータ出力の比較．データ出力に要する時間をステップに GDS を用いた場合のデータ出力時間を赤点ごとに示した．赤点が GDS 使用時，黒点がGDS 不要時のデータ出力時間であり，GDSの使用によって 2 倍程度高速になっている．

で，用いなかった場合のデータ出力時間を黒点で示した．データ出力時間はステップごとに大きく変動するものの，GDS の使用によって概ね 2 倍程度高速化されている．GOTHIC はblock timestep を採用した重力ツリーコードであるため，重力計算に要する時間はステップ性がある．また，はじめの 1-2 万ステップ程度ごとに 2 桁程度変動する．今回の実験では全スに対してそれ以降のステップにおいては時間刻テップで出力データサイズは一定としたが，各みの階層数が増加しており，こうした重力計算ステップで実行された重力計算による影響で，の挙動の変化が図 1 における振る舞いと関連しステップごとのデータ出力時間も変動した可能ている可能性がある．

3

5.2

都市気象シミュレーション

オーバーラップすることとした. この実装で今年度は, City-LES の最適化・GDS への適は, City-LES 本体が MPI と OpenMP のハイ用を見越して, City-LES の流体計算の一部とブリッド並列コードで多数のモジュールから出力部を取り出したベンチマークソフトの開なるコードである点を考慮し, 流体計算部を可発を行った. 従来 City-LES に関するベンチ能な限り改変しないようにした. そのため, 入マークソフトは City-LES の出力パターンを模れ子並列処理を用いて, 全体を計算スレッド・したデータ出力部のみを取り出したものしかな出力スレッドの 2 スレッド並列に, 計算スレッ

く, 計算と出力のバランスや計算と出力のオード内を従来の実装通り, 計算開始時に指定したバーラップの効果を簡易的に測定できるもの数でスレッド並列するようにした (Listing 3).

がなかった. 本年度開発したベンチマークは,ベンチマークソフトへの実装に先立ち, 単純化

City-LES の気流計算部のうち移流拡散過程やしたテストプログラムで Listing 3 の実装を行

Poisson 方程式の求解部といった基本的な部分い, 出力部が隠蔽できることを確認した. ただと, 計算結果の出力部のみを切り出したコード

し, ベンチマークプログラムに同様の機能を実である. これを用いることで, 本研究で実装を装した場合, 流体計算部と出力部の両スレッド試みる最適化の効果のより効率的な議論が期待で MPI 通信が発行されるため, その管理などできる.のための一部の変更を追加する必要がある.

こ の ベ ン チ マ ー ク ソ フ ト を ベ ー ス に, 出

5.3

機械学習トレーニング

力のノンブロッキング化の方法を検討した.

今年度は，機械学習のフレームワークにおけCity-LES の 出 力 は NetCDF フ ァ イ ル で ある GDS の適用状況について調査および環境構り, NetCDF-4 ラ イ ブ ラ リ を 使 用 し て い る.

築を行った．

NetCDF-4 ラ イ ブ ラ リ に は ノ ン ブ ロ ッ キ ン

NVIDIA に よ っ て 公 開 さ れ て い る Data

グ I/O が 実 装 さ れ て い な い た め, 計 算 と 出

Loading Library (DALI: https://github.

力 の オ ー バ ー ラ ッ プ が 困 難 で あ っ た.

そこcom/NVIDIA/DALI) は、データの読み込みおで, 使 用 す る ラ イ ブ ラ リ を ノ ン ブ ロ ッ キ ン

よび前処理を行うライブラリであり，画像、ビ

グ I/O の API が 実 装 さ れ て い る Parallel

デオ、オーディオ等のデータセットを効率よくNetCDF に変更し, 出力をノンブロッキング行う機能を提供する．PyTorch, Tensorﬂow な

API (nfmpi iput vara *) に 置 き 換 え た. こど機械学習向けのフレームワークでは，データれによって, 出力するすべての変数の書き出ローダやデータイテレータを備えており，通常，しを非同期に行うことが可能となった. しかデータロードとそれに伴うデコードや画像の整し, この API を用いる場合, 実際の書き出しは形などの処理は CPU で行われる．DALI はこ

nfmpi wait で一括して行われることがわかっれらの機能をオーバーライドして，GPU 上にた. 単純に出力部のライブラリを置き換えるオフロードする．さらに、DALI は、入力パイだけでは, 出力のオペレーションの数は減らせプラインのスループットを向上させるため，プるが, 計算と出力のオーバーラップは実現できリフェッチ、並列実行、バッチ処理などの機能ず, wait 部で出力待ちが発生してしまう. こを持ち，ユーザからは透過的に処理が行われれを防ぐために, OpenMP を用いて出力用のる．DALI は TensorFlow, PyTorch, MXNet,

スレッドを生成しスレッド並列化して出力をPaddlePaddle をサポートしており，学習や推4Listing 3 テストプログラムにおける出力オーバーラップの実装例．

io_flag = 0! $OMP parallel , num_threads ( 2 )do n = total timesteps! $OMP single
if ( io_flag /= 2) then
! $OMP parallel , num_threads ( N )* Fluid simulation part *N1 = nend if! $OMP end single nowait
if ( io_flag == 0) then! $OMP barrier
end if! $OMP sections firstprivate ( data )! $OMP section
if ( n = output_step ) then* output part *io_flag = 2! $ call omp_set_lock ( lock1 )end ifif ( io_flag == 2 . and . n == N1 ) then
io_flag = 0! $ call omp_unset_lock ( lock1 )end if! $OMP end sections nowait
end do論のワークフローに対して高い移植性を備えてPython から容易に使えるようにしたものであいる．この中で，GDS は DALI のデータローる．Kvikio では，ホストおよび GPU から，ダにおいて用いられている．

GDS の利用可能の有無に関わらずシームレス

機械学習ベンチマーク MLPerf において，に動作する機構を提供している．DALI とは独

Training のうち，画像分類，物体検出，音声認立に開発されているものと考えられ，両者を組識など一部のベンチマークについては DALI がみ合わせてより高い性能を実現できる可能性がすでに組み込まれていることを確認している．

ある．

一 方 ，Kvikio(https://github.com/

一方で，GDS 基本性能を評価する目的で環rapidsai/kvikio) は ，NVIDIA に よ っ て境構築を実施し，mdx の VM 上で GDS 実

提供されているライブラリであり，cuFile に験環境を構築した．VM の構成は図 2 に示す

よって提供される GDS の機能を，C++ やように，mdx GPU ノードのうち，1GPU, 185

表 1 gdsio による性能
UPI

DDR4
DDR4
DDR4
DDR4
DDR4
DDR4
DDR4
DDR4

CPU1
Intel Xeon Platinum
8368Y(ICX)

x16100GbEx16

PCIe Gen4x16A100

CPU2Intel Xeon Platinum8368Y(ICX)

x16x16

PCIesw

x16A100x16A100x16x16A100

A100

スレッド

PCIe
sw

x16x16

A100

100GbE

x16A100x16mode

Read

Write

(GiB/s)(GiB/s)nonGDS

0.77

0.80

GDS

0.92

0.92

nonGDS

1.46

1.54

GDS

1.72

1.80

nonGDS

2.90

3.02

GDS

3.51

3.61

nonGDS

5.31

4.62

GDS

6.22

6.18

nonGDS

6.57

5.45

GDS

8.98

8.39

nonGDS

6.53

5.75

GDS

8.91

9.61

数x16

PCIe
sw

PCIe
sw

x16100G
bE

DDR4DDR4DDR4DDR4DDR4DDR4DDR4DDR4100GbE

1PCIe Gen4x16A100

NVSwitch
NVSwitch
NVSwitch
NVSwitch
NVSwitch
NVSwitch2

図 2 mdx における GDS 環境

48vCPUs であり，OS は Ubuntu 20.04.5 を用いた．GPU は PCIe pass through により接16続されており，CUDA 11.8 の環境を用いた．
また，ストレージへの接続は SR-IOV により18100Gbit Ethernet で接続され，Lustre ドライ
バには lustre-2.14.0 ddn50 を用いた．従って，VM の環境ではあるが，GPU およびネットワークの IO インタフェースについては，ベアデータを超高頻度に出力しても N 体シミュ

メタルのように直接ハードウェアをアクセスでレーションの性能が極端に低下することはないきる構成である．

ことが分かった．

NVMe SSD による Lustre FS (mdx では

一 方 で ，今 年 度 使 用 し て い た Wisteria-/fast) について gdsio ベンチマークによる測Aquarius や不老 Type II といったスパコン定を行った．Lustre 上ではファイルに対して上においては，OS や各種ドライバのバージョ

最大の striping をセットし, ファイルサイズンなどの制約から GDS が動作可能とならな

10GB, iosize 1MB, 3 回の試行のうち，最も良かったため，スパコン上での動作試験は実施

い結果を採用した．結果を表 1 に示す．

できなかった．こうしたスパコン上での動作試評価の結果，GDS の場合が非 GDS（CPU験および性能評価は，次年度以降に取り組んでへの転送を行う）場合に比べていずれも高い性いく．

能を示した．18 スレッドを使った write の場

6.2

合で最大 1.7 倍の高い性能を示した．

今年度は, City-LES の性能測定・出力部の改良のためのベンチマークソフトの実装を行なっ

6 今年度の進捗状況と今後の展望
6.1

都市気象シミュレーション

た. また, 出力の API 変更やマルチスレッド

N 体シミュレーション化による計算 – 出力のオーバーラップについ今年度目標としていた内容である (1) GDSて検討した. その結果, API 変更による出力部を用いての GPU からの直接データ出力，(2)の挙動の変化や, テストプログラムにおけるマHDF5 の機能を用いてのファイル数削減につルチスレッド化による出力の隠蔽が実現できる

いては実装および動作試験が完了した．また，ことも確認できた. 今後は, テストプログラム

6で動作が確認できた出力の隠蔽をベンチマークプログラムへの実装を継続予定である. また,task 機能を用いたマルチスレッド化も検討する予定である. さらには, City-LES はすべての流体計算部が OpenACC によって GPU 対応済であるので, 流体計算を GPU で, 出力をCPU で行い両者をオーバーラップさせる実装にも取り組む予定である. これら 3 パターンのオーバーラップ法の性能を相互比較し, 実アプリに実装するのに最適な方法を検討する.

6.3

機械学習トレーニング

今年度は，機械学習フレームワークにおけるGDS の利用方法について調査および環境構築を行った．DALI は MLPerf における Train-ing のリファレンス実装として用いられている
TensorFlow, PyTorch, MXNet のいずれもサポートしており，画像分類，物体検出，音声認識のベンチマークはすでに DALI に対応した実装が存在している．一方，kvikio を使うことで性能の改善が見られる場合もあり，詳細な性能評価については来年度実施予定である．

7 研究業績一覧（発表予定も含む）
国内会議発表（査読なし）• 富永 瑞己, 塙 敏博, 三木 洋平, 「GPU クラスタにおけるファイル IO 性能評価」、情報処理学会ハイパフォーマンスコンピュー
ティング研究会, 2023 年 8 月 (発表予定)

7