vocus logo

方格子 vocus

NCCL啟動時報錯,排查主機板的 PCIe 通訊

更新 發佈閱讀 5 分鐘

在 RTX 5090 雙卡環境下,NCCL 報錯(常見為 unhandled system errorinvalid usage)通常源於消費級顯卡缺乏 NVLink 物理橋接,導致 NCCL 在嘗試透過 PCIe 進行 Peer-to-Peer (P2P) 通訊時,被主機板的 BIOS 設定或晶片組限制擋住。

請按照以下步驟由淺入深進行排查:


1. 快速診斷:檢查 P2P 支援狀態

首先確認系統是否真的能讓兩張卡「互相對話」。請在終端機執行:

</>Bash
nvidia-smi topo -m
  • 看圖表交點: 找 GPU0 與 GPU1 的交點。
    • PIX: 經過單個 PCIe Switch(最理想,P2P 必過)。
    • PHB / NODE: 經過 CPU 或主機板橋接(P2P 常在此失敗)。
    • SYS: 跨路處理器(極慢,P2P 基本不支援)。

2. 核心修復方案

方案 A:強制降低 P2P 級別 (最有效)

如果報錯發生在初始化階段,通常是因為 NCCL 嘗試使用高性能 P2P 但主機板不穩。請修改您的 deepspeed_launcher.sh,嘗試加入以下環境變數:

</>Bash
# 嘗試方案 1:將 P2P 限制在 PCIe 橋接層級 (PHB)
export NCCL_P2P_LEVEL=3

# 嘗試方案 2:如果還是報錯,徹底禁用 GPU 直接通訊,改走系統記憶體 (Shared Memory)
export NCCL_P2P_DISABLE=1
export NCCL_SHM_DISABLE=0

方案 B:升級 NCCL 版本 (針對 RTX 50 系列)

RTX 5090 是較新的 Blackwell 架構,早期的 NCCL 版本(如 2.20 以前)可能無法正確識別其 P2P 特性。

  • 建議: 確保您的 NCCL 版本在 2.26.5 以上。
  • 如果您使用 Docker,請確認鏡像內的 nvidia-nccl-cu12 版本。

3. BIOS 與硬體層級檢查

如果軟體設定無效,通常是主機板設定攔截了 PCIe 的數據交換:

  1. 禁用 ACS (Access Control Services): 這是最常見的兇手。ACS 會強制所有 PCIe 數據先回到 CPU 再下發,這會導致 NCCL 的 P2P 測試失敗。
    • 排查命令: sudo lspci -vvv | grep ACSCtl
    • 解決: 在 BIOS 中將 PCIe ACS 或 IOMMU 設置為 Disabled。
  2. 開啟 Above 4G Decoding 與 Resizable BAR: 預訓練大模型需要頻繁交換大塊顯存數據,務必在 BIOS 中將這兩項設為 Enabled
  3. 確認 PCIe 插槽帶寬: 確保兩張 5090 都插在由 CPU 直連 的插槽(通常是主機板最上方兩個),而非經由南橋(PCH)轉接的插槽。

4. 終極測試工具

如果依然報錯,請下載 NVIDIA 官方工具來測試:

</>Bash
# 下載並編譯 nccl-tests
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests && make
# 執行測試
./build/all_reduce_perf -b 8 -e 256M -f 2 -g 2

若測試通過但訓練失敗,說明問題出在 PyTorch 或 DeepSpeed 的配置;若測試直接報錯,則是驅動或 BIOS 的硬體問題。

您可以先嘗試在啟動腳本加入 export NCCL_P2P_DISABLE=1 看看能否順利跑通? 雖然這會損失約 5-10% 的同步效能,但能繞過 99% 的硬體相容性報錯。



留言
avatar-img
sirius數字沙龍
9會員
219內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/03/05
針對兩張 RTX 5090 訓練 7B 模型,這個啟動腳本會整合我們之前討論的所有技術(DeepSpeed ZeRO-2、Liger Kernel、Flash Attention 3),它可以一鍵啟動兩張顯卡進行分散式訓練。 由於 5090 效能極強,腳本中特別加入了 NCCL 優化參數。
Thumbnail
2026/03/05
針對兩張 RTX 5090 訓練 7B 模型,這個啟動腳本會整合我們之前討論的所有技術(DeepSpeed ZeRO-2、Liger Kernel、Flash Attention 3),它可以一鍵啟動兩張顯卡進行分散式訓練。 由於 5090 效能極強,腳本中特別加入了 NCCL 優化參數。
Thumbnail
2026/03/05
針對 RTX 5090 ,關鍵在於 CUDA 版本,必須使用 CUDA 12.4 或更高版本 才能發揮其硬體特性(如 FP8 加速與第五代 Tensor Cores)。 🧮 以下是 conda 環境安裝指南: 1. 建立基礎環境 2. 安裝 PyTorch (CUDA 12.4+ 專用版))
Thumbnail
2026/03/05
針對 RTX 5090 ,關鍵在於 CUDA 版本,必須使用 CUDA 12.4 或更高版本 才能發揮其硬體特性(如 FP8 加速與第五代 Tensor Cores)。 🧮 以下是 conda 環境安裝指南: 1. 建立基礎環境 2. 安裝 PyTorch (CUDA 12.4+ 專用版))
Thumbnail
2026/03/04
96GB 的原始文本在 Tokenize 之後,轉換為 Uint16 的二進制數據大約會佔用 150GB - 200GB 的磁碟空間。在兩張 RTX 5090 上運行 7B 模型時,使用 Memory Mapping (mmap) 是確保 GPU 不會因為等待 I/O 而閒置的最強方案。
Thumbnail
2026/03/04
96GB 的原始文本在 Tokenize 之後,轉換為 Uint16 的二進制數據大約會佔用 150GB - 200GB 的磁碟空間。在兩張 RTX 5090 上運行 7B 模型時,使用 Memory Mapping (mmap) 是確保 GPU 不會因為等待 I/O 而閒置的最強方案。
Thumbnail
看更多