快来测试一下你的 GPU 性能吧!
本文最后更新于88 天前,其中的信息可能已经过时,如有错误请发送邮件到2371964121@qq.com

背景介绍

近期老板发个任务,想要测试一下半精度下的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系列显卡,还无法测试其他卡。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