## Memo blog記事:[Explorations of RDMA in LLM Systems](https://le.qun.ch/en/blog/2025/11/09/rdma-p2p-for-llm/) LLM システムにおける高性能ポイント・ツー・ポイント通信の実装に関する論文。NVIDIA ConnectX と AWS EFA という異なる [[RDMA]] 実装間のポータビリティ問題を解決するため、TransferEngine という新しい抽象化層を提案している。GPU クラスタ上での[[分散推論]]、[[強化学習]]の重み更新、[[Mixture-of-Experts]] ルーティングといった実用的なシステムで実証されており、実装の複雑さに関わらず高性能を実現している点が特徴。 ## Memo with LLM ### 論文情報 - **タイトル**: RDMA Point-to-Point Communication for LLM Systems - **著者**: Nandor Licker (Perplexity AI), Kevin Hu (Perplexity AI), Vladimir Zaytsev (Perplexity AI), Lequn Chen (Perplexity AI) - **所属**: Perplexity AI - **発表媒体**: arXiv - **arXiv ID**: 2510.27656 - **発表年**: 2025 年 10 月 31 日 ### 論文概要 本論文は、LLM システムにおける高性能で可搬性のあるポイント・ツー・ポイント RDMA 通信の実現を目的とした TransferEngine ライブラリを提案している。既存の RDMA 実装がベンダー固有のニック(NIC)に依存しているという問題に対して、NVIDIA ConnectX と AWS Elastic Fabric Adapter(EFA)の両方で動作する統一インターフェースを提供する。提案されたシステムは、分散推論のための KvCache 転送、強化学習のための重み更新(1 兆パラメータモデルで 1.3 秒)、Mixture-of-Experts ディスパッチ/コンバイン操作を含む 3 つの本番環境システムで検証されている。 ### 詳細解説 #### 問題設定 大規模言語モデルの新しいアーキテクチャパターン(分散推論、Mixture-of-Experts、非同期強化学習微調整)は、従来のコレクティブ通信では対応できない柔軟なポイント・ツー・ポイント通信パターンを必要とする。しかし現状では以下の課題がある: 1. **ベンダーロックイン**: 既存の RDMA ソリューション(DeepEP、NVSHMEM、Mooncake など)は特定の NIC(主に NVIDIA ConnectX)にのみ対応し、AWS EFA での動作が困難である。 2. **プロトコルの不統一**: NVIDIA ConnectX は Reliable Connection(RC)プロトコル(順序が保証される)を使用する一方、AWS EFA は独自の Scalable Reliable Datagram(SRD)プロトコル(順序が保証されない)を使用しており、両者の実装の差異が課題。 3. **複数 NIC の管理**: AWS p5 インスタンスでは 400 Gbps の帯域幅を実現するため、4 つの 100 Gbps EFA NIC を集約する必要があるが、これを透過的に管理するメカニズムがない。 4. **コレクティブ通信の限界**: 既存のコレクティブライブラリ(NCCL、torch.distributed)は固定メンバーシップ、同期初期化、一様なバッファサイズを要求するため、動的スケーリングや疎な通信パターンに対応できない。 **入力・出力の定義**: - **入力**: 送信側 GPU メモリ領域、受信側 GPU メモリ領域の記述(アドレス、登録キー)、転送するデータサイズ、必要に応じて即座完了通知用の 32 ビット即座値 - **出力**: データの転送完了通知、受信側での即座値カウンターのインクリメント **必要なデータ**: メモリ領域の登録情報、複数 NIC にわたるネットワークアドレスシャーディング情報、ピアグループ情報(ルーティング用) #### 提案手法 TransferEngine は以下の主要な設計原則に基づいている: **1. 共通の信頼性抽象化** ConnectX と EFA の本質的な相違(順序保証の有無)を統一するため、「信頼性があるが順序保証なし」という共通の抽象化レイヤーを設計した。これにより両方のハードウェアで動作する統一インターフェースを提供する。 **2. ImmCounter 基元** 完了通知メカニズムとして novel な ImmCounter を導入した。従来は RDMA の順序保証に依存していたが、ImmCounter は: - 送信側:転送完了後に 32 ビット即座値を送信 - 受信側:完了キューから即座値を取得し、対応するカウンターをインクリメント - ポーリング:コールバックまたはアトミックフラグを使用して即座カウンター値を監視 この方式により、メッセージの順序に依存せずに転送完了を検出可能。 **3. API 設計** TransferEngine は以下の操作を公開: - **メモリ登録**: `reg_mr(ptr, len, device)` - ホストまたは GPU メモリを登録し、シリアライズ可能な MrDesc を返す - **2 つ側通信**: `submit_send()`, `submit_recvs()` - RPC スタイルの小ペイロード交換 - **1 つ側書き込み**: - `submit_single_write()` - 単一連続領域への書き込み - `submit_paged_writes()` - ページ指定による書き込み(間接インデックスと stride をサポート) - `submit_scatter()` - ピアグループへの分散書き込み - `submit_barrier()` - ピア群の同期 - **GPU-CPU 同期**: `alloc_uvm_watcher()` - GPU カーネルからの進捗検出 **4. NIC のシャーディング** 複数 NIC から並列アクセスする場合、以下のシャーディング戦略を採用: 複数の Writes が $W_1, W_2, \ldots, W_n$ とし、NIC が $N_1, N_2, \ldots, N_m$ の場合、Write $W_i$ を NIC $N_{(i \mod m)}$ に割り当てる。これにより複数 NIC の帯域幅を効果的に利用可能。 **5. ハードウェア固有の最適化** **AWS EFA の場合**: - libfabric API を使用 - ゼロサイズ書き込みに対して有効な記述子を強制 - Work Request (WR) テンプレート機能でオーバーヘッド削減 **NVIDIA ConnectX-7 の場合**: - libibverbs API を使用 - ピアごとに 2 つの RC キューペアを使用(2 つ側と 1 つ側の分離) - WR チェーニングで doorbell ring 削減(最大 4 つの WR をリンク) - `IBV_ACCESS_RELAXED_ORDERING` でアウトオブオーダー PCIe トランザクション許可 #### 新規性 本論文の主要な革新は以下の点で先行研究と異なる: **1. ベンダー非依存の統一抽象化** - **既存手法**: DeepEP(ConnectX のみ)、NVSHMEM(EFA で性能低下)、Mooncake、NIXL(EFA サポート不完全) - **本論文**: 両方のハードウェアで等価な性能を実現する統一インターフェースを設計 **2. 順序非依存の完了検出** - **既存手法**: RDMA の順序保証に依存 - **本論文**: ImmCounter による順序非依存の完了通知で、各プロトコルの違いを吸収 **3. 複数 NIC の透過的管理** - **既存手法**: 複数 NIC 使用時は手動でシャーディング - **本論文**: DomainGroup による自動的なシャーディングと負荷分散 **4. 本番環境での実装と検証** - **既存手法**: 主にシミュレーション・ベンチマーク - **本論文**: 分散推論、RL 学習、MoE ルーティングの 3 つの本番環境システムで実装・検証 **5. ホストプロキシ設計による可搬性** - **既存手法**: GPU-initiated RDMA(IBGDA)を使用(ConnectX のみ) - **本論文**: ホストプロキシ設計でポータビリティと性能のバランスを取得 #### 実験設定 **ハードウェア構成**: - GPU: 8×NVIDIA H200(NVLink 接続) - NIC: - ConnectX-7: 単一 400 Gbps - EFA: デュアル 200 Gbps(合計 400 Gbps) - CPU: デュアルソケット Intel Sapphire Rapids - ネットワーク: InfiniBand(ConnectX)、AWS Elastic Fabric Adapter(EFA) **評価対象システム**: 1. **KvCache 転送**: 分散推論(prefill/decode 分離) - 評価指標: レイヤーごとの転送遅延、スループット - テスト環境: EFA で本番環境テスト 2. **RL 重み更新**: 強化学習の非同期重み更新 - 評価指標: 重み更新時間、スループット - テストモデル: Kimi-K2(1T パラメータ)、DeepSeek V3(671B)、Qwen3(235B) - シャーディング: FSDP によるモデルシャーディング、256 個の訓練 GPU から 128 個の推論 GPU へ bf16→fp8 転換 3. **MoE Dispatch/Combine**: Mixture-of-Experts ルーティング - GPU スケール: 8、16、32、64 GPU - 評価対象: DeepEP(接続のみ)、pplx-kernels(NVSHMEM ベース)との比較 - ベンチマーク: DeepSeek-V3 設定 - Dispatch: 7168×fp8 トークン、56×fp32 スケーリング因子 - Combine: bf16 テンソル、同じ次元 - トークン化: 各トークンをランダムに 8 つのエキスパートに割り当て - 測定: ウォームアップ 10,000 回、ベンチマーク 10,000 回、全ランク集計 **比較ベースライン**: - DeepEP: 最高性能のオープンソース実装(ConnectX のみ) - pplx-kernels: NVSHMEM ベース(ConnectX、EFA) - NIXL v0.6.1: NVIDIA Inference Xfer Library - ハードウェアベンチマーク: ibv_write_bw(ConnectX)、fi_rma_bw(EFA) #### 実験結果 **1. ポイント・ツー・ポイント通信性能** | メッセージサイズ | EFA(スループット) | ConnectX-7(スループット) | |--|--|--| | 単一書き込み 64 KiB | 16 Gbps | 44 Gbps | | 単一書き込み 256 KiB | 54 Gbps | 116 Gbps | | 単一書き込み 1 MiB | 145 Gbps | 245 Gbps | | 単一書き込み 32 MiB | 336 Gbps | 378 Gbps | | ページ書き込み 1 KiB | 17 Gbps (2.11M op/s) | 91 Gbps (11.10M op/s) | | ページ書き込み 8 KiB | 138 Gbps (2.10M op/s) | 320 Gbps (4.89M op/s) | | ページ書き込み 64 KiB | 364 Gbps (0.69M op/s) | 370 Gbps (0.71M op/s) | **解釈**: MoE ルーティングに典型的な 256 KiB での書き込みでは、EFA が 54 Gbps、ConnectX-7 が 116 Gbps。KV キャッシュ転送に典型的な 64 KiB ページ書き込みでは両方とも帯域幅飽和。 **2. MoE Dispatch/Combine 遅延** **8 GPU(イントラノード)**: - TransferEngine Dispatch: ~2 μs 遅延増(DeepEP 比) - 理由: NIC 経由のルーティング情報交換オーバーヘッド **16 GPU(インターノード)**: - TransferEngine Dispatch: DeepEP より高速 - TransferEngine Combine: DeepEP より高速 - 理由: 効率的なバルク転送とパイプライニング **32 GPU**: - TransferEngine: DeepEP より一貫して高速 **64 GPU**: - Combine: 依然として DeepEP より高速 - Dispatch: CPU オーバーヘッド顕著(56 ピアへの enqueue オーバーヘッド) **EFA 対 ConnectX-7**: - EFA: 256 KiB 書き込みが低い帯域幅(54 Gbps vs 116 Gbps)のため、約 30% の遅延增 - ただし,デコード処理では帯域幅がボトルネックでないため,実用的な影響は限定的 **3. RL 重み更新性能** - **達成時間**: 1 兆パラメータモデル(1TB のパラメータ bf16→fp8 転換)で 1.3 秒 - **比較**: 既存フレームワークより 100 倍高速化 - **メカニズム**: - 256 個訓練 GPU から 128 個推論 GPU への直接転送 - パイプライン化実行(Host-to-Device memcpy、重み準備、RDMA 転送、全体バリア) - 全クラスタ帯域幅の利用 **4. 私有バッファサイズの影響** - **32 トークン未満**: EFA では性能低下が顕著 - **24~32 トークン**: ConnectX-7 で十分 - **理由**: ルーティング情報交換の遅延を隠蔽するため、ある程度のトークンバッファが必要 **5. Send/Receive 遅延分解** - Dispatch Send: ~0.5 μs(DeepEP より高速、単純なメモリコピー) - Combine Send: ~0.3 μs - Dispatch Receive: ~15 μs(NVLink loads により遅め) - Combine Receive: ~10 μs(より高速な累積) **6. Prefill 性能** - DeepEP: より良い性能(送信側部分和で RDMA トラフィック削減) - TransferEngine: メモリ効率が課題(デコード最適化カーネルが prefill で過度なメモリ使用) - 精度: TransferEngine は fp32 精度、DeepEP は bf16 精度低下 **主要な定量的結論**: 1. ConnectX-7 での MoE dispatch/combine は DeepEP に匹敵または超過 2. EFA での初の実用的な MoE 実装を実現(従来は存在しなかった) 3. RL 重み更新で 100 倍の高速化を達成 4. マルチプロバイダーポータビリティを実現しながら性能を維持