<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>NVIDIA on KnightLi的博客</title>
        <link>https://www.knightli.com/tags/nvidia/</link>
        <description>Recent content in NVIDIA on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 24 Apr 2026 14:41:35 +0800</lastBuildDate><atom:link href="https://www.knightli.com/tags/nvidia/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>NVIDIA nvbandwidth 是什么：GPU 带宽测试工具怎么用</title>
        <link>https://www.knightli.com/2026/04/24/nvidia-nvbandwidth-guide/</link>
        <pubDate>Fri, 24 Apr 2026 14:41:35 +0800</pubDate>
        
        <guid>https://www.knightli.com/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 支持（Windows 不启用）&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>
