NVIDIA nvbandwidth 是什么:GPU 带宽测试工具怎么用

基于 NVIDIA/nvbandwidth 官方仓库与 Release 页面,整理这个 GPU 带宽测试工具的定位、依赖、常用命令、多节点能力,以及最新 v0.9 更新点。

如果你最近在排查多张 NVIDIA GPU 之间的互联性能,或者想确认 PCIeNVLink、主机内存到显存之间的实际带宽,NVIDIA/nvbandwidth 是一个很值得知道的小工具。

它不是通用跑分软件,也不是大模型框架里的隐藏命令,而是 NVIDIA 开源出来、专门用于测量 GPU 相关内存拷贝带宽与延迟的工具。相比只看理论带宽,nvbandwidth 更适合回答一个实际问题:这台机器当前这组 GPU 和互联链路,真实能跑到多少带宽。

1. nvbandwidth 是做什么的

从官方 README 的定位看,nvbandwidth 是一个用于测量 NVIDIA GPU 带宽的命令行工具。

它重点关注的是各种 memcpy 模式下的传输表现,例如:

  • GPU -> GPU
  • CPU -> GPU
  • GPU -> CPU
  • 多节点 GPU 之间的传输

这类测试对下面几种场景尤其有用:

  • 排查多卡训练或推理时的互联瓶颈
  • 验证 NVLinkPCIeC2C 等链路的实际表现
  • 对比不同服务器、不同拓扑、不同驱动或 CUDA 版本下的传输差异
  • 做集群部署前的基础硬件验收

简单说,nvbandwidth 看的不是模型吞吐,而是更底层的“数据搬运能力”。

2. 它测的不是一个单点数字

很多人会把“带宽测试”理解成最后只得到一个分数,但 nvbandwidth 实际输出的信息更细。

它会按测试类型给出矩阵结果。比如在 device_to_device_memcpy_write_ce 这类测试里,输出会按 GPU 行列展示每一对设备之间的带宽。这样你不只知道“这台机器大概有多快”,还可以看出:

  • 哪两张卡之间速度特别高
  • 哪些卡之间明显受限于 PCIe
  • 某些 GPU 对之间是否存在异常低带宽
  • 多卡拓扑是否和预期一致

如果你在看八卡服务器、双路平台或者跨节点系统,这类矩阵结果会比单一平均值更有参考意义。

3. CESM 两类拷贝怎么理解

官方文档里把测试分成两类:

  • CE:基于 memcpy API 的 copy engine 拷贝
  • SM:基于 kernel 的拷贝

这两类结果不一定完全相同,因为它们代表的是不同拷贝路径。
如果你只是想看设备之间常规数据搬运的表现,通常会先关注 CE;如果你要研究更细的执行路径,再继续看 SM 会更合适。

此外,README 也说明了带宽结果默认取多次测试的中位数;新版还补充了统计波动信息,这对判断结果是否稳定会更有帮助。

4. 运行它需要什么环境

nvbandwidth 不是一个“下载即用”的纯二进制小工具,它需要标准的 CUDA 开发环境。

官方 README 当前给出的基本要求包括:

  • CUDA Toolkit 11.x 或更高版本
  • 支持 C++17 的编译器
  • CMake 3.20+,更推荐 3.24+
  • Boost program_options
  • 可用的 CUDA 设备与兼容驱动

如果你要跑多节点版本,要求会更高。当前 README 明确写到:

  • 多节点构建需要 CUDA Toolkit 12.3
  • 驱动需要 550 或更高
  • 需要 MPI
  • 需要配置 nvidia-imex 服务

所以它更像面向 Linux GPU 服务器和集群环境的工程工具,而不是给普通桌面用户随手装着玩的。

5. 单机版怎么编译和运行

单机版构建流程很直接:

1
2
cmake .
make

Ubuntu / Debian 上,官方还提供了一个 debian_install.sh 脚本,用来安装通用依赖并构建项目。

编译完成后,可以先看帮助:

1
./nvbandwidth -h

几个比较常用的参数包括:

  • -l:列出可用测试
  • -t:按测试名或索引运行指定测试
  • -p:按前缀批量运行测试
  • -b:设置 memcpy buffer 大小,默认 512 MiB
  • -i:设置测试迭代次数
  • -j:输出 JSON
  • -H:启用 huge pages 的主机内存分配

如果只是想先跑一轮默认测试,直接执行:

1
./nvbandwidth

如果只想测一个具体项目,例如某个设备到设备的拷贝:

1
./nvbandwidth -t device_to_device_memcpy_read_ce

6. 多节点支持是它比较特别的地方

nvbandwidth 不只是单机多卡测试工具,它还支持多节点场景。

从 README 看,多节点版本的构建方式是:

1
2
cmake -DMULTINODE=1 .
make

运行时通常要配合 mpirun,并按“每张 GPU 一个进程”的方式启动。
官方文档还要求所有参与测试的 rank 处在同一个 multinode clique 内,并建议在 MPI 环境里主要运行带 multinode 前缀的测试。

这一点说明它的定位明显偏向高性能计算和大规模 GPU 系统,而不只是工作站自测。

如果你手上是 NVLink 多节点部署、GB200/Grace Hopper 一类更复杂的系统,nvbandwidth 的价值会比普通消费级显卡环境大很多。

7. 新版 v0.9 更新了什么

截至 2026 年 4 月 24 日,GitHub Releases 页面显示 nvbandwidth 的最新版本是 v0.9,发布时间是 2026 年 4 月 8 日

这版比较值得注意的更新主要有:

  • 为带宽输出增加波动统计信息
  • 增加 host memory huge pages 支持(Windows 不启用)
  • 为设备到设备测试增加 pair sampling 选项
  • 补充 troubleshooting guide
  • 统一单机与多节点执行路径

另外还有两点工程层面的变化也很实用:

  • 改进 CUDA 架构检测,减少对实际 GPU 访问的依赖
  • CUDA Toolkit 13.0+ 场景弃用 Voltasm_70 / sm_72)支持

如果你之前只看过旧版资料,现在再回来看,v0.9 已经不只是“测一下带宽”的初始版本,而是朝着更适合自动化、排障和大规模系统测试的方向继续推进了。

8. 什么时候适合用它

nvbandwidth 最适合下面这些情况:

  • 你想确认多张 NVIDIA GPU 之间的真实互联带宽
  • 你怀疑某张卡被插在了受限的 PCIe 槽位
  • 你想比较 NVLink 和非 NVLink 路径的差异
  • 你在做多节点 GPU 集群部署,需要验证链路是否正常
  • 你想把测试结果接进自动化流程,输出 JSON

但如果你的目标只是看“训练快不快”或“推理 tokens/s 有多少”,那它不是直接答案。
这时你还需要配合训练框架、推理引擎或具体 workload 的实测一起看。

9. 可以怎么理解它的价值

很多 GPU 性能问题,本质都不是“算力不够”,而是数据没搬好。

比如:

  • GPU 之间没有走到预期链路
  • 跨 NUMA 节点访问导致速度下降
  • 某些卡对之间带宽异常
  • 跨节点通信配置不完整

这类问题如果只看 nvidia-smi、只看模型吞吐,往往不容易定位。
nvbandwidth 这种更底层、矩阵化的测试工具,恰好能把“链路层发生了什么”暴露出来。

所以你可以把它理解成:给 NVIDIA GPU 系统做带宽体检的命令行工具。

相关链接

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计