rocm_bandwidth_test-2: 工具使用指南

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

已注册的插件:

  1. Hello - 演示插件

    • 版本: 0.0.1
    • 路径: /your path/lib/rocm_bandwidth_test/plugins/amd_hello.amdplug
  2. 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 - 控制是否只测试直连GPU
  • A2A_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要求主要用途测试时长推荐度
a2a1+全面带宽测试⭐⭐⭐⭐⭐
a2a_n1+ NIC网络RDMA测试⭐⭐⭐
a2asweep1+性能调优⭐⭐⭐
healthcheck1 (MI300X)快速验证极短⭐⭐⭐⭐
one2all2+一对多测试⭐⭐⭐⭐
p2p2+Peer访问测试⭐⭐⭐⭐
rsweep1+随机压力测试可配置⭐⭐⭐
scaling1+扩展性测试⭐⭐⭐⭐
schmoo2+全面性能分析⭐⭐⭐⭐
sweep1+有序扫描可配置⭐⭐⭐

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeeplyMind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值