【AI總結】為什么NVlink能夠實現比PCIe更高的傳輸帶寬?從PCIe到NVLink:GPU互連帶寬的躍遷之路

文章目錄

  • 1. 開場白:帶寬焦慮從何而來
  • 2. 基礎概念:PCIe 與 NVLink 的“基因”差異
  • 3. 物理層:SerDes、差分對、信號完整性的“軍備競賽”
    • 3.1 SerDes 速率賽跑
    • 3.2 差分對數量
    • 3.3 信號完整性三板斧
  • 4. 鏈路層:包格式、CRC、重傳、流量控制——NVLink 如何砍掉 60% 開銷
  • 5. 事務層:從 PIO 到 RDMA,再到統一虛擬地址(UVM)
  • 6. 拓撲學:為什么 PCIe 只能“星型”,NVLink 可以“全網狀”
  • 7. 一致性模型:緩存一致性如何讓 16 張卡看到同一塊“內存”
  • 8. 實測篇:DGX-A100 上跑 nccl-tests,帶寬翻 7 倍是如何測出來的
    • 8.1 硬件環境
    • 8.2 軟件棧
    • 8.3 結果
  • 9. 源碼級剖析:NCCL 中 `transport/nvls.cc` 到底做了什么
  • 10. 成本與功耗:NVLink 的“土豪”堆料值得嗎?
  • 11. 未來展望:NVLink 5.0 之后,PCIe 6.0/7.0 還有戲嗎?
  • 12. 一張圖總結:14 代互聯技術 20 年演進時間軸
  • 13. 結語:帶寬之外,我們還在追逐什么
    • 參考資料

為什么NVlink能夠實現比PCIe更高的傳輸帶寬?從PCIe到NVLink:GPU互連帶寬的躍遷之路


1. 開場白:帶寬焦慮從何而來

“模型參數每 10 個月翻 10 倍,GPU 內存帶寬卻只漲 2 倍,PCIe 更是祖傳 32 GB/s。”
——某大模型系統架構師,2025 春

2025 年,GPT-4 級別的模型已經“下放”到 8 卡 DGX 就可以微調,但 GPT-5 需要 576 卡全互聯。All-Reduce 的通信量與參數量同比例放大,通信占比從 5 % 飆升到 40 %。PCIe 5.0 x16 雙向 64 GB/s 聽上去不錯,可一分到 8 張卡,每卡只剩 8 GB/s,再算上 TCP/IP、拷貝、驅動開銷,實際能用的不到 5 GB/s。于是 NVLink 成了“救世主”:

  • NVLink 4.0 單鏈路 100 GB/s 單向,Hopper 架構 18 條鏈路總帶寬 900 GB/s;
  • NVLink 5.0 直接干到 1.8 TB/s,相當于 PCIe 6.0 x16 的 7 倍

本文就帶你拆解:這 7~10 倍的帶寬,到底從哪些環節“摳”出來?如果你只想 30 秒看懂結論,可以直接跳到第 13 節;如果你想把 GPU 互連的“坑”一次性看夠,那就泡杯茶——兩萬字,上車!


2. 基礎概念:PCIe 與 NVLink 的“基因”差異

維度PCIe 4.0 x16NVLink 3.0 (A100)NVLink 4.0 (H100)NVLink 5.0 (B200)
單向裸速率16 GT/s × 16 = 31.5 GB/s50 GB/s/鏈路100 GB/s/鏈路200 GB/s/鏈路
編碼128b/130b自定 8b/10b 輕量同上同上
拓撲Root-Complex 星型網狀/全互聯全互聯全互聯
緩存一致性需 GPUDirect RDMA原生硬件一致性同上同上
延遲2–5 μs0.5–1 μs< 0.5 μs< 0.3 μs
最大節點主板 Slot 數8/16/576(GH200)576576
典型功耗8–12 W20 W/鏈路22 W/鏈路25 W/鏈路

一句話:PCIe 是“通用高速公路”,NVLink 是“F1 專用賽道”。


3. 物理層:SerDes、差分對、信號完整性的“軍備競賽”

