rocm_bandwidth_test提供的预设测试集还是比较多的,如何使用也需一些时间理解。博主花了大量时间进行了实测和分析,现将使用心得分享给大家。
1. 如何发现可用的参数和子命令
1.1 查看主命令帮助
/your path/rocm-bandwidth-test --help
输出:
Usage: [OPTIONS] SUBCOMMAND
SUBCOMMANDS:
plugin - Plugin: subcommand
run - Run a plugin
1.2 查看所有内置插件
/your path/rocm-bandwidth-test plugin -i
已注册的插件:
-
Hello - 演示插件
- 版本: 0.0.1
- 路径:
/your path/lib/rocm_bandwidth_test/plugins/amd_hello.amdplug
-
tb (TransferBench) - 传输带宽测试插件 ⭐
- 版本: 1.0.0 (v1.64.00)
- 路径:
/your path/lib/rocm_bandwidth_test/plugins/transferbench.amdplug - 作者: Linux System Tools Team (MLSE Linux) @AMD
2. TransferBench (tb) 插件用法详解
基本用法
rocm-bandwidth-test run tb <preset> [N]
参数说明:
preset: 预设基准测试名称(见下文)N: (可选)每次传输的字节数- 默认值: 268435456 字节 (256 MB)
- 必须是4字节的倍数
- 如果设为0,将测试一系列大小
- 可以使用后缀:
K(KB),M(MB),G(GB)
示例:
# 使用默认大小
rocm-bandwidth-test run tb a2a
# 指定传输大小为1GB
rocm-bandwidth-test run tb a2a 1G
# 指定传输大小为512MB
rocm-bandwidth-test run tb a2a 512M
# 自动测试多种大小
rocm-bandwidth-test run tb a2a 0
3. 所有可用的预设基准测试
3.1. a2a (All-to-All)
名称: a2a
描述: 测试所有GPU设备对之间的并行传输
rocm-bandwidth-test run tb a2a
测试内容:
- 所有GPU对之间的双向传输
- 并行执行
- 可通过环境变量控制(A2A_DIRECT, A2A_LOCAL等)
相关环境变量:
A2A_DIRECT- 控制是否只测试直连GPUA2A_LOCAL- 控制是否包含本地传输A2A_MODE- 传输模式NUM_GPU_DEVICES- GPU数量限制
3.2. a2a_n (All-to-All with NIC)
名称: a2a_n
描述: 使用最近NIC的RDMA传输测试所有GPU对
rocm-bandwidth-test run tb a2a_n
适用场景:
- 多节点GPU系统
- 有InfiniBand或RoCE网卡
- 测试GPU到NIC的RDMA传输
3.3. a2asweep
名称: a2asweep
描述: 基于GFX的all-to-all传输,扫描不同的CU和GFX展开计数
rocm-bandwidth-test run tb a2asweep
测试内容:
- 不同CU(Compute Unit)配置
- 不同GFX内核展开因子
- 性能调优参考数据
相关环境变量:
NUM_SUB_EXEC- CU数量GFX_UNROLL- 展开因子
3.4. healthcheck
名称: healthcheck
描述: 简单的带宽健康检查
rocm-bandwidth-test run tb healthcheck
限制:
- ⚠️ 仅支持 MI300X 系列
- 快速验证系统带宽是否正常
3.5. one2all
名称: one2all
描述: 测试从一个GPU到所有其他GPU的并行传输子集
# 默认(至少需要2个GPU)
rocm-bandwidth-test run tb one2all
# 指定使用2个GPU
NUM_GPU_DEVICES=2 rocm-bandwidth-test run tb one2all
测试内容:
- 一对多传输模式
- 测试源GPU的输出带宽
- 所有子集组合
相关环境变量:
NUM_GPU_DEVICES- 参与测试的GPU数量
3.6. p2p (Peer-to-Peer)
名称: p2p
描述: 点对点设备内存带宽测试
rocm-bandwidth-test run tb p2p
测试内容:
- GPU之间的直接内存传输
- 单向和双向带宽
- Peer-to-peer访问性能
适用场景:
- 测试GPU间peer access能力
- 验证XGMI/PCIe连接性能
3.7. rsweep (Random Sweep)
名称: rsweep
描述: 随机扫描传输集合
# 需要设置时间限制
SWEEP_TIME_LIMIT=60 rocm-bandwidth-test run tb rsweep
测试内容:
- 随机选择传输配置
- 压力测试
- 发现边缘情况
相关环境变量:
SWEEP_TIME_LIMIT- 扫描时间限制(秒)
3.8. scaling
名称: scaling
描述: 从一个GPU到其他设备的扩展测试
rocm-bandwidth-test run tb scaling
测试内容:
- 测试随GPU数量增加的带宽扩展性
- 1 GPU, 2 GPUs, 3 GPUs… 的性能曲线
3.9. schmoo
名称: schmoo
描述: 本地/远程读/写/复制的扩展测试
# 至少需要2个GPU
rocm-bandwidth-test run tb schmoo
测试内容:
- 本地操作 (GPU -> GPU本身)
- 远程操作 (GPU A -> GPU B)
- 读操作性能
- 写操作性能
- 复制操作性能
注意:
- 单GPU系统会跳过此测试
3.10. sweep
名称: sweep
描述: 有序扫描传输集合
# 建议设置时间限制
SWEEP_TIME_LIMIT=60 rocm-bandwidth-test run tb sweep
测试内容:
- 系统地遍历所有传输配置
- 完整的性能表征
相关环境变量:
SWEEP_TIME_LIMIT- 扫描时间限制(秒)
预设测试快速对比
| 测试名称 | GPU要求 | 主要用途 | 测试时长 | 推荐度 |
|---|---|---|---|---|
a2a | 1+ | 全面带宽测试 | 短 | ⭐⭐⭐⭐⭐ |
a2a_n | 1+ NIC | 网络RDMA测试 | 短 | ⭐⭐⭐ |
a2asweep | 1+ | 性能调优 | 长 | ⭐⭐⭐ |
healthcheck | 1 (MI300X) | 快速验证 | 极短 | ⭐⭐⭐⭐ |
one2all | 2+ | 一对多测试 | 短 | ⭐⭐⭐⭐ |
p2p | 2+ | Peer访问测试 | 短 | ⭐⭐⭐⭐ |
rsweep | 1+ | 随机压力测试 | 可配置 | ⭐⭐⭐ |
scaling | 1+ | 扩展性测试 | 中 | ⭐⭐⭐⭐ |
schmoo | 2+ | 全面性能分析 | 长 | ⭐⭐⭐⭐ |
sweep | 1+ | 有序扫描 | 可配置 | ⭐⭐⭐ |
4. 环境变量完整列表
TransferBench 支持环境变量控制,通用环境变量如下。每个测试集又有自己的环境变量,见后续分析。
4.1 验证和调试
ALWAYS_VALIDATE # 每次迭代后验证而不是最后验证
VALIDATE_DIRECT # 直接验证GPU目标内存而不是通过主机暂存
VALIDATE_SOURCE # 准备后立即验证GPU源内存
SHOW_ITERATIONS # 显示每次迭代的计时信息
USE_INTERACTIVE # 传输循环开始前暂停等待用户输入
HIDE_ENV # 隐藏环境变量值列表
OUTPUT_TO_CSV # 输出为CSV格式
4.2 性能和迭代控制
NUM_ITERATIONS # 每个测试的计时迭代次数(负数表示运行多少秒)
NUM_SUBITERATIONS # 每次迭代的子迭代次数
NUM_WARMUPS # 每个测试的预热迭代次数
4.3 内存和数据
BLOCK_BYTES # 控制子执行器间工作分配的粒度
BYTE_OFFSET # 内存分配的初始字节偏移(必须是4的倍数)
FILL_PATTERN # 源数据的大端模式(十六进制,必须是偶数位)
FILL_COMPRESS # 64B行由random/1B0/2B0/4B0/32B0填充的百分比
SAMPLING_FACTOR # 自动生成数据大小时在2的幂之间添加样本数
4.4 GFX执行器配置
GFX_BLOCK_ORDER # 传输块的排序方式(0=顺序,1=交错)
GFX_BLOCK_SIZE # 每个线程块的线程数(必须是64的倍数)
GFX_TEMPORAL # 非临时加载或存储(0=无,1=加载,2=存储,3=两者)
GFX_UNROLL # GFX内核的展开因子(0=自动,必须<8)
GFX_SINGLE_TEAM # 子执行器协作处理整个数组而不是独立子数组
GFX_WAVE_ORDER # GFX内核的步进模式(0-5,不同排序)
GFX_WORD_SIZE # GFX内核打包数据大小(4=DWORDx4,2=DWORDx2,1=DWORDx1)
4.5 执行器控制
CU_MASK # 流的CU掩码,可指定范围如'5,10-12,14'
MIN_VAR_SUBEXEC # 可变子执行器传输的最小子执行器数
MAX_VAR_SUBEXEC # 可变子执行器传输的最大子执行器数(0表示设备限制)
USE_HIP_EVENTS # 使用HIP事件进行GFX执行器计时
USE_HSA_DMA # 使用hsa_amd_async_copy而不是hipMemcpy进行非目标DMA执行
USE_SINGLE_STREAM # 每个GPU GFX执行器使用单个流而不是每个传输一个流
5. 实战示例
示例1:基础a2a测试
# 使用默认配置
rocm-bandwidth-test run tb a2a
示例2:优化的a2a测试(PCIe GPU)
# 避免peer access问题
export ROCR_VISIBLE_DEVICES=0,1
export HSA_ENABLE_PEER_ALLOCATORS=0
A2A_DIRECT=1 A2A_LOCAL=1 USE_DMA_EXEC=1 NUM_GPU_DEVICES=2 \
rocm-bandwidth-test run tb a2a
示例3:带验证的测试
# 启用验证和详细输出
ALWAYS_VALIDATE=1 SHOW_ITERATIONS=1 VALIDATE_DIRECT=1 \
rocm-bandwidth-test run tb a2a
示例4:性能调优扫描
# 测试不同CU配置
for cu in 4 8 16 32; do
echo "Testing with $cu CUs"
NUM_SUB_EXEC=$cu rocm-bandwidth-test run tb a2a
done
示例5:使用不同数据大小
# 测试512MB传输
rocm-bandwidth-test run tb a2a 512M
# 测试一系列大小
rocm-bandwidth-test run tb a2a 0
示例6:P2P测试
# 测试GPU peer-to-peer带宽
rocm-bandwidth-test run tb p2p
示例7:扫描测试
# 60秒的有序扫描
SWEEP_TIME_LIMIT=60 rocm-bandwidth-test run tb sweep
# 30秒的随机扫描
SWEEP_TIME_LIMIT=30 rocm-bandwidth-test run tb rsweep
示例8:导出CSV结果
# 输出为CSV格式便于分析
OUTPUT_TO_CSV=1 rocm-bandwidth-test run tb a2a > results.csv
6. 发现更多信息的方法
方法1:查看帮助
# 主帮助
rocm-bandwidth-test --help
# 内置帮助
rocm-bandwidth-test --builtin-help
# 查看插件
rocm-bandwidth-test plugin -i
方法2:运行不带参数
# 显示完整用法和所有预设测试
rocm-bandwidth-test run tb
方法3:查看PCIe信息
rocm-bandwidth-test --pcie-info
方法4:查看版本
rocm-bandwidth-test --version
方法5:查看源码
# 插件位置
ls -la /opt/rocm-7.2.0/lib/rocm_bandwidth_test/plugins/
# 如果有源码
# GitHub: https://github.com/ROCm/rocm_bandwidth_test
836

被折叠的 条评论
为什么被折叠?



