NVIDIAは、PythonからファイルをGPUメモリへ読み込み、実際に高速化経路を利用したかを確認するKvikIOの活用法を公開した。大容量データをGPUへ移す開発者は、読み込みコードと実行統計を併せて調べ、データがCPUメモリを経由したかを点検できる。

1. KvikIOとcuFileが段階的に経路を決める

GPUDirect Storage(GDS)は、対応ストレージとGPUメモリの間に直接のデータ経路を提供する。CPUメモリを中継地点として経由する段階を減らす技術だ。

ファイルシステムベースのストレージでは、cuFileがGDSにアクセスするCライブラリとなる。KvikIOはその上でPythonとC++のインターフェースを提供し、ファイル読み込みと実行設定を扱う。

実際の経路選択は2段階だ。まずKvikIOが、リクエストをcuFileへ送るか、CPUメモリを経由する独自の互換経路で処理するかを決める。次に下位層のライブラリが、システムの対応状況やファイルシステム、設定に応じて、高速化経路またはCPUメモリ経由の経路を選ぶ。

2. インストール環境と読み込み設定を確認する

チュートリアルの実行には、NVIDIA GPUとGDSがインストールされたLinuxシステム、対応ストレージとファイルシステムが必要だ。ストレージ上のファイルを作成、読み書きする権限と、診断ツールにアクセスする権限も用意する。

CUDA 13用のKvikIOをインストールすると、GPU配列を扱うCuPyも依存関係としてインストールされる。チュートリアル環境の互換モードは自動選択で、高速化経路の使用を試みる最小リクエストサイズは16 KiBだった。

自動選択ではcuFileを先に試し、利用できなければCPUメモリを経由する独自のファイル読み込みへ切り替える。最小リクエストサイズより小さい読み込みも、この独自経路を直接利用する。

インストール済みのバージョンと設定は、次の原文コードで確認する。

import kvikio
import kvikio.cufile_driver as cufile_driver
import kvikio.defaults as defaults

kvikio.__version__
cufile_driver.libcufile_version()
defaults.get("compat_mode").name
defaults.get("gds_threshold")

3. GPUバッファへ読み込んだ後に統計を確認する

読み込み時は、ファイルサイズと同じ大きさのCuPy配列をGPUメモリに作り、転送先バッファとして渡す。KvikIOでファイルを開いて読み込むと、戻り値から読み込んだバイト数を確認できる。

読み込みの成功やcuFileの呼び出しだけでは、実際に高速化経路を利用したかは分からない。転送経路は実行統計で調べる。

cuFileのプロセス別統計レベル、つまり実行中のプログラムごとに分けた集計レベルを3に設定し、読み込みを実行する。Pythonを対話形式で実行し、入力と結果をその場でやり取りしてプロセスを維持したまま、gds_statsで累積カウンター、つまり実行後に加算され続ける集計値を確認する方法だ。

NVIDIAが公開した1 GiBの読み込みは、デフォルトのタスクサイズ4 MiBに従って256個の処理に分割された。以下は、同社の発表に基づく、同じ実行で確認したGPU別の統計だ。

x86_64、NVIDIA H100、CUDA 13.3、cuFile 1.18、ローカルNVMe・ext4、GPUとストレージ間のPCIeブリッジが最大1つのPIX接続、IOMMU・ACS無効、nvidia-fsカーネルモジュール読み込み済み、KvikIOタスクサイズ4 MiB、読み込みサイズ1 GiB

1 GiB読み込み時の転送経路別処理数 (回)
項目処理数
読み込み全体(n)256
高速化経路(nvfs)256
cuFile互換経路(posix)0

全256個の処理が高速化経路として集計された。同社の発表によると、この経路の読み込み総量は1,024 MiBだった。この統計は、上記の構成でデータがどの経路を通ったかを示す結果だ。

4. リクエストの分割とコストを併せて考慮する

大きな読み込みは、まずKvikIOがタスク単位に分割し、cuFileが実行設定に応じてさらに分割して並列処理できる。そのためリクエストの分割を調整する際は、上位ライブラリのタスクサイズと下位層の並列実行設定を併せて確認することが重要だ。

直接経路の利点はCPUメモリを経由する段階を減らすことにあり、NVIDIAの説明によるとシステムのCPU使用率も下がる。ただし、チュートリアルのように転送先GPUバッファをストレージ転送用に登録していない場合は、登録済みのGPU一時バッファへ先に読み込み、転送先へコピーするコストが発生する。

KvikIO活用の要点は、GPUメモリへの読み込みコードと実行経路の点検を併せて用意し、データの移動方法を確認することにある。