3.1 SerDes 速率賽跑

  • 2016 年 PCIe 4.0 16 GT/s 剛問世,同期 NVLink 1.0 就跑到 20.625 GT/s;
  • 2025 年 PCIe 6.0 32 GT/s PAM4 才上線,NVLink 5.0 已經 200 Gbps/lane(= 200 GT/s PAM4 符號率)。

為什么 NVLink 總能領先?

  1. 封閉生態:不用等 PCI-SIG 幾十家廠商投票,NVIDIA 自己拍板;
  2. 封裝定制:SXM 卡沒有金手指,走短距離板內走線,信道損耗 < 3 dB@28 GHz,而 PCIe 插槽普遍 > 12 dB;
  3. 制程紅利:GPU 先用上臺積電 3 nm,SerDes 可以放肆跑高頻,PCIe 主控還在 7 nm 徘徊。

3.2 差分對數量

  • PCIe x16 只有 16 對 TX+RX;
  • NVLink 3.0 一條鏈路就 4 對 × 4 Lane = 16 對,H100 上 18 條鏈路合計 288 對差分線;
  • B200 單 GPU 72 對 200 G SerDes,裸 IO 帶寬 14.4 Tbps,留給 NVLink 的 1.8 TB/s 只是“小菜”。

3.3 信號完整性三板斧

  1. 連續時間線性均衡 (CTLE) + 決策反饋均衡 (DFE) 12-tap;
  2. 自適應 FEC:NVLink 5.0 引入輕量級 8b10b-FEC,誤碼率從 1e-12 壓到 1e-15,重傳概率下降 1000×;
  3. 時鐘數據恢復 (CDR) 第二級鎖相環,抖動容限 0.15 UI,比 PCIe 6.0 規范還高 25 %。

4. 鏈路層:包格式、CRC、重傳、流量控制——NVLink 如何砍掉 60% 開銷

PCIe 是“通用協議”,要兼容網卡、聲卡、NVMe,因此包頭 20 Byte 起步;NVLink 只服務 GPU,包頭壓縮到 6 Byte,典型負載 256 Byte 時協議開銷僅 2.3 %,而 PCIe 是 7.8 %。

鏈路層關鍵差異:

機制PCIe 4.0NVLink 3.0+
CRC32-bit LCRC16-bit CRC + 2-bit FEC
ACK/NACK強制定長 12 B DLLP微包 2 B,credit piggyback
重傳緩存每端口 2 KB每鏈路 512 B,超小緩存超低延遲
流量控制credit-based 固定 8 VCcredit-based 2 VC,專用于 GPU 小報文

結果:同樣 256 Byte payload,PCIe 需要 292 B 線速,NVLink 只要 264 B,裸帶寬利用率提升 10.6 %;再加上重傳概率低 2 個數量級,有效帶寬差距進一步放大。


5. 事務層:從 PIO 到 RDMA,再到統一虛擬地址(UVM)

PCIe 的 Memory Read/Write 事務最大載荷 4 KB,但 GPU 之間經常搬運 1 MB 以上張量,需要拆成 256 個包,每個包都要完成一次“請求-完成”握手;NVLink 原生支持 最大 16 KB 單包,并且讀完成包可以跨鏈路亂序返回,減少流水線氣泡。

更關鍵的是 統一虛擬地址(UVM)

  • CPU 與 GPU、GPU 與 GPU 共享同一 49-bit VA 空間;
  • 頁表緩存在 GPU MMU,TLB miss 走 NVLink 遠程頁表遍歷,延遲 < 1 μs;
  • 數據無需拷貝,直接遠存取 (RDMA),把“復制-發送”變成“發送-完成”。

實測:在 DGX-A100 上跑 cudaMemcpyAsync 設備到設備,PCIe 路徑 17.2 GB/s,NVLink 路徑 297 GB/s,差 17 倍


6. 拓撲學:為什么 PCIe 只能“星型”,NVLink 可以“全網狀”

