# 分散推論基盤の基礎技術 〜高火力 PHYで作る分散推論基盤 vol.2〜 著者: [[道下幹也]]([[SAKURA Internet]]) 公開日: 2025-12-23 URL: https://knowledge.sakura.ad.jp/48764/ ## 概要 [[高火力 PHY]] チームの道下幹也による技術記事の第 2 弾。前回(vol.1)で取り上げた Prefill-Decode Disaggregation(PD-Disaggregation)を継承し、分散推論基盤の中核的課題である **KV Cache 転送** に焦点を絞って詳述する。インフラ・プラットフォーム提供者として、ハードウェアとソフトウェアの双方を正しく把握することが、パフォーマンス障害のトラブルシューティングに直結するという立場から書かれている。 ## LLM 推論の基礎とPD-Disaggregation [[LLM推論]] の基本動作は「入力トークンを元に新たなトークンを一つ生成する」という繰り返しである。初回処理(Prefill)で **KV Cache** と呼ばれる計算結果のキャッシュが生成される。 推論処理は二種類の性質に分かれる: - **Prefill**: 計算バウンドな処理(多数の演算を行う) - **Decode**: メモリバウンドな処理(KV Cache を繰り返し読み出す) PD-Disaggregation では Prefill を担当する GPU と Decode を担当する GPU を物理的に分離して処理する。この分離によって Prefill と Decode それぞれに最適なリソース配分が可能になる一方で、Prefill ノードから Decode ノードへの KV Cache 転送が性能上の重要な課題となる。 ## GPU 間データ通信とネットワーク2層 ### Scale Up Network(ノード内) 主にサーバー内で GPU を相互接続する高速データ転送路。代表的な帯域比較: | インターコネクト | 帯域 | |---|---| | PCIe Gen5 (x16) | 64 GB/s | | PCIe Gen6 (x16) | 128 GB/s | | NVLink 4.0(18 Links) | 400 GB/s | | NVLink 5.0(18 Links) | 900 GB/s | NVLink はマルチ GPU ノード(HGX 等)における GPU 間の主要通信路であり、PCIe と比べて桁違いに高い帯域を実現する。 ### Scale Out Network(ノード間) 異なるノード間の GPU 同士のデータ転送を高速化するための高帯域・低遅延ネットワーク。現在の最高水準は 400 Gbps(NIC は GPU の枚数分搭載される)。ノード間の上限はこのリンク帯域に律速される。 ## GPUDirect RDMA RDMA をベースとして、GPU メモリー上のデータをメインメモリー(バウンスバッファ)を経由せずにリモートの GPU メモリーへ直接転送する技術。バウンスバッファの排除により、レイテンシの削減と CPU 負荷の軽減が同時に実現できる。 ### 実装方式1:PeerDirect(レガシー) MOFED(Mellanox OFED)における従来実装。`nvidia-peermem` モジュールが Peer Memory Client の役割を担い、複数デバイス対応の抽象化レイヤーを提供する。現在は後述の dma-buf 方式への移行が推奨されている。 ### 実装方式2:dma-buf(推奨) Linux 5.12 以降のカーネルに組み込まれた標準的な実装。ファイルディスクリプタベースの汎用バッファ共有機構を使い、Exporter(VRAM を公開する側)と Importer(メモリーを利用する側)の2役割で構成される。 動作要件: - Linux kernel 5.12 以上 - NVIDIA Open Driver - CUDA 11.7 以上 ## KV Cache 転送に関わるソフトウェア ### [[UCX]](Unified Communication X) モダンな高帯域・低遅延ネットワーク向けに設計されたオープンソースの通信フレームワーク(GitHub: https://github.com/openucx/ucx)。GPUDirect RDMA を含む多様なトランスポートを統一的に扱う。 アーキテクチャは2層で構成される: - **UCT**(Unified Communication Transport): ハードウェア抽象化レイヤーで、トランスポート API を提供する - **UCP**(Unified Communication Protocol): ビジネスロジック実装層 動作制御に使用する主要環境変数: | 環境変数 | 役割 | |---|---| | `UCX_TLS` | 使用するトランスポートを選択する | | `UCX_NET_DEVICES` | 使用するデバイスを選択する | [[NCCL]] が[[集合通信]](AllReduce 等)向けに設計されているのに対し、UCX は任意の2点間転送を含む汎用通信に対応する点が異なる。 ### [[NIXL]](NVIDIA Inference Xfer Library) [[LLM推論]] における高帯域・低レイテンシかつ効率的なデータ転送(KV Cache 転送)を実現するライブラリ(GitHub: https://github.com/ai-dynamo/nixl)。NVIDIA Dynamo の構成要素。 アーキテクチャは3層で構成される: - **North-Bound API(NB API)**: ユーザー(推論フレームワーク)向けの高レベルインターフェース - **South-Bound API(SB API)**: バックエンドプラグイン向けの低レベルインターフェース - **Backend Plugin**: デバイス固有の転送実装 デフォルトで提供される5種のバックエンドプラグイン: | バックエンド | 対応メモリ種別 | 概要 | |---|---|---| | UCX | DRAM、VRAM | UCX ベースの汎用転送 | | GDS | DRAM、VRAM、FILE | GPUDirect Storage を利用 | | OBJ | DRAM、OBJ | S3 API 互換ストレージとの連携 | | MoonCake | DRAM、VRAM | MoonCake との連携 | | HF3FS | DRAM、FILE | DeepSeek の 3FS との連携 | 推論フレームワーク([[vLLM]] 等)は NB API を通じて「このバッファを転送したい」という意図のみを伝えれば、NIXL がバックエンドを自動選択して最短経路で転送を実行する。フレームワーク側はバックエンドの詳細を意識しなくてよい。 #### 動作フロー 1. NIXL Agent 初期化(バックエンドプラグインの設定を含む) 2. メモリー登録処理(使用するバッファを NIXL に登録) 3. Agent 間のメタデータ交換(転送元・転送先の情報を共有) 4. データ転送処理(READ または WRITE 操作) ## NIXL による KV Cache 転送性能の検証 ### 検証環境 - H100 HGX サーバー(8 GPU / 8 NIC)× 2台 - 全 NIC: 400 Gbps、RoCEv2 対応 - OS: Ubuntu 22.04.5 LTS ### ベンチマーク結果 H100 HGX 2台構成で [[NIXL]] + [[UCX]] を用いたベンチマークを実施した。 **ローカル通信(同一ノード内)**: | テスト | 期待性能 | 実測結果 | |---|---|---| | GPU 間(NVLink 経由) | 400 GB/s | 400 GB/s 付近を達成、レイテンシ約 3 ms | | GPU-CPU 間(PCIe Gen5 経由) | 64 GB/s | 約 50 GB/s で律速(期待値より低め) | **リモート通信(ノード間)**: | テスト | 期待性能 | 実測結果 | |---|---|---| | GPU-GPU 間(400 Gbps NIC 経由) | 50 GB/s | 50 GB/s 付近でインターコネクト帯域上限に律速 | | GPU-CPU 間(リモート) | 50 GB/s | 40〜50 GB/s | | CPU-CPU 間(リモート) | 50 GB/s | 40〜50 GB/s | ### 結論 NIXL + UCX を正しく構成した場合、**KV Cache 転送のボトルネックは主に物理リンクの帯域に収束する**ことを確認した。ソフトウェア層がボトルネックになっておらず、ハードウェアの上限まで帯域を引き出せている。この知見は、PD-Disaggregation を実際の分散推論基盤に適用する際のリンク選定・設計指針として直接活用できる。 ## まとめと次のステップ インフラ・プラットフォーム提供者は、基盤技術の成り立ちと性能を正しく把握しておく必要がある。そのナレッジはパフォーマンス問題のトラブルシューティングで強力な武器になる。次回(vol.3)では推論フレームワークの話へと進み、PD-Disaggregation の有効性を確認するベンチマークを共有する予定。 ## 関連 - [[LLM推論]] — Prefill/Decode の分離(PD-Disaggregation)とKV Cacheの転送が中核的課題 - [[NIXL]] — 本記事が詳述するKV Cache転送ライブラリ - [[UCX]] — NIXL のデフォルトバックエンド。UCT/UCP の2層構造 - [[RDMAネットワーク監視]] — GPUDirect RDMA の基盤となるRDMAネットワークの監視 - [[高火力 PHY]] — 本記事の著者が所属するさくらインターネットのチーム - [[道下幹也]] — 著者 - [[SAKURA Internet]] — 著者所属組織 - [[@2025__さくらのナレッジ__分散推論基盤やその前提の考え方]] — vol.1(PD-Disaggregation概要)