私たちは皆、vLLM の P2P を誤解していたので、私は公式マニュアルを読んだ

Reddit r/LocalLLaMA / 2026/3/17

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • vLLM は NCCL に依存し、NVLink を前提として P2P を試みることがあり、NVLink が存在しない場合にはハングを招く可能性があります。
  • PCIe 経由의 P2P を有効にするには、VLLM_SKIP_P2P_CHECK=1 と NCCL_P2P_LEVEL=SYS を設定します(適切な IOMMU が前提)。これにより、必要な NUMA 間/PCIe 間の通信を許可します。
  • NCCL_P2P_LEVEL の値 LOC、NVL、PIX、PXB、PHB、SYS は、トポロジに基づいて P2P の使用時期を定義します。詳しくはリンク先の NVIDIA のドキュメントを参照してください。
  • Sapphire Rapids では NTB の制約により PCIe P2P は Gen4 に制限されます。

いずれにせよ、プロ用GPU(GeForce以外)または P2P が有効なドライバを持っているが、nvlink ブリッジがなく、vllm を試すとハングします....

実際には、vllm は裏で NCCL に依存しており、 nvlink を持っていると仮定して p2p を試みます。しかし、GPU が PCIe 経由の p2p を可能にしていても nvlink が失敗することがあります。

それが、至る所で NCCL_P2P_DISABLE=0 を見る理由です。

では PCIe 上で p2p をどう使えますか? nccl にどのレベルの p2p が許容されるかを伝えることです。 https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html#nccl-p2p-level

以下を追加することで VLLM_SKIP_P2P_CHECK=1 NCCL_P2P_LEVEL=SYS(もちろん、あなたの iommu が適切に設定されている場合) nccl に対して、マザーボード上で跨ぐ必要があるものはすべて問題なく通過すると伝えます

注意: Sapphire Rapid PCIe P2P は NTB の制限のため Gen 4 に制限されています

NCCL_P2P_LEVEL の受け入れ可能な値は以下

LOC : P2P を一切使わない(常に無効) NVL : GPU が NVLink 経由で接続されている場合に P2P を使用 PIX : GPU が同じ PCI スイッチ上にある場合は P2P を使用 PXB : PCI スイッチを介して接続されている GPU に対して P2P を使用(複数ホップの可能性) PHB : GPU が同じ NUMA ノード上にある場合は P2P を使用。トラフィックは CPU を通る SYS : NUMA ノード間で P2P を使用、SMP イントコネクトを跨る可能性(例: QPI/UPI)
投稿者: /u/Opteron67
[リンク] [コメント]