快来测试一下你的 GPU 性能吧!

背景介绍

近期老板发个任务,想要测试一下半精度下的GPU稀疏算力,探索了多个软件和脚本,包括DeepBench、GPU-Burn、Pytorch基准测试等,发现均不太好用;

找寻过程中发现一篇文章,发现想要简单快速又比较准的的测出实际峰值算力,可以使用CUTLASS profiler提供的GEMM算子进行测试,通常认为GEMM是计算受限的算子,且当下大热的Transformer模型负载基本上都是GEMM,故GEMM测得的最优性能可以被当作GPU的实际峰值算力,当然GEMM是通用矩阵,但查看官方文档,最新3.9.0版本内添加了稀疏矩阵的支持;

GitHub - NVIDIA/cutlass: CUDA Templates for Linear Algebra Subroutines) 

克隆源码并且按照文档里的方法编译cutlass_profiler程序,使用方法见cutlass_profiler --help;

环境配置

首先准备我们的工具,使用的是NVIDIA提供的cutlass,这里大家可以复制到此代理网站中,添加上代理,来进行快速的下载:Github Proxy 文件代理加速

# https://github.com/NVIDIA/cutlass.git
git clone https://github.akams.cn/https://github.com/NVIDIA/cutlass.git

然后进入文件夹内,创建build文件夹

cd cutlass/
mkdir build && cd build

查看nvcc路径,并导入环境变量,之后就可以进行编译

开始测试

密集矩阵

  • 4090测试时的CUTLASS编译选项-DCUTLASS_NVCC_ARCHS="89"

  • H100测试时的CUTLASS编译选项-DCUTLASS_NVCC_ARCHS="90a"

  • A10测试时的CUTLASS编译选项-DCUTLASS_NVCC_ARCHS="86"

  • A100测试时的CUTLASS编译选项-DCUTLASS_NVCC_ARCHS="80"

接着配置一下github全局代理,编译时候要用到

git config --global url."https://github.moeyy.xyz/https://github.com/".insteadOf "https://github.com/"

开始进行编译

which nvcc
export CUDACXX=/usr/local/cuda/bin/nvcc
cmake .. -DCUTLASS_NVCC_ARCHS=89 -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc

注意,这里cmake版本要求3.19.3以上,因此版本不够则需要进行更新(注意需要提前删除原有版本,这里可以自行搜集下教程)

开始进行编译,注意此部分需要很长时间,耐心等待~

make cutlass_profiler -j16

./tools/profiler/cutlass_profiler   --operation=Gemm   --m=8192   --n=8192   --k=8192   --A=f16:column   --B=f16:column   --C=f16:column   --beta=0,1,2   --profiling-iterations=1   --providers=cutlass   --output=functional-test.csv

该命令用于使用CUTLASS库分析矩阵乘法(GEMM)的性能,验证FP16大矩阵乘法在不同 beta 值下的正确性或性能,适用于GPU计算优化或深度学习模型调优。参数解释如下:

【operation=Gemm】指定操作为通用矩阵乘法(GEMM),即计算 C = alpha*A*B + beta*C

【m=8192、--n=8192、--k=8192】定义矩阵维度,测试大规模矩阵运算性能。

  • A 的形状为 M×K = 8192×8192
  • B 的形状为 K×N = 8192×8192
  • C 的形状为 M×N = 8192×8192

A=f16:column、--B=f16:column、--C=f16:column】

  • f16:矩阵数据类型为半精度浮点(FP16),节省内存带宽并加速计算。
  • column:列主序存储(与cuBLAS默认一致),内存中按列优先排列数据。

beta=0,1,2】测试三种不同的 beta 值:

  • beta=0:结果 C = alpha*A*B(忽略原C的值)。
  • beta=1:结果 C = alpha*A*B + C(累加到原C)。
  • beta=2:结果 C = alpha*A*B + 2*C(验证复杂计算路径)。

【profiling-iterations=1】每个配置仅运行1次迭代,快速验证功能或初步性能(非稳定性测试)。

【providers=cutlass】指定使用CUTLASS库实现,而非其他后端(如cuBLAS),CUTLASS是NVIDIA优化的矩阵计算模板库。

【output=functional-test.csv】将结果(如耗时、吞吐量)保存到CSV文件,便于后续分析。

最终生成一个CSV文件

Problem (Beta)OperationRuntime (ms)GB/sGFLOPs
1 (β=0)SIMT HGEMM15.297524.513871883.9
1 (β=0)TensorOp F16 S16887.4065950.6306148469
1 (β=0)TensorOp H16884.7646778.7043230792
1 (β=0)TensorOp F16 S168166.3160359.3727174104
1 (β=0)TensorOp H168163.43142109.284320463
2 (β=1)SIMT HGEMM15.500332.257570943.6
2 (β=1)TensorOp F16 S16887.4874966.7781146864
2 (β=1)TensorOp H16885.018599.6314219119
2 (β=1)TensorOp F16 S168166.3815778.3507172316
2 (β=1)TensorOp H168163.30051151.492333174
3 (β=2)SIMT HGEMM15.453232.355871159.8
3 (β=2)TensorOp F16 S16887.4833966.8146146945
3 (β=2)TensorOp H16885.0557498.8974217504
3 (β=2)TensorOp F16 S168166.3836278.3255172261
3 (β=2)TensorOp H168163.30035151.499333190

稀疏矩阵(后续更新)

稀疏矩阵测试需要重新进行编译,在编译时候启动稀疏矩阵功能支持,如果未启用稀疏支持,相关内核会被跳过,当前官方是专门针对 Blackwell SM120a 架构的块缩放稀疏 GEMM(Block-Scaled Sparse GEMM)设计了单元测试,因此目前仅支持50系列显卡,还无法测试其他卡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Knoka705

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

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

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

打赏作者

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

抵扣说明:

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

余额充值