NVIDIA GPU的测试
https://zhuanlan.zhihu.com/p/585622920
我们在购买GPU的时候总是要比较一些关键参数,比如下图是A30的官方标称峰值性能数据:

通过官方数据我们可以大致了解A30 GPU的浮点运算峰值数据。但当我们实际拿到卡后,如何才能了解手里的卡是否达到了官方标称的峰值数据呢?
这里先说我的测试结论,官方标称的峰值是理论上的,在实际环境中即使做到最优化也很难达到这个理论值。
这里我用到了两种测试方法:
- 通过PyTorch 提供的 Benchmark 进行测试
- 通过NVIDIA官方的GEMM(General matrix multiplication)工具进行测试
注意:测试需要预先安装GPU驱动程序,CUDA,PyTorch,Open MPI等环境。
在进行测试之前,我们首先需要将GPU的时钟频率调整到此GPU所支持的最大频率,步骤如下:
- 查看GPU所支持的最大时钟频率
nvidia-smi -q -d clock

- 设置GPU应用程序时钟频率
nvidia-smi -ac <MEM clock, Graphics clock>
nvidia-smi -lgc 1215,1440

PyTorch 测试
测试代码 flops.py
import torch
from torch.utils import benchmark
typ = torch.float16 #数据精度
n = 1024 * 16
a = torch.randn(n, n).type(typ).cuda()
b = torch.randn(n, n).type(typ).cuda()
t = benchmark.Timer(
stmt='a @ b',
globals={'a': a, 'b': b})
x = t.timeit(50)
print(2*n**3 / x.median /1e12)
FP16 测试

TF32 测试
修改 flops.py
typ = torch.float32 #数据精度

FP64 测试
修改 flops.py
typ = torch.float64 #数据精度

GEMM 测试
下载地址:https://pan.baidu.com/s/12TQFBvwilvCM-CE2uKsbbw?pwd=hdsm
INT8
./cublasMatmulBench -P=bisb_imma -m=8192 -n=3456 -k=16384 -T=1000 -ta=1 -B=0

FP16
./cublasMatmulBench -P=hsh -m=12288 -n=9216 -k=32768 -T=1000 -tb=1 -B=0

TF32
./cublasMatmulBench -P=sss_fast_tf32 -m=8192 -n=3456 -k=16384 -T=1000 -ta=1 -B=0

FP32
./cublasMatmulBench -P=ddd -m=3456 -n=2048 -k=16384 -T=1000 -tb=1 -B=0

FP64
./cublasMatmulBench -P=sss -m=3456 -n=2048 -k=16384 -T=1000 -tb=1 -B=0

总结
PyTorch 进行FP32运算的时候CUDA会自动在底层调用Tensor Core 进行TF32运算,故结果接近TF32的结果。
所有测试结果与官方理论值都有一定的差距,不排除软件和测试工具的原因。
GPU | INT8 | FP16 | TF32 | FP32 | FP64 With Tensor |
---|---|---|---|---|---|
A30 PCI-E 24G(理论值) | 330 | 165 | 82 | 10.3 | 10.3 |
A30 PCI-E 24G(PyTorch) | x | 106.8 | 54.7 | x | 8.9 |
A30 PCI-E 24G(GEMM) | 194.7 | 107.8 | 53.5 | 6.8 | 9.1 |
GPU 数据精度支持参考

A100 GEMM 数据参考
Data Type | A100 Peak TFLOPs | A100 SXM4 80GB 500W GEMM TFLOPs | A100 SXM4 80GB 400W GEMM TFLOPs | A100 PCIe 80GB 300W GEMM TFLOPs | A100 SXM4 40GB 400W GEMM TFLOPs | A100 PCle 40GB 250W GEMM TFLOPs |
---|---|---|---|---|---|---|
INT8 | 624 | 551 | 468 | 411 | 501 | 338 |
FP16 | 312 | 296 | 247 | 219 | 259 | 186 |
TF32 | 156 | 132 | 114 | 103 | 117 | 91 |
FP32 | 19.5 | 19.2 | 19.2 | 18.6 | 19.2 | 16.9 |
FP64 | 19.5 | 19.1 | 18.1 | 16.7 | 18.6 | 15.1 |