外观
显存优化与 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) |
| 查看训练 FLOPS | DeepSpeed flops_profiler 配置 |
| 查看 DeepSpeed 环境 | ds_report |
| 查看多机网速 | iftop |
| tf32 长度 | 19 位 |
五、通信开销分析
使用 DeepSpeed ZeRO-3 时,PCIe 版本显卡很大部分时间在通信上:
- AllGather 和 ReduceScatter 时间超过 Tensor Core 计算时间
- FLOPS 难以达到理论峰值
- 每步每卡通信量 ≈ 3 倍参数量(65B 模型约 195GB/步/卡)