<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>效能測試 on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6/</link>
        <description>Recent content in 效能測試 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 24 Apr 2026 14:41:35 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>NVIDIA nvbandwidth 是什麼：GPU 頻寬測試工具怎麼用</title>
        <link>https://www.knightli.com/zh-tw/2026/04/24/nvidia-nvbandwidth-guide/</link>
        <pubDate>Fri, 24 Apr 2026 14:41:35 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/04/24/nvidia-nvbandwidth-guide/</guid>
        <description>&lt;p&gt;如果你最近在排查多張 &lt;code&gt;NVIDIA GPU&lt;/code&gt; 之間的互連效能，或是想確認 &lt;code&gt;PCIe&lt;/code&gt;、&lt;code&gt;NVLink&lt;/code&gt;、主機記憶體到顯存之間的實際頻寬，&lt;code&gt;NVIDIA/nvbandwidth&lt;/code&gt; 是一個很值得知道的小工具。&lt;/p&gt;
&lt;p&gt;它不是通用跑分軟體，也不是大模型框架裡的隱藏命令，而是 NVIDIA 開源出來、專門用來測量 GPU 相關記憶體拷貝頻寬與延遲的工具。相比只看理論頻寬，&lt;code&gt;nvbandwidth&lt;/code&gt; 更適合回答一個實際問題：&lt;strong&gt;這台機器目前這組 GPU 和互連鏈路，實際到底能跑出多少頻寬。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-nvbandwidth-是做什麼的&#34;&gt;1. &lt;code&gt;nvbandwidth&lt;/code&gt; 是做什麼的
&lt;/h2&gt;&lt;p&gt;從官方 README 的定位來看，&lt;code&gt;nvbandwidth&lt;/code&gt; 是一個用來測量 &lt;code&gt;NVIDIA GPU&lt;/code&gt; 頻寬的命令列工具。&lt;/p&gt;
&lt;p&gt;它重點關注的是各種 &lt;code&gt;memcpy&lt;/code&gt; 模式下的傳輸表現，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPU -&amp;gt; GPU&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CPU -&amp;gt; GPU&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GPU -&amp;gt; CPU&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;多節點 GPU 之間的傳輸&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類測試特別適合下面幾種場景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;排查多卡訓練或推理時的互連瓶頸&lt;/li&gt;
&lt;li&gt;驗證 &lt;code&gt;NVLink&lt;/code&gt;、&lt;code&gt;PCIe&lt;/code&gt;、&lt;code&gt;C2C&lt;/code&gt; 等鏈路的實際表現&lt;/li&gt;
&lt;li&gt;比較不同伺服器、不同拓撲、不同驅動或 CUDA 版本下的傳輸差異&lt;/li&gt;
&lt;li&gt;做叢集部署前的基礎硬體驗收&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;簡單說，&lt;code&gt;nvbandwidth&lt;/code&gt; 看的不是模型吞吐，而是更底層的「資料搬運能力」。&lt;/p&gt;
&lt;h2 id=&#34;2-它測的不是單一分數&#34;&gt;2. 它測的不是單一分數
&lt;/h2&gt;&lt;p&gt;很多人會把「頻寬測試」理解成最後只得到一個分數，但 &lt;code&gt;nvbandwidth&lt;/code&gt; 實際輸出的資訊會更細。&lt;/p&gt;
&lt;p&gt;它會依照測試類型給出矩陣結果。比如在 &lt;code&gt;device_to_device_memcpy_write_ce&lt;/code&gt; 這類測試裡，輸出會按 GPU 的行列展示每一對裝置之間的頻寬。這樣你不只知道「這台機器大概有多快」，還可以看出：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪兩張卡之間速度特別高&lt;/li&gt;
&lt;li&gt;哪些卡之間明顯受限於 &lt;code&gt;PCIe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;某些 GPU 配對之間是否存在異常低頻寬&lt;/li&gt;
&lt;li&gt;多卡拓撲是否符合預期&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你在看八卡伺服器、雙路平台或跨節點系統，這類矩陣結果通常會比單一平均值更有參考意義。&lt;/p&gt;
&lt;h2 id=&#34;3-ce-和-sm-兩類拷貝怎麼理解&#34;&gt;3. &lt;code&gt;CE&lt;/code&gt; 和 &lt;code&gt;SM&lt;/code&gt; 兩類拷貝怎麼理解
&lt;/h2&gt;&lt;p&gt;官方文件把測試分成兩類：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CE&lt;/code&gt;：基於 &lt;code&gt;memcpy&lt;/code&gt; API 的 copy engine 拷貝&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SM&lt;/code&gt;：基於 kernel 的拷貝&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這兩類結果不一定會完全一樣，因為它們代表的是不同的拷貝路徑。&lt;br&gt;
如果你只是想看裝置之間的一般資料搬運表現，通常會先關注 &lt;code&gt;CE&lt;/code&gt;；如果你要研究更細的執行路徑，再繼續看 &lt;code&gt;SM&lt;/code&gt; 會更合適。&lt;/p&gt;
&lt;p&gt;另外，README 也說明帶寬結果預設取多次測試的中位數；新版又補上了統計波動資訊，這對判斷結果是否穩定會更有幫助。&lt;/p&gt;
&lt;h2 id=&#34;4-執行它需要什麼環境&#34;&gt;4. 執行它需要什麼環境
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nvbandwidth&lt;/code&gt; 不是那種「下載就能直接跑」的純二進位小工具，它需要標準的 CUDA 開發環境。&lt;/p&gt;
&lt;p&gt;官方 README 目前列出的基本要求包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CUDA Toolkit 11.x&lt;/code&gt; 或更高版本&lt;/li&gt;
&lt;li&gt;支援 &lt;code&gt;C++17&lt;/code&gt; 的編譯器&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CMake 3.20+&lt;/code&gt;，更推薦 &lt;code&gt;3.24+&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Boost program_options&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;可用的 &lt;code&gt;CUDA&lt;/code&gt; 裝置與相容驅動&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你要跑多節點版本，要求會更高。當前 README 明確寫到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多節點建置需要 &lt;code&gt;CUDA Toolkit 12.3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;驅動需要 &lt;code&gt;550&lt;/code&gt; 或更高&lt;/li&gt;
&lt;li&gt;需要 &lt;code&gt;MPI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;需要設定 &lt;code&gt;nvidia-imex&lt;/code&gt; 服務&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以它更像是面向 Linux GPU 伺服器與叢集環境的工程工具，而不是給一般桌面使用者隨手裝來玩的。&lt;/p&gt;
&lt;h2 id=&#34;5-單機版怎麼編譯和執行&#34;&gt;5. 單機版怎麼編譯和執行
&lt;/h2&gt;&lt;p&gt;單機版建置流程很直接：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 &lt;code&gt;Ubuntu&lt;/code&gt; / &lt;code&gt;Debian&lt;/code&gt; 上，官方還提供了一個 &lt;code&gt;debian_install.sh&lt;/code&gt; 腳本，用來安裝通用依賴並建置專案。&lt;/p&gt;
&lt;p&gt;編譯完成後，可以先看幫助：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./nvbandwidth -h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;幾個比較常用的參數包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;：列出可用測試&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-t&lt;/code&gt;：按測試名稱或索引執行指定測試&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;：按前綴批次執行測試&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b&lt;/code&gt;：設定 memcpy buffer 大小，預設 &lt;code&gt;512 MiB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt;：設定測試迭代次數&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-j&lt;/code&gt;：輸出 &lt;code&gt;JSON&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-H&lt;/code&gt;：啟用 huge pages 的主機記憶體配置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只是想先跑一輪預設測試，直接執行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./nvbandwidth
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果只想測一個具體項目，例如某個裝置到裝置的拷貝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./nvbandwidth -t device_to_device_memcpy_read_ce
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;6-多節點支援是它比較特別的地方&#34;&gt;6. 多節點支援是它比較特別的地方
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nvbandwidth&lt;/code&gt; 不只是單機多卡測試工具，它也支援多節點場景。&lt;/p&gt;
&lt;p&gt;從 README 來看，多節點版本的建置方式是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake -DMULTINODE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;執行時通常要搭配 &lt;code&gt;mpirun&lt;/code&gt;，並以「每張 GPU 一個進程」的方式啟動。&lt;br&gt;
官方文件也要求所有參與測試的 rank 都處在同一個 multinode clique 內，並建議在 MPI 環境下主要執行帶 &lt;code&gt;multinode&lt;/code&gt; 前綴的測試。&lt;/p&gt;
&lt;p&gt;這一點說明它的定位明顯更偏向高效能運算與大型 GPU 系統，而不只是工作站自測。&lt;/p&gt;
&lt;p&gt;如果你手上是 &lt;code&gt;NVLink&lt;/code&gt; 多節點部署、&lt;code&gt;GB200&lt;/code&gt; / &lt;code&gt;Grace Hopper&lt;/code&gt; 這類更複雜的平台，&lt;code&gt;nvbandwidth&lt;/code&gt; 的價值會比一般消費級顯卡環境大得多。&lt;/p&gt;
&lt;h2 id=&#34;7-新版-v09-更新了什麼&#34;&gt;7. 新版 &lt;code&gt;v0.9&lt;/code&gt; 更新了什麼
&lt;/h2&gt;&lt;p&gt;截至 &lt;strong&gt;2026 年 4 月 24 日&lt;/strong&gt;，GitHub Releases 頁面顯示 &lt;code&gt;nvbandwidth&lt;/code&gt; 的最新版本是 &lt;strong&gt;&lt;code&gt;v0.9&lt;/code&gt;&lt;/strong&gt;，發布時間是 &lt;strong&gt;2026 年 4 月 8 日&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;這一版比較值得注意的更新主要有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;為頻寬輸出增加波動統計資訊&lt;/li&gt;
&lt;li&gt;增加 host memory huge pages 支援（&lt;code&gt;Windows&lt;/code&gt; 不啟用）&lt;/li&gt;
&lt;li&gt;為裝置到裝置測試增加 pair sampling 選項&lt;/li&gt;
&lt;li&gt;補充 troubleshooting guide&lt;/li&gt;
&lt;li&gt;統一單機與多節點執行路徑&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;另外還有兩點工程層面的變化也很實用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;改進 CUDA 架構檢測，降低對實際 GPU 存取的依賴&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;CUDA Toolkit 13.0+&lt;/code&gt; 場景下棄用 &lt;code&gt;Volta&lt;/code&gt;（&lt;code&gt;sm_70&lt;/code&gt; / &lt;code&gt;sm_72&lt;/code&gt;）支援&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你之前只看過舊版資料，現在再回來看，&lt;code&gt;v0.9&lt;/code&gt; 已經不只是「測一下頻寬」的初始版本，而是朝著更適合自動化、排障和大型系統測試的方向繼續推進了。&lt;/p&gt;
&lt;h2 id=&#34;8-什麼時候適合用它&#34;&gt;8. 什麼時候適合用它
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nvbandwidth&lt;/code&gt; 最適合下面這些情況：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你想確認多張 &lt;code&gt;NVIDIA GPU&lt;/code&gt; 之間的真實互連頻寬&lt;/li&gt;
&lt;li&gt;你懷疑某張卡被插在了受限的 &lt;code&gt;PCIe&lt;/code&gt; 插槽&lt;/li&gt;
&lt;li&gt;你想比較 &lt;code&gt;NVLink&lt;/code&gt; 和非 &lt;code&gt;NVLink&lt;/code&gt; 路徑的差異&lt;/li&gt;
&lt;li&gt;你在做多節點 GPU 叢集部署，需要驗證鏈路是否正常&lt;/li&gt;
&lt;li&gt;你想把測試結果接進自動化流程，輸出 &lt;code&gt;JSON&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但如果你的目標只是看「訓練快不快」或「推理 tokens/s 有多少」，那它不是直接答案。&lt;br&gt;
這時你還需要搭配訓練框架、推理引擎或具體 workload 的實測一起看。&lt;/p&gt;
&lt;h2 id=&#34;9-可以怎麼理解它的價值&#34;&gt;9. 可以怎麼理解它的價值
&lt;/h2&gt;&lt;p&gt;很多 GPU 效能問題，本質上都不是「算力不夠」，而是資料沒有搬好。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU 之間沒有走到預期的鏈路&lt;/li&gt;
&lt;li&gt;跨 NUMA 節點存取導致速度下降&lt;/li&gt;
&lt;li&gt;某些卡配對之間頻寬異常&lt;/li&gt;
&lt;li&gt;跨節點通訊配置不完整&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類問題如果只看 &lt;code&gt;nvidia-smi&lt;/code&gt;、只看模型吞吐，往往不容易定位。&lt;br&gt;
而 &lt;code&gt;nvbandwidth&lt;/code&gt; 這種更底層、矩陣化的測試工具，剛好能把「鏈路層實際發生了什麼」暴露出來。&lt;/p&gt;
&lt;p&gt;所以你可以把它理解成：&lt;strong&gt;給 NVIDIA GPU 系統做頻寬體檢的命令列工具。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;相關連結&#34;&gt;相關連結
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub 專案：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NVIDIA/nvbandwidth&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NVIDIA/nvbandwidth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Releases：&lt;a class=&#34;link&#34; href=&#34;https://github.com/NVIDIA/nvbandwidth/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NVIDIA/nvbandwidth/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
