# 分散推論基盤の基礎技術 〜高火力 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概要)