GPU性能指标

准确理解和评估GPU性能是AI基础设施规划的核心。 本文将详细介绍GPU性能评估的关键指标和测试方法。

预计阅读时间:50分钟·难度:中级·更新时间:2024年4月

性能指标概述

GPU性能涉及多个维度,单一指标无法全面反映实际应用性能。 需要综合考虑计算能力、内存性能、互联带宽等多个因素。

GPU性能指标体系

GPU性能指标体系:
├── 计算性能
│   ├── 峰值算力 (TFLOPs)
│   ├── 计算效率 (%)
│   └── Tensor Core利用率
│
├── 内存性能
│   ├── 内存带宽 (GB/s)
│   ├── 内存容量 (GB)
│   ├── 内存延迟
│   └── 带宽利用率
│
├── 互联性能
│   ├── NVLink带宽
│   ├── PCIe带宽
│   ├── 延迟
│   └── 拓扑效率
│
├── 实际性能
│   ├── 训练吞吐量
│   ├── 推理延迟
│   └── 扩展效率
│
└── 效率指标
    ├── 功耗比 (TFLOPs/W)
    ├── 成本比 (TFLOPs/$)
    └── 空间效率

计算性能

峰值算力

峰值算力计算方法

峰值算力计算:
┌──────────────────────────────────────────┐
│ 峰值算力 = CUDA核心数 × 频率 × 每周期运算 │
│                                          │
│ Tensor Core算力:                         │
│ = Tensor Core数 × 频率 × 每周期矩阵运算   │
└──────────────────────────────────────────┘

A100峰值算力计算示例:
├── CUDA核心: 6912
├── 基础频率: 1065 MHz
├── 加速频率: 1410 MHz
├── FP32峰值: 6912 × 1410MHz × 2 = 19.5 TFLOPs
│
├── Tensor Core: 432 (第三代)
├── 每周期运算: 256 FMA (FP16)
├── FP16峰值: 432 × 1410MHz × 256 × 2
│           = 312 TFLOPs

不同精度算力关系:
├── FP64: FP32 × 0.5 (或 ×1 for数据中心)
├── TF32: FP32 × 8 (Tensor Core)
├── FP16: FP32 × 16 (Tensor Core)
├── BF16: FP32 × 16 (Tensor Core)
├── FP8:  FP32 × 32 (Tensor Core, H100+)
└── INT8: FP32 × 32 (Tensor Core)

计算效率

实际计算效率分析

计算效率定义:
┌──────────────────────────────────────────┐
│ 计算效率 = 实际FLOPs / 峰值FLOPs × 100%  │
└──────────────────────────────────────────┘

影响计算效率的因素:
├── 内存带宽限制
│   └── 内存墙问题
│   └── AI算法强度较低
│
├── 并行效率
│   └── 任务分配不均
│   └── 同步开销
│
├── 指令级并行
│   └── 指令依赖
│   └── 分支发散
│
└── 数据局部性
    └── Cache命中率
    └── 内存访问模式

典型工作负载计算效率:
├── 矩阵乘法 (大矩阵): 80-95%
├── 矩阵乘法 (小矩阵): 40-60%
├── 卷积运算: 60-80%
├── Transformer训练: 40-60%
└── 推理 (解码): 10-30% (内存带宽限制)

算术强度与性能

算术强度 (Arithmetic Intensity):
┌──────────────────────────────────────────┐
│ 算术强度 = FLOPs / 字节访问量            │
│                                          │
│ 高算术强度 → 计算密集型 → 高效利用GPU    │
│ 低算术强度 → 内存密集型 → 受带宽限制     │
└──────────────────────────────────────────┘

常见操作的算术强度:
├── 矩阵乘法 (GEMM)
│   └── 算术强度 ≈ O(√(M×N×K)/(M×N+M×K+N×K))
│   └── 大矩阵时计算密集
│
├── Attention
│   └── 算术强度 ≈ O(d/s^2) 或 O(s/d)
│   └── 取决于序列长度和隐藏维度
│
├── LayerNorm
│   └── 算术强度 ≈ O(1)
│   └── 内存密集型
│
└── 激活函数 (ReLU等)
    └── 算术强度 ≈ O(1)
    └── 内存密集型

