大容量のリモートオブジェクトを並列取得し、チャンク形式へ直接保存する経路がAIStoreに組み込まれた。4GiBのS3オブジェクトでは、NVIDIAの社内測定で単一ストリームのcold GETより最大4倍高速だった。
クラスタ内とリモートのデータを同じ基盤で扱う
NVIDIAが開発するAI向け分散ストレージのAIStoreは、クラスタ内に置いたデータと、クラウドなどのリモートデータを一つのストレージ基盤から操作する。どちらか一方を単なるキャッシュとして位置付けず、双方を利用対象として扱う設計である。
この構成では、リモートデータの取得もストレージ内部の処理へ接続される。大容量のリモートオブジェクトを対象に、その取得経路を並列化する機能がBlob Downloaderである。
オブジェクトを分割して複数の範囲から読み出す
Blob Downloaderは、リモートオブジェクトを設定可能なサイズのチャンクに分割する。複数のワーカーが各チャンクに対応する範囲を並列に読み出すため、オブジェクト全体を一つの逐次ストリームで取得する必要がない。
読み出したチャンクは、AIStoreのチャンク形式へ直接書き込まれる。この書き込みには対象ノードの全ディスクが並列に参加し、リモートからの取得とノード内での保存が同じデータ経路で進む。
4GiBの取得結果と負荷制御を結び付ける
NVIDIAの社内ベンチマークでは、Blob Downloaderで4GiBのS3オブジェクトを取得した場合、単一ストリームによるcold GETより最大4倍高速だった。これはNVIDIAによる特定条件下の測定結果であり、すべてのオブジェクトや環境に共通する倍率を示すものではない。
並列取得は、固定した負荷で動き続けるわけではない。Blob DownloaderはAIStore内部の負荷情報を参照し、ノードに余力があるときは処理を抑制せず、メモリやディスクに圧力がかかると実行を抑える。
先読みと配信へ並列取得を組み込む
Prefetchは、設定したサイズのしきい値を超えるオブジェクトをBlob Downloaderへ振り分け、通常のcold GETに代わる取得経路として利用できる。重大なメモリ圧力がある場合や、リソースの受け入れ判定が並列処理を拒否した場合には、通常のcold GETへ切り替える。
Blob Downloaderの利用経路は、対象を指定して明示的に起動する取得ジョブ、Prefetchとの連携、ストリーミングGETの3種類である。ストリーミングGETでは、大容量オブジェクトをAIStoreへキャッシュする処理と、取得中のデータをクライアントへ配信する処理が並行して進む。