Technology

AIStoreの並列取得で4GiBのS3オブジェクト読み出しを最大4倍高速化

この記事のポイント

  1. 実現したこと

    大容量のリモートオブジェクトを複数の範囲から並列取得し、チャンク形式で保存できる。

  2. 実現の仕組み

    分割したチャンクを複数のワーカーが読み出し、対象ノードの全ディスクへ直接書き込む。

  3. 得られた結果

    4GiBのS3オブジェクト取得は、社内ベンチマークで単一ストリームのcold GETより最大4倍高速だった。

  4. 従来との違い

    一つの逐次ストリームによる取得から、複数範囲の並列読み出しと複数ディスクへの直接書き込みへ変わった。

分割された遠隔データが複数の並列経路を通って複数のストレージ層へ同時に書き込まれる抽象図
AI生成画像

大容量のリモートオブジェクトを並列取得し、チャンク形式へ直接保存する経路が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へキャッシュする処理と、取得中のデータをクライアントへ配信する処理が並行して進む。