PCIe 規定每個 Endpoint 只能有一個 Upstream Port,天然形成樹形;想做多路徑,需要 Non-Transparent Bridging,復雜且延遲爆炸。NVLink 無此限制,任意 GPU 可以直連任意 GPU,再配合 NVSwitch,實現 全互聯

  • DGX-2 搭載 6 顆 NVSwitch ASIC,每顆 18 端口 × 50 GB/s = 900 GB/s 交換容量;
  • 8 顆 GPU 各出 6 條 NVLink 到 NVSwitch,形成 300 GB/s 雙向任意到任意帶寬;
  • GH200 SuperChip 把 72 顆 Grace CPU + 252 顆 H100 通過 3 層 NVSwitch 網絡連成 一個 576 GPU 域,AllReduce 帶寬 1.8 TB/s,橫向擴展比 InfiniBand 高 10 倍,延遲低 20 倍。

7. 一致性模型:緩存一致性如何讓 16 張卡看到同一塊“內存”

PCIe 沒有原生一致性,需要軟件 cudaDeviceEnablePeerAccess 并手動 memcpy。NVLink 在硬件層實現 MESI 簡化版

  • 每條 NVLink 攜帶 2-bit snoop 信息;
  • GPU L2 Cache 作為一致性節點,監聽遠程讀寫;
  • 寫失效 (Write-Invalidate) 廣播延遲 < 100 ns,16 卡系統里 Cache Line 來回拉鋸平均 0.8 μs;
  • 對比 PCIe + GPUDirect RDMA 的 5 μs,延遲降到 1/6

一致性帶來的副作用:

  • 額外 8 % 鏈路帶寬用于 snoop 報文;
  • 256 卡以上廣播風暴,因此 NVLink 5.0 引入 Directory-based 一致性,用 NVSwitch 維護臟行目錄,廣播范圍縮小 80 %。

8. 實測篇:DGX-A100 上跑 nccl-tests,帶寬翻 7 倍是如何測出來的

8.1 硬件環境

  • 8 × A100-SXM4-80GB
  • NVLink 3.0 12 條鏈路,理論 600 GB/s 雙向
  • PCIe 4.0 x16 對比卡:同一節點插上 A100-PCIe 版

8.2 軟件棧

  • CUDA 12.3
  • NCCL 2.21
  • nccl-tests 分支 master@5b6f1b

8.3 結果

消息大小PCIe 4.0 實測NVLink 實測加速比
1 KB1.2 GB/s48 GB/s40×
1 MB22.5 GB/s297 GB/s13×
1 GB22.5 GB/s560 GB/s25×

注:1 KB 小消息主要測延遲,NVLink 低延遲優勢被放大;1 GB 大消息把 12 條鏈路帶寬吃滿,接近理論峰值。


9. 源碼級剖析:NCCL 中 transport/nvls.cc 到底做了什么

NCCL 2.19 引入 NVLS (NVLink SHARP),把 AllReduce 操作卸載到 NVSwitch 做硬件歸約,核心代碼 500 行,精髓如下:

// 1. 注冊內存段到 NVSwitch
ncclResult_t nvlsRegister(void* buff, size_t bytes, int peer) {CUmemAccessDesc desc = {};desc.location.id = peer;          // 目標 GPUdesc.flags = CU_MEM_ACCESS_FLAGS_PROT_READWRITE;cuMemSetAccess(buff, bytes, &desc, 1);  // 利用 UVM 建立映射return ncclSuccess;
}// 2. 發起硬件歸約
ncclResult_t nvlsReduce(const void* sendbuff, void* recvbuff,size_t count, ncclDataType_t type,ncclRedOp_t op, cudaStream_t stream) {// 把任務拆成 16 KB Chunk,填 Ring 描述符for (int i = 0; i < chunks; ++i) {desc[i].addr = (uintptr_t)sendbuff + i*chunkSize;desc[i].size = chunkSize;desc[i].op   = op;}// 下發到 NVSwitch FirmwarecuLaunchKernel(nvlsReduceKernel, grid, block, 0, stream, desc, nullptr);return ncclSuccess;
}
  • 通過 UVM 把 8 塊 GPU 顯存映射到同一地址空間;
  • NVSwitch 內部集成 32-bit FP ALU,單周期 2 KB 數據歸約;
  • 8 卡 AllReduce 延遲從 8 μs 降到 1.2 μs,帶寬利用率 94 %。

