Skip to content

显存优化与 GPU 利用率

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

一、显存估算速查

1.1 模型文件大小

一般放出的模型文件都是 fp16。nB 模型占 2n GB 存储空间。

1.2 推理显存

fp16 加载到显存推理也占 2n GB

1.3 训练显存

组成部分计算方式备注
模型参数n × 每参数字节数fp16=2B, fp32=4B, int8=1B
梯度n × 每参数字节数通常与参数同精度
优化器状态n × 每参数字节数 × 额外倍数AdamW 需 2 倍(一阶+二阶 momentum)
CUDA kernel~1.3 GB固定开销
中间变量与 hidden_size、层数、context_length 相关batch_size 越大越多

经验公式:全量训练基础显存 ≈ 16n GB(优化器必须用 fp32 保证稳定:2+2+12=16)

LLaMA-7B int8 精度估算示例:

  • 模型参数:6 GB
  • 梯度:6 GB
  • AdamW 优化器:12 GB
  • CUDA kernel:1.3 GB
  • 合计约 25.3 GB

二、显存不够的解决方案

方案思路
LoRA仅训练低秩增量矩阵,大幅降低显存
int4 量化65B 模型最少约 50GB 显存(GPTQ 量化 + LoRA)
ZeRO + Offload参数动态在 GPU/CPU 间转移
Gradient Checkpointing用计算换显存
混合精度(BF16/FP16)降低显存消耗,速度提升 2-4 倍

三、GPU 利用率评估

3.1 FLOPS 比值法

GPU 利用率 = 实测 FLOPS / 显卡理论峰值 FLOPS
  • 工具:DeepSpeed FLOPS Profiler
  • A100 理论峰值 fp16: 312 TFLOPS

3.2 吞吐量估计法

吞吐量 = example数量/秒/GPU × max_length
GPU 利用率 = 实际吞吐量 / 论文中的吞吐量(假设利用率 100%)
  • LLaMA 7B 论文吞吐量约 3300 token/s/gpu

3.3 Torch Profiler 分析法

使用 torch.profiler 记录函数时间,在 TensorBoard GPU Kernel 视图查看 Tensor Core 利用率。

准确性排序:方案三 > 方案一 > 方案二 易用性排序:方案二 > 方案一 > 方案三


四、实用诊断命令

需求命令/方法
查看 NVLINK 拓扑nvidia-smi topo -m
查看显卡型号deviceQuery(CUDA samples)
查看训练 FLOPSDeepSpeed flops_profiler 配置
查看 DeepSpeed 环境ds_report
查看多机网速iftop
tf32 长度19 位

五、通信开销分析

使用 DeepSpeed ZeRO-3 时,PCIe 版本显卡很大部分时间在通信上

  • AllGather 和 ReduceScatter 时间超过 Tensor Core 计算时间
  • FLOPS 难以达到理论峰值
  • 每步每卡通信量 ≈ 3 倍参数量(65B 模型约 195GB/步/卡)