如何估算LLM推理和训练所需的GPU内存?
在本文中,我们介绍的评估方法,都是基于Transformer架构推算的,该评估方法不适合Transformer以外的其他体系结构。同时,目前存在大量的框架、模型和优化技术,估计运行大型语言模型的确切内存可能很困难。然而,本文可作为估计执行 LLM 推理和训练所需内存资源的起点。
在实际工作中,经常有人问,7B、14B或70B的模型需要多大的显存才能推理?如果微调他们又需要多大的显存呢?为了回答这个问题整理一份训练或推理需要显存的计算方式。如果大家对具体细节不感兴趣,可以直接参考经验法则评估推理或训练所需要的资源。更简单的方式可以通过这个工具[1]或者huggface官网计算推理/训练需要的显存工具[2]在线评估。
数据精度
开始介绍之前,先说一个重要的概念——数据精度。数据精度指的是信息表示的精细程度,在计算机中是由数据类型和其位数决定的。如果想要计算显存,从“原子”层面来看,就需要知道我们的使用数据的精度,因为精度代表了数据存储的方式,决定了一个数据占多少bit。目前,精度主要有以下几种:
-
• 4 Bytes: FP32 / float32 / 32-bit
-
• 2 Bytes: FP16 / float16 / bfloat16 / 16-bit
-
• 1 Byte: int8 / 8-bit
-
• 0.5 Bytes: int4 / 4-bit
经验法则
- • 推理: 参数量 * 精度。
例如,假设模型都是16-bit权重发布的,也就是说一个参数消耗16-bit或2 Bytes的内存,模型的参数量为70B,基于上述经验法则,推理最低内存需要70B * 2Bytes = 140G。
- • 训练: 4 - 6 倍的推理资源。
推理
在模型推理阶段,需要的资源主要有三部分:模型的权重、KV Cache和激活(在推理过程中创建的张量)。
模型权重
加载模型权重(即模型大小)占用资源主要依赖于模型的参数量和精度。其中,参数量基本不变,精度可以通过模型量化技术进行优化。尽管量化会影响模型的性能,但相比于选择更高精度的小模型来说,量化技术更受青睐。
公式:模型的大小 = 模型的参数量 * 精度
十亿参数模型在 32 位、16 位和 8 位精度下所需的近似 GPU 内存[2]
KV Cache
在Transformer的解码阶段,每次推理生成一个token,依赖于之前的token结果,如果每次都对所有token重新计算一次,代价非常大。为了避免重新计算,通过KV Cache技术将其缓存到GPU内存中。
公式:KV Cache = 2 * Batch Size * Sequence Length * Number of Layers * Hidden Size * Precision
注意:第一个因子2解释了K和V矩阵。通常,在Transformer中,Hidden Size和Number of Layers的值可以在模型相关的配置文件中找到。
激活内存
在模型的前向传播过程中,必须存储中间激活值。这些激活值代表了神经网络中每层的数据在向前传播时的输出。它们必须保持为 FP32 格式,以避免数值爆炸并确保收敛。
公式 :Activation Memory = Batch Size * Sequence Length * Hidden Size * (34 + (5 * Sequence Length * Number of attention heads) / (Hidden Size))
训练
训练阶段所需的资源,除了上述介绍的模型权重、KV Cache和激活内存之外,还需要存储优化器和梯度状态,因此,训练比推理需要更多的资源。
优化器内存
优化器需要资源来存储参数和辅助变量。这些变量包括诸如Adam或SGD等优化算法使用的动量和方差等参数。这取决于优化状态的数量及其精度。例如,AdamW优化器是最流行的微调llm,它为模型的每个参数创建并存储2个新参数。如果我们有一个70B的模型,优化器将创建140B的新参数!假设优化器的参数为float32,即每个参数占用4字节的内存。优化器至少需要 140B * 4 Bytes = 516 G的资源。
其中,不同优化器的状态数量如下:
-
• AdamW (2 states): 8 Bytes per parameter
-
• AdamW (bitsandbytes Quantized): 2 Bytes per parameter
-
• SGD (1 state): 4 Bytes per parameter
梯度
在模型的反向传播过程中计算梯度值。它们表示损失函数相对于每个模型参数的变化率,对于在优化过程中更新参数至关重要。作为激活值,它们必须存储在 FP32 中以保持数值稳定性 。因此,每个参数占用4字节的内存 。例如,一个70B的模型,计算梯度所需的内存需要 70B * 4 Bytes = 280 G左右。
总结
在本文中,我们介绍的评估方法,都是基于Transformer架构推算的,该评估方法不适合Transformer以外的其他体系结构。同时,目前存在大量的框架、模型和优化技术,估计运行大型语言模型的确切内存可能很困难。然而,本文可作为估计执行 LLM 推理和训练所需内存资源的起点。
引用链接
[1]
这个工具: https://llm-system-requirements.streamlit.app/
[2]
huggface官网计算推理/训练需要的显存工具: https://huggingface.co/spaces/hf-accelerate/model-memory-usage
都看到这了,点个关注再走吧🧐~
如何学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
学习路线
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)