模型参数、量化方式与显存需求对照表

51 min read

本文探讨了部署和推理大型AI模型时所需的GPU显存需求。随着各大厂商纷纷发布大型模型,模型排行榜频繁变化,技术爱好者们也有意在本地环境中训练这些庞大的模型。然而,有限的GPU资源成为一大挑战。文章的核心问题是如何通过模型的参数量来粗略估算所拥有GPU的显存是否足够。

一、了解大模型参数

1.1 模型参数单位
  • 术语解释:

    "10b"、"13b"、"70b"等表示模型参数数量,"b"代表“十亿”。

    • 10b: 约100亿个参数
    • 13b: 约130亿个参数
    • 70b: 约700亿个参数
  • 实例: Meta发布的Llama 2系列模型,参数规模从7b到70b不等,优化用于文本生成和对话场景。

1.2 模型参数精度
  • 数据类型及其内存占用:
    • Float32(32位): 每个参数占用4字节,适用于高精度需求。
    • Float16(16位): 每个参数占用2字节,适用于减少内存和加速计算。
    • Float64(64位): 每个参数占用8字节,提供更高精度但占用更多内存。
    • Int32/Int64: 分别占用4字节或8字节,通常用于表示离散数值。
    • Int8/Int4(量化): Int8占用1字节,Int4通过位操作存储,适用于模型压缩和加速。
  • 量化技术: 通过将浮点数参数映射到较低位数的整数,减少存储和计算资源需求,但会带来一定的精度损失。

二、推理显存计算

影响显存使用的关键因素:

  • 模型结构: 层数、每层神经元数量、卷积核大小等。
  • 输入数据尺寸: 输入数据越大,占用的显存越多。
  • 批处理大小(Batch Size): 批次处理的样本数量越多,显存需求越高。
  • 数据类型(DType): 使用较低精度的数据类型可以减少显存需求。
  • 中间计算结果: 推理过程中产生的临时数据也会占用显存。

估算步骤:

  1. 模型加载: 计算所有模型参数的大小。
  2. 输入数据尺寸: 计算输入数据及中间结果所需的显存。
  3. 批次大小和数据类型: 根据所需的批次大小和数据精度调整显存需求。
  4. 总显存需求: 将上述各部分相加,得出总的GPU显存需求。

实例分析:Llama-2-7b-hf

  • Float32: 参数占用约26 GB显存。
  • Float16: 参数占用约13 GB显存。
  • Int8: 参数占用约6.5 GB显存。
  • Int4: 参数占用约3.26 GB显存。

实用提示: 除了模型参数,推理过程中还需要额外的显存来存储中间计算结果,以避免出现内存不足(OOM)错误。

三、训练显存计算

训练阶段相比推理阶段需要更多的显存,原因包括:

  • 模型权重: 同推理阶段。
  • 梯度计算: 与模型参数同样大小的显存用于存储梯度。
  • 优化器参数: 例如,AdamW优化器需要2倍的模型参数显存。
  • 输入数据和标签: 包括训练数据和对应标签的显存需求。
  • 中间计算和临时缓冲区: 反向传播过程中产生的中间数据和临时数据。

实例分析:Llama-2-7b-hf 使用Int8精度

  • 模型参数: 7 GB
  • 梯度: 7 GB
  • 优化器参数(AdamW): 14 GB
  • 中间计算: 每个样本约990 MB
  • 批次大小50: 总显存需求约77 GB

结论: 训练大型模型所需的显存通常是推理阶段的十几倍,远超普通本地机器的显存容量。因此,个人用户更适合进行模型的推理而非训练。

四、结论与建议

  • 推理部署推荐: 根据模型大小和所需精度选择合适的GPU配置。利用量化、模型并行(如DeepSpeed、Megatron)和内存优化技术,可以有效管理和降低显存需求。
  • 未来展望: 作者计划在后续文章中探讨分布式计算框架和高级内存优化技术,如量化、模型切分、混合精度计算和内存卸载(Memory Offload)。

附加信息

  • 显存监控工具: 使用命令 watch -n -1 -d nvidia-smi 实时监控GPU显存使用情况。
  • 参考资料: 文章引用了Hugging Face论坛的讨论,并提供了相关仓库和个人网站的链接。

模型参数、量化方式与显存需求对照表(以十亿 b 为单位)

以下表格列出了常见开源AI模型的参数规模(以十亿 b 为单位)及其在不同量化方式下的估算显存需求。**显存需求仅包括模型参数的存储,实际部署时还需预留额外显存用于中间计算和框架开销。**量化方式包括:

  • Float32(FP32):每个参数占用4字节
  • Float16(FP16):每个参数占用2字节
  • Int8(INT8):每个参数占用1字节
  • Int4(INT4):每个参数占用0.5字节(通过位操作存储)

显存需求计算公式

显存需求(GB) ≈ 参数规模(b) × 每个参数的字节数 ÷ 1.073

  • FP32:4 字节 → ≈ 3.73 × 参数规模(b) GB
  • FP16:2 字节 → ≈ 1.86 × 参数规模(b) GB
  • INT8:1 字节 → ≈ 0.93 × 参数规模(b) GB
  • INT4:0.5 字节 → ≈ 0.47 × 参数规模(b) GB

表1:常用开源模型的参数量与显存需求

模型名称 参数规模 (b) FP32显存需求 (GB) FP16显存需求 (GB) INT8显存需求 (GB) INT4显存需求 (GB) 备注
BERT系列
- BERT-base 0.11 ~0.41 ~0.21 ~0.10 ~0.05 适用于文本分类、问答系统等任务
- BERT-large 0.34 ~1.27 ~0.63 ~0.31 ~0.16 适用于更复杂的自然语言处理任务
GPT-2系列
- GPT-2 小型 0.124 ~0.47 ~0.23 ~0.12 ~0.06 适合生成简单文本
- GPT-2 中型 0.354 ~1.32 ~0.66 ~0.33 ~0.16 更加复杂的文本生成
- GPT-2 大型 0.774 ~2.88 ~1.44 ~0.72 ~0.36 高质量文本生成
- GPT-2 1.5B 1.5 ~5.60 ~2.80 ~1.40 ~0.70 适合高质量生成和复杂任务
LLaMA系列
- LLaMA-7B 7 ~26.1 ~13.0 ~6.5 ~3.25 适用于对话生成、文本理解等任务
- LLaMA-13B 13 ~48.5 ~24.3 ~12.1 ~6.05 更强的语言理解和生成能力
- LLaMA-30B 30 ~111.9 ~55.9 ~27.95 ~13.98 高性能需求任务,如复杂对话系统
- LLaMA-65B 65 ~242.3 ~121.1 ~60.5 ~30.25 超大规模模型,适合研究和高级应用
Bloom系列
- Bloom-560M 0.56 ~2.08 ~1.04 ~0.52 ~0.26 多语言生成和翻译任务
- Bloom-1.7B 1.7 ~6.35 ~3.18 ~1.59 ~0.79 更复杂的多语言任务
- Bloom-3B 3 ~11.2 ~5.6 ~2.8 ~1.4 高质量多语言生成
- Bloom-7.1B 7.1 ~25.1 ~12.55 ~6.3 ~3.15 适用于高复杂度的多语言生成任务
- Bloom-176B 176 ~780 ~390 ~195 ~97.5 超大规模多语言模型,适合高级研究和应用
Falcon系列
- Falcon-7B 7 ~26.1 ~13.0 ~6.5 ~3.25 高效对话系统和文本生成
- Falcon-40B 40 ~149.2 ~74.6 ~37.3 ~18.65 超大规模任务,如高级文本生成和复杂对话系统
T5系列
- T5-small 0.06 ~0.22 ~0.11 ~0.06 ~0.03 适合简单的文本转换任务
- T5-base 0.22 ~0.82 ~0.41 ~0.21 ~0.10 常用于文本生成和理解
- T5-large 0.77 ~2.88 ~1.44 ~0.72 ~0.36 更复杂的文本生成和理解任务
- T5-3B 3 ~11.2 ~5.6 ~2.8 ~1.4 高性能文本生成任务
- T5-11B 11 ~41.1 ~20.6 ~10.3 ~5.15 超大规模文本生成和理解任务
Vicuna系列
- Vicuna-7B 7 ~26.1 ~13.0 ~6.5 ~3.25 基于LLaMA,优化对话生成
- Vicuna-13B 13 ~48.5 ~24.3 ~12.1 ~6.05 更强的对话生成和理解能力

说明与注意事项

  1. 量化技术
    • INT8量化:将每个模型参数从4字节(FP32)压缩到1字节,显存需求减少至约93%。适用于大多数推理任务,同时保持较好的模型性能。
    • INT4量化:进一步将每个参数压缩到0.5字节,显存需求减少至约47%。适用于对显存要求极高但对精度要求不高的场景。
  2. 实际显存需求
    • 参数显存:仅包括模型参数的存储。
    • 额外显存:实际部署时,还需预留显存用于输入数据、激活值、中间计算结果以及框架开销。建议预留**20-50%**的额外显存以避免内存不足(OOM)错误。
  3. 批处理大小(Batch Size)
    • 批处理大小越大,所需显存越多。上述估算基于批处理大小为1的情况。实际应用中需要根据具体需求调整。
  4. 框架开销
    • 不同深度学习框架(如PyTorch、TensorFlow)在运行时会有不同的显存开销,实际所需显存可能略有不同。
  5. 优化策略
    • 模型并行:通过将模型分布到多个GPU上,可以有效降低单个GPU的显存压力。
    • 内存优化工具:使用如DeepSpeed、Megatron等分布式计算框架,结合混合精度计算和内存卸载技术,进一步优化显存使用。
    • 中间计算优化:通过减少中间变量的存储或使用更高效的计算策略,节省额外的显存。
  6. 显存监控
    • 使用命令 watch -n 1 -d nvidia-smi 实时监控GPU显存使用情况,确保模型部署过程中显存充足。

推荐显卡配置

模型规模 推荐显卡 显存容量
轻量级模型 NVIDIA GTX 1660,RTX 2060 6 GB - 8 GB
中等规模模型 NVIDIA RTX 3060 Ti,RTX 3080 8 GB - 10 GB
大型模型 NVIDIA RTX 3090,A100 40 GB 24 GB - 40 GB
超大规模模型 NVIDIA A100 80 GB,NVIDIA H100 >32 GB

结论

根据不同开源模型的参数规模和量化方式,所需的最少显存各不相同。通过采用量化技术(如INT8、INT4),可以显著减少显存需求,使得在显存有限的GPU上也能运行大型模型。然而,实际部署时需要综合考虑模型的具体任务需求、批处理大小以及中间计算等因素,确保显存充足以实现高效稳定的推理。

如果您计划在本地部署这些模型,建议根据具体需求选择合适的GPU,并结合优化策略以充分利用显存资源。如有更多疑问或需要进一步的指导,欢迎随时提问!