如果你最近在排查多张 NVIDIA GPU 之间的互联性能,或者想确认 PCIe、NVLink、主机内存到显存之间的实际带宽,NVIDIA/nvbandwidth 是一个很值得知道的小工具。
它不是通用跑分软件,也不是大模型框架里的隐藏命令,而是 NVIDIA 开源出来、专门用于测量 GPU 相关内存拷贝带宽与延迟的工具。相比只看理论带宽,nvbandwidth 更适合回答一个实际问题:这台机器当前这组 GPU 和互联链路,真实能跑到多少带宽。
1. nvbandwidth 是做什么的
从官方 README 的定位看,nvbandwidth 是一个用于测量 NVIDIA GPU 带宽的命令行工具。
它重点关注的是各种 memcpy 模式下的传输表现,例如:
GPU -> GPUCPU -> GPUGPU -> CPU- 多节点 GPU 之间的传输
这类测试对下面几种场景尤其有用:
- 排查多卡训练或推理时的互联瓶颈
- 验证
NVLink、PCIe、C2C等链路的实际表现 - 对比不同服务器、不同拓扑、不同驱动或 CUDA 版本下的传输差异
- 做集群部署前的基础硬件验收
简单说,nvbandwidth 看的不是模型吞吐,而是更底层的“数据搬运能力”。
2. 它测的不是一个单点数字
很多人会把“带宽测试”理解成最后只得到一个分数,但 nvbandwidth 实际输出的信息更细。
它会按测试类型给出矩阵结果。比如在 device_to_device_memcpy_write_ce 这类测试里,输出会按 GPU 行列展示每一对设备之间的带宽。这样你不只知道“这台机器大概有多快”,还可以看出:
- 哪两张卡之间速度特别高
- 哪些卡之间明显受限于
PCIe - 某些 GPU 对之间是否存在异常低带宽
- 多卡拓扑是否和预期一致
如果你在看八卡服务器、双路平台或者跨节点系统,这类矩阵结果会比单一平均值更有参考意义。
3. CE 和 SM 两类拷贝怎么理解
官方文档里把测试分成两类:
CE:基于memcpyAPI 的 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. 单机版怎么编译和运行
单机版构建流程很直接:
|
|
在 Ubuntu / Debian 上,官方还提供了一个 debian_install.sh 脚本,用来安装通用依赖并构建项目。
编译完成后,可以先看帮助:
|
|
几个比较常用的参数包括:
-l:列出可用测试-t:按测试名或索引运行指定测试-p:按前缀批量运行测试-b:设置 memcpy buffer 大小,默认512 MiB-i:设置测试迭代次数-j:输出JSON-H:启用 huge pages 的主机内存分配
如果只是想先跑一轮默认测试,直接执行:
|
|
如果只想测一个具体项目,例如某个设备到设备的拷贝:
|
|
6. 多节点支持是它比较特别的地方
nvbandwidth 不只是单机多卡测试工具,它还支持多节点场景。
从 README 看,多节点版本的构建方式是:
|
|
运行时通常要配合 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+场景弃用Volta(sm_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 系统做带宽体检的命令行工具。