Roofline模型:
├── 横轴: 算术强度 (FLOPs/Byte)
├── 纵轴: 性能 (GFLOPs/s)
├── 屋顶线: 受限于计算能力
└── 斜线: 受限于内存带宽

内存性能

带宽指标

主流GPU内存带宽对比

GPU内存类型容量带宽
H100HBM380GB3.35 TB/s
A100-80GBHBM2e80GB2.0 TB/s
A100-40GBHBM240GB1.6 TB/s
RTX 4090GDDR6X24GB1.0 TB/s
L40SGDDR648GB864 GB/s

延迟指标

内存延迟分析

内存延迟层次:
├── L1 Cache
│   ├── 延迟: ~20-40 cycles
│   └── 带宽: ~10+ TB/s
│
├── L2 Cache
│   ├── 延迟: ~100-200 cycles
│   └── 带宽: ~5-10 TB/s
│
├── HBM/GDDR
│   ├── 延迟: ~300-500 cycles
│   └── 带宽: 1-3 TB/s
│
└── 系统内存 (via PCIe)
    ├── 延迟: ~1000+ cycles
    └── 带宽: 64 GB/s (PCIe 4.0)

延迟对性能的影响:
├── 随机访问模式
│   └── 延迟敏感
│   └── 需要Cache优化
│
├── 顺序访问模式
│   └── 带宽敏感
│   └── 预取有效
│
└── 大模型推理
    └── KV Cache访问是瓶颈
    └── 需要内存带宽优化

互联性能

互联技术性能对比

互联技术带宽延迟特点
NVLink 4.0900 GB/s~1μsGPU间直连
NVLink 3.0600 GB/s~1.5μsA100
PCIe 5.0128 GB/s~2μs标准接口
PCIe 4.064 GB/s~2.5μs主流标准
IB NDR400 Gb/s~0.5μs节点间

性能测试

常用GPU基准测试

# GPU性能测试工具

# 1. nvidia-smi 基础监控
nvidia-smi                    # GPU状态
nvidia-smi dmon               # 持续监控
nvidia-smi pmon -c 10         # 进程监控

# 2. NVIDIA DCGM 诊断
dcgmi diag -r 3               # 全面诊断
dcgmi dmon -e 100             # 性能监控

# 3. CUDA Bandwidth Test
cd /usr/local/cuda/samples/1_Utilities/bandwidthTest
./bandwidthTest               # 内存带宽测试

# 4. NVIDIA Nsight 系统
nsys profile python train.py  # 性能分析
nsys-ui                       # 可视化分析

# 5. 计算吞吐量测试
# 使用标准模型测试实际TFLOPs
python -c "
import torch
import time

# 矩阵乘法吞吐测试
def benchmark_matmul(m, n, k, iterations=100):
    a = torch.randn(m, k, device='cuda', dtype=torch.float16)
    b = torch.randn(k, n, device='cuda', dtype=torch.float16)
    
    torch.cuda.synchronize()
    start = time.time()
    for _ in range(iterations):
        c = torch.mm(a, b)
    torch.cuda.synchronize()
    end = time.time()
    
    flops = 2 * m * n * k * iterations
    tflops = flops / (end - start) / 1e12
    return tflops

print(f'TFLOPs: {benchmark_matmul(8192, 8192, 8192):.2f}')
"

性能监控

GPU性能监控指标

关键监控指标:
├── 计算利用率
│   ├── GPU利用率 (%)
│   ├── SM利用率 (%)
│   └── Tensor Core利用率
│
├── 内存使用
│   ├── 显存使用量 (GB)
│   ├── 内存带宽利用率 (%)
│   └── 内存分配/释放频率
│
├── 功耗与温度
│   ├── 功耗 (W)
│   ├── 温度 (°C)
│   └── 风扇转速
│
├── 时钟频率
│   ├── GPU时钟 (MHz)
│   ├── 内存时钟 (MHz)
│   └── 是否降频
│
└── 错误统计
    ├── ECC错误计数
    ├── Xid错误日志
    └── PCIe错误

监控工具:
├── nvidia-smi: 基础监控
├── DCGM Exporter: Prometheus集成
├── dcgm-exporter: Kubernetes监控
└── 自定义脚本: 特定指标采集
----