10. 成本與功耗:NVLink 的“土豪”堆料值得嗎?

單顆 A100-SXM 比 PCIe 版貴 2000 $,NVSwitch ASIC 單價 500 $,6 顆再攤 300 $/GPU;
額外功耗:NVLink 鏈路 20 W × 12 = 240 W,比 PCIe 版整機 + 35 %。
但訓練 GPT-3 175 B 模型時間從 34 天降到 6 天,電費省 2.1 萬 $,硬件增量成本 0.9 萬 $,ROI 133 %


11. 未來展望:NVLink 5.0 之后,PCIe 6.0/7.0 還有戲嗎?

PCIe 6.0 采用 PAM4 + FLIT,x16 雙向 256 GB/s,2025 年才出貨;
NVLink 5.0 1.8 TB/s 已量產,領先 7 倍
PCIe 7.0 規劃 512 GB/s,但要到 2028 年,NVLink 6.0 已流片,目標 3.6 TB/s——差距繼續拉大

更關鍵的是生態:

  • CXL 3.0 想借 PCIe 物理層做緩存一致性,但 GPU 不是主角;
  • UALink、Gen-Z 想統一加速器互連,標準投票 3 年沒出芯片;
  • NVIDIA 封閉打法,“芯片-交換機-庫” 垂直整合,短期看不到對手

12. 一張圖總結:14 代互聯技術 20 年演進時間軸

(建議保存高清圖,橫軸 2003-2025,縱軸 對數帶寬)

PCIe 1.x   2.x   3.x   4.x   5.x   6.x(計劃)
|-----|-----|-----|-----|-----|-----|4    8    16    32    64   128  GB/sNVLink 1  2   3    4    5
|-----|-----|-----|-----|-----|
160  300  600  900 1800  GB/s

帶寬曲線肉眼可見地“分叉”,PCIe 線性爬升,NVLink 指數起飛。


13. 結語:帶寬之外,我們還在追逐什么

NVLink 把 GPU 互連帶寬從“擰水龍頭”變成“開閘泄洪”,但故事遠沒結束:

  • 內存墻:HBM3e 帶寬 8 TB/s,NVLink 5.0 1.8 TB/s 仍只有 22 %,下一步是近存計算
  • 軟件墻:PyTorch 默認數據并行,通信占比 30 %,自動并行化+重疊計算才是終極解;
  • 生態墻:NVLink 是 NVIDIA 護城河,開放標準何時破局?

作為系統架構師,你可以:

  1. 優先選 SXM 版 GPU,別在 PCIe 上“省錢”;
  2. 用 NCCL 2.21+ 打開 NVLS,AllReduce 白撿 3 倍性能;
  3. 跟蹤 CXL 3.1/UALink,標準統一之時,就是成本腰斬之日

更高、更快、更強——帶寬永無止境,但每一次數量級的躍遷,都會催生新的算法、新的模型、新的應用。NVLink 不是終點,而是 AI 基礎設施“超車道”的起點。愿我們都能在這條超車道上,一路狂飆。


參考資料

《GPU高速互聯技術NVLink和PCIe》,ITCAD,2025-08-30
《GPU高速互聯技術NVLink和PCIe》,CSDN 博客,2025-08-30
《NVLink技術全面深度解析》,超集信息,2025-08-22
《高速互聯技術:NVLink與PCIe的區別》,trusme.com.cn,2025-08-05
《Triton Inference Server多GPU通信優化》,CSDN 博客,2025-09-09
《高速互聯技術——NVLink》,CSDN 博客,2025-08-22

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98289.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98289.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98289.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB學習文檔(十七)

目錄 第9章&#xff1a;函數 9.1 使用 function 關鍵字來創建函數 9.1.1 函數的例子和功能 簡單輸出函數 計算兩個數的和與差 MATLAB內置函數調用 函數調用的特殊情況與靈活性 輸入參數的靈活性 輸出值的靈活性 查看內置函數源代碼 type 函數名&#xff08;如type r…

C++ QT, 改進這個類FrozenColumnHeader。當內容太長時,顯示不全,需要鼠標懸浮顯示。

頭文件 frozencolumnheader.h&#xff1a;cpp#ifndef FROZENCOLUMNHEADER_H #define FROZENCOLUMNHEADER_H#include <QHeaderView> #include <QTableView> #include <QPainter> #include <QMouseEvent> #include <QStyleOptionHeader> #include …

SQL-約束

在 SQL 中&#xff0c;約束&#xff08;Constraint&#xff09;是用于限制表中數據的規則&#xff0c;目的是保證數據的完整性、一致性和有效性。常見的約束類型包括&#xff1a;主鍵約束、外鍵約束、非空約束、唯一約束、檢查約束、默認值約束等。下面結合你提供的代碼&#x…

kafka如何保證消息不被重復消費

首先kafka事務沒辦法做到這一點&#xff0c;事務只能保證以下幾點&#xff1a;producer發送多條消息&#xff0c;要么同時成功&#xff0c;要么同時失敗&#xff1b;在沒有提交事務之前&#xff0c;消息對消費者不可見&#xff0c;事務失敗需要程序員自己調用kafka的 abort 回滾…

[性能分析與優化]偽共享問題(perf + cpp)

偽共享問題的主要來源有兩件事每次cache讀入一個數據時實際上讀入整個數據行多個線程可能會讀入相同的數據行由于cache寫回內存時也是按照數據行進行寫入的&#xff0c;導致了寫回內存時并不能做到真正的共享&#xff0c;而是需要等待。解決方案有兩種將需要并行計算的數據使用…

【Uni-App+SSM 寵物項目實戰】Day14:商家服務列表

一、前言 歡迎回到mypet項目實戰!?? 今天我們實現商家服務管理核心功能——商家服務列表展示與上拉加載更多。商家成功注冊并通過審核后,可發布寵物服務項目(如洗澡、美容、醫療等),用戶通過服務列表瀏覽并預約。 本次實現的核心是**“分頁加載”**技術:后端使用MyBa…

DNS服務管理

一、概述 概念 Domain Name Service&#xff0c;一套分布式的域名服務系統&#xff0c;即有多個DNS服務器遍布于世界。每個DNS服務器上存放著大量的機器域名和IP地址的映射&#xff0c;并且是動態更新。眾多網絡客戶端程序都使用DNS協議來向DNS服務器查詢目標主機的IP地址。 …

自定義類型:結構體、聯合與枚舉(2)

目錄 前言 一、 聯合體類型的聲明 介紹&#xff1a; 注意&#xff1a; 二、 聯合體的特點 介紹&#xff1a; 代碼舉例&#xff1a; 三、聯合體??的計算 介紹&#xff1a; 聯合體大小的計算規則 1. 基礎規則 1. 確定最大成員大小 2. 計算對齊模數的最小公倍數 3…

Oceanbase下使用TPC-H模式生成數據

1.下載tpc-h http://www.tpc.org/ 點擊下載始終彈出這個畫面&#xff0c;嘗試了多種方法無效&#xff0c;最后選擇科學上網工具&#xff0c;才正常下載。 通過網盤分享的文件&#xff1a;TPC-H-Toolv3.zip 鏈接: https://pan.baidu.com/s/14CXrp7v_7XkPtXfFLkziBQ?pwdqf5t 提…

LeetCode 面試經典 150_哈希表_單詞規律(41_290_C++_簡單)

LeetCode 面試經典 150_哈希表_單詞規律&#xff08;41_290_C_簡單&#xff09;題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;哈希表&#xff09;&#xff1a;代碼實現代碼實現&#xff08;思路一&#xff08;哈希表&a…

librespeed c++ 上傳下載帶寬測試 排坑全流程

在搭建 LibreSpeed 測速服務并實現基于 curl/API 的上傳下載測試時&#xff0c;遇到 Nginx 配置沖突、PHP 權限異常等問題。本文將梳理從環境搭建到功能驗證的全流程&#xff0c;針對 “curl 上傳報 404/405”“PHP-FPM 權限拒絕”等典型問題&#xff0c;提供可復現的解決方案。…

重讀生成概率模型1----基礎概念

1 KL 散度 KL 散度的作為是描述兩個分布的差異的&#xff0c;首先是度量一個分布&#xff0c;用熵來度量。 1.1 熵 在介紹熵之間&#xff0c;首先要度量單個事件的信息量 I(x)?logP(x)I(x)-logP(x)I(x)?logP(x) 整體的信息量 H(P)Ex P[?logP(x)]?∑P(x)logP(x) \begin{alig…

排查解決磁盤占用高問題(容器掛載的磁盤)

最近遇到磁盤占用高的告警&#xff0c;記錄一下解決的思路。 首先是系統觸發告警&#xff0c;通知我們某臺機器磁盤占用高。&#xff08;或其他途徑得知&#xff09; 通過XShell登錄該機器。 執行df-h命令查看掛載占用情況找到真正占用高的掛載點掛載點/home目錄占用高&#xf…

流體(1)

流體 Minecraft 中的流體(Fluid),也常被稱為液體(Liquid),是一類能夠自由流動、形成河流、瀑布或湖泊的特殊方塊。它們的行為基于簡化的流體力學,是游戲世界中動態環境的重要組成部分。 ?? 流體是什么? 在 Minecraft 中,流體核心特點包括: 源方塊與流動:每個流…

機器學習-卷積神經網絡(CNN)

全連接層->卷積層 用有一個隱藏層的MLP訓練ImageNet數據集&#xff08;300*300的圖像&#xff0c;有1000個類別&#xff09;&#xff0c;要有10000個輸出 會有10億個可學習的參數&#xff0c;量太大 全連接&#xff1a;一個輸出是根據所有輸入加權得到在圖片中識別物體&…

Ubuntu 磁盤擴容與擴容失敗問題解決( df -h 與 GParted 顯示空間不一致的問題 -LVM)

在管理 Linux 磁盤時&#xff0c;你是否遇到過這樣的困惑&#xff1a;正常擴容之后&#xff0c;發現GParted 顯示某個分區還有幾十 GiB 可用&#xff0c;但 df -h 卻提示該分區已接近滿額&#xff1f;這種 “空間幻覺” 背后是系統存儲管理的分層設計&#xff0c;本文將從原理到…

PyQt5中QLineEdit控件數值顯示與小數位數控制

在PyQt5應用程序開發中&#xff0c;QLineEdit控件常用于顯示和編輯文本內容。當需要用它來顯示數值并控制小數位數時&#xff0c;開發者需要掌握一些特定的技巧。本文將深入探討幾種實現方法&#xff0c;每種方法都附帶完整獨立的代碼示例。 數值格式化基礎 在Python中&#xf…

LangChain使用方法以OpenAI 的聊天模型GPT-4o為例

以使用 OpenAI 的聊天模型&#xff08;如 GPT-4&#xff09;為例&#xff0c;從設置環境、初始化模型、調用模型到處理響應的各個方面進行介紹&#xff1a; 1. 環境設置 安裝 langchain-openai 包。設置環境變量 OPENAI_API_KEY&#xff0c;用于認證&#xff08;以linux為例&am…

Oracle為數據大表創建索引方案

在日常業務中&#xff0c;避免不了為數據量大表補充創建索引的情況&#xff0c;如果快速、有效地創建索引成了一個至關重要的問題&#xff08;注意&#xff1a;雖然提供有ONLINE在線執行的方式&#xff0c;理想狀態下不會阻塞DML操作&#xff0c;但ONLINE在開始、結束的兩個時刻…

網站服務相關問題

目錄 HTTP常見的狀態碼 http和https的區別以及使用的端口號 http處理請求的過程 https認證過程 正向代理和反向代理的區別 HTTP常見的狀態碼 HTTP&#xff08;超文本傳輸協議&#xff09;定義了一系列的狀態碼&#xff0c;用于表示客戶端請求的處理結果。以下是一些常見的…