在编写 CUDA 应用程序时,要编写出色的代码,您需要关注的最重要的一点是数据传输性能。这适用于单 GPU 和多 GPU 系统。NVIDIA NVbandwidth 是了解 GPU 系统显存特性的工具之一。
在这篇博客文章中,我们将探讨 NVbandwidth 是什么、它的工作原理、它的主要特性,以及如何使用它来测试和评估您自己的 NVIDIA GPU 系统。本文面向需要衡量和验证 GPU 互连性能的 CUDA 开发者、系统架构师和 ML 基础架构工程师。
什么是 NVbandwidth?
NVbandwidth 是一款基于 CUDA 的工具,可使用复制引擎 (CE) 或内核复制方法测量不同链路上各种内存复制模式的带宽和延迟。它会报告系统上当前测量的带宽,提供有关 GPU 设置性能特征的宝贵见解。虽然现代 GPU 拥有惊人的计算能力,但其性能通常受限于数据在不同设备之间的移动速度:
- CPU 显存到 GPU 显存
- GPU 显存到 CPU 显存
- GPU 显存到 GPU 显存
了解这些性能特征有助于开发者:
- 评估系统性能
- 测量内存访问延迟
- 测量单节点和多节点 GPU 部署中的带宽
- 了解不同内存传输模式对性能的影响
- 诊断 CUDA 应用中的带宽瓶颈
- 针对特定工作负载优化内存传输模式
- 比较系统中多个 GPU 的带宽和延迟
- 性能监控和验证
动机
在 LLM 等现代 GPU 应用中,显存带宽是一个关键的性能因素。随着模型的规模和复杂性不断增加,高效的数据传输对于以下领域的最佳性能变得越来越重要:
- 模型加载和初始化: 快速的模型加载对于快速启动至关重要
- 推理性能: 影响实时响应能力
- 训练效率: 带宽限制会影响不同训练阶段的性能:
- 梯度更新
- 参数同步
NVBandwidth 的主要特性
全面的带宽测试
NVbandwidth 支持各种带宽测试,包括:
- 单向测试:
- 主机 – > 设备 (H2D)
- 设备 – > 主机 (D2H)
- 设备+ 设备 (D2D)
- 双向测试:
- 主机+ 设备
- 设备
- 多 GPU 测试:
- 一对一 (A2O)
- 一对一 (O2A)
- 全局到主机 (A2H)
- 托管至所有 (H2A)
- 多节点测试 (在构建时支持 MPI) :
- 用于跨集群节点边界测量带宽的测试
延迟测试
- 主机+ 设备延迟
- 设备+ 设备延迟
多种复制方法
该工具实现了两种主要的内存传输方法:
- 复制引擎 (CE):使用 CUDA 的内置异步内存复制函数
- 流多处理器 (SM):使用自定义 CUDA 内核通过 SM 执行复制
通过这种双重方法,您可以更全面地了解系统的带宽能力。
与拓扑无关的设计
NVbandwidth 旨在跨单节点或多节点系统内的不同 GPU 互连拓扑高效工作,无论是使用 NVLINK、NVLink C2C 还是 PCIe。它不需要用户明确了解系统的拓扑结构,因此在实践中在很大程度上与拓扑无关。
灵活的输出选项
结果显示为:
- 纯文本格式 (默认)
- JSON 格式 (使用 -j 选项)
系统要求
要使用 nvbandwidth,您需要:
- 支持 CUDA 的 NVIDIA GPU
- CUDA 工具包 (单节点版本为版本 11.X 或更高,多节点版本为版本 12.3)
- 与 CUDA 工具包版本兼容的 NVIDIA 显示驱动程序
- 兼容 C++ 17 的编译器 (适用于 Linux 的 GCC 7.x 或更高版本)
- CMake ( 3.20 或更高版本,推荐 3.24 及以上版本)
- 加速计划选项库
- 仅限多节点版本:
- CUDA 12.3 工具包和 550 驱动程序或更高版本
- MPI 安装
有关更详细的组装说明,感兴趣的用户可以参阅 README 说明。
使用 NVbandwidth
基本用法
要全面测量系统的互连带宽,只需运行:
./nvbandwidth |
假设您想使用复制引擎方法测量设备到设备的带宽,使用 1GiB 缓冲区和 10 次迭代,并以 JSON 格式输出结果:
./nvbandwidth -t device_to_device_memcpy_read_ce -b 1024 -i 10 -j |
输出示例
以下示例展示了运行主机到设备复制测试时的输出效果:
Running host_to_device_memcpy_ce.memcpy CE CPU(row) -> GPU(column) bandwidth (GB/s) 0 1 0 55.63 55.64SUM host_to_device_memcpy_ce 111.27COEFFICIENT_OF_VARIATION host_to_device_memcpy_ce 0.00NOTE: The reported results may not reflect the full capabilities of the platform.Performance can vary with software drivers, hardware clocks, and system topology. |
幕后:NVbandwidth 的工作原理
架构
NVbandwidth 采用模块化设计,将测试定义、内存操作和结果报告分离到不同的子系统中:
- CLI 界面:处理用户输入并编排测试执行
- 测试用例框架:提供用于定义不同带宽测试的标准接口
- 内存复制框架:执行内存操作的核心组件
- CUDA 内核:用于执行内存操作的专用 CUDA 内核
- 输出系统:格式化并显示测试结果 NVbandwidth.cpp:178-246
测量细节
该工具使用以下方法准确衡量性能:
- 首先,它会对旋转于主机内存中标志的旋转内核进行排队
- 旋转内核会在设备上旋转,直到所有测量事件全部排队
- 接下来,它会对开始事件、一定数量的 memcpy 迭代进行排队,最后是停止事件
最后,它会释放标志以开始测量
此过程可确保在测量通过互连进行的实际传输时,不会产生列队操作的用度。
双向带宽测试
对于双向测试,NVbandwidth 用于测量数据同时向两个方向流动时的带宽。请参见下图 1:

CE 副本
流 A (测量流) 对设备执行写入,而反向的流 B 则产生读取。
SM 副本
测试将启动内核副本,其中交替线程束以交替方向复制数据。
多节点操作
在多节点模式下运行 NVbandwidth 需要额外的设置和配置。
- 启动 NVIDIA 节点间内存交换服务 (IMEX) :
sudo systemctl start nvidia-imex.service |
在 /etc/nvidia-imex/nodes_config.cfg 中配置节点地址
2. 使用 MPI 运行:
mpirun --allow-run-as-root --map-by ppr:4:node --bind-to core -np 8 --report-bindings \ -q -mca btl_tcp_if_include enP5p9s0 --hostfile /etc/nvidia-imex/nodes_config.cfg ./nvbandwidth -p multinode |
NVIDIA 多节点 NVLink (MNNVL) 系统需要为构成 NVLink 域的所有节点提供完全配置且可操作的 IMEX 域。NVbandwidth 使用 MPI 来协调节点间的测量。请参见下图 2:

输出示例
以下示例展示了在多节点系统上测量节点之间的点对点性能时的输出效果。
Running multinode_device_to_device_memcpy_read_ce.memcpy CE GPU(row) -> GPU(column) bandwidth (GB/s) 0 1 2 3 4 5 6 7 0 N/A 397.39 397.44 397.59 397.50 397.52 397.66 397.55 1 397.65 N/A 397.35 397.46 397.48 397.53 397.53 397.59 2 397.65 397.35 N/A 397.57 397.39 397.55 397.53 397.50 3 397.57 397.37 397.35 N/A 397.50 397.50 397.52 397.53 4 397.68 397.30 397.44 397.55 N/A 397.53 397.52 397.52 5 397.66 397.26 397.48 397.46 397.52 N/A 397.50 397.59 6 397.68 397.39 397.48 397.59 397.52 397.44 N/A 397.61 7 397.68 397.41 397.42 397.48 397.52 397.50 397.53 N/A |
NV 带宽用例
性能优化
通过了解系统的带宽特性,您可以优化 CUDA 应用,以便更好地利用可用带宽。例如,对于您的特定硬件配置,您可能会发现某些传输模式比其他传输模式更高效。
系统评估和测试
NVbandwidth 提供了一种标准化的方法来衡量和比较不同系统的带宽性能,这对于测试和系统评估非常重要。
故障排除
如果您的 CUDA 应用程序遇到性能问题,NVbandwidth 可以帮助确定带宽限制是否是促成问题的因素。NVbandwidth 报告特定系统配置上当前测量的带宽。性能结果可能会因多个因素而异,例如 GPU 型号、互连生成、当前频率和系统配置的其他方面。
硬件验证: 在安装新 GPU、升级驱动程序或更改系统后,NVbandwidth 可以验证内存带宽性能是否符合性能预期。这有助于识别可能影响应用程序性能的硬件问题、驱动程序问题或配置错误。
性能回归测试:在部署新软件版本或系统更新时,NVbandwidth 可提供检测性能回归的基准。通过比较更改前后的带宽测量值,您可以快速确定更新是否对系统性能产生了负面影响。
深入了解
NVbandwidth 是测量和理解 NVIDIA GPU 系统带宽特征不可或缺的工具。它提供全面的测试套件、灵活的配置选项以及对单节点和多节点部署的支持,为优化 CUDA 应用、评估系统性能和故障排除问题提供宝贵见解。
通过利用 NVbandwidth,您可以做出明智的决策,更大限度地提高 CUDA 应用程序的性能,并确保在 GPU 设置中实现出色的数据传输功能。随着 GPU 集群的规模和复杂性不断发展,NVbandwidth 也在不断提高,解决了带宽测量和分析 (包括测试性能可扩展性) 方面的新挑战。注
如需了解更多详情,请探索这些其他资源。
要开始优化 GPU 系统的性能,请立即下载并试用 NVbandwidth!