深度学习模型显存占用计算指南
1. 基本概念
-
显存单位换算
- 1GB = 1024MB
- 1MB = 1024KB
- 1KB = 1024字节(Byte)
- 1字节 = 8比特(bit)
- 简单估算:1GB ≈ 10^9字节
-
参数量
- 1B = 10亿(10^9)个参数
-
精度类型
- 全精度(fp32):32比特 = 4字节
- 半精度(fp16):16比特 = 2字节
- 量化(int8):8比特 = 1字节
2. 显存占用计算公式
理论显存占用 = 参数量 × 每个参数占用的字节数 / 10^9 (GB)
考虑到实际运行中的额外开销,我们需要乘以一个安全系数(1.2~1.5之间,通常取1.3):
实际显存占用 ≈ 理论显存占用 × 1.3
3. 计算示例
-
1B参数模型
- 全精度(fp32):1×4×1.3 = 5.2GB
- 半精度(fp16):1×2×1.3 = 2.6GB
- 量化(int8):1×1×1.3 = 1.3GB
-
Qwen2.5 72B半精度模型
- 理论显存:72×2 = 144GB
- 实际显存:144×1.3 ≈ 187GB
- 部署需求:使用48GB显存的显卡需要4张(187/48≈3.9)
4. 实用建议
- 计算显存需求时,建议预留20-30%的余量
- 大模型部署通常使用半精度(fp16)以节省显存
- 量化技术可以进一步减少显存占用,但可能影响模型精度
通过这个计算方法,你可以快速估算出不同规模模型在不同精度下的显存需求,为硬件选型提供参考。
- 1B"的全称是"1 Billion",表示十亿;而"1M"的全称是"1 Million",表示一百万。
- B和G都是十亿(1000M或1024M)的意思,M是100万的意思。
- 模型参数有xB就是说有x十亿个参数。
- 显存有多少G/M是说有多少G/M个字节(byte),1个字节=8比特(bit)。
- 1字节(Byte)通常由8个比特组成,FP32使用4字节(32位)表示一个浮点数,而FP16使用2字节(16位)表示一个浮点数
- 1B模型参数对应多少G内存和参数的精度有关,如果是全精度训练(fp32),一个参数对应32比特,也就是4个字节,参数换算到显存的时候要乘4,也就是1B模型参数对应4G显存,如果是fp16或者bf16就是乘2,1B模型参数对应2G显存。