2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

如何简单计算LLM推理和训练所需的GPU资源

发布日期:2024-09-11 16:18:28 浏览次数: 9534
作者:Bear实验室

微信搜一搜,关注“Bear实验室”

Meta不久前刚发布了Llama 3.1的一系列开源模型,在多项基准测试中,超越了GPT-4o和Claude 3.5 Sonnet等闭源的商业大模型。开源大模型性能越来越强,可以满足很多私有化部署的业务场景。不同于商业模式的服务调用模式,需要自己搭建环境,部署模型。有些时候还要自己微调模型,以更好适应特有的场景。
LLM 的特点是计算要求非常高,具有数十亿个参数,并且需要对数 TB 的数据进行训练。这得益于过去十年计算能力的最新进步以及新的优化技术和架构。尽管取得了这些进步,但由于计算限制和专有模型,LLM 仍远未普及。例如,训练 GPT-4 的成本估计约为 1 亿美元。
虽然微调 700 亿个参数的模型可能仍需要大量计算资源,但成本已大幅降低,让像我这样的技术爱好者可以在本地运行其中一些模型。
本文用简单的方式总结LLM对部署环境的GPU显存的要求,以及大致的计算原理。面向那些想要在本地使用 LLM 且通常没有强大的 GPU 或不想在添加优化技术上浪费太多时间的人。介绍在本地运行 LLM 的基本内存要求,仅提及可以进行的基本优化。

简单总结原则,粗略的预估
推理:参数数量 * 精度(通常为 2 或 4 个字节)
训练:4-6倍推理资源
10亿个参数则将占用20亿个字节,或者说10亿个字节等于1GB,那么1B个参数占用2GB的内存。100B参数就需要占用200GB内存。这是一个近似值,因为1 KB不等于1,000字节,而是1,024字节。我们通过这种简单的方法可以大概评估内存的占用。

以Huggingface上meta-llama/Meta-Llama-3.1-70B-Instruct为例,70.6B,16位精度,那大概是130多G的GPU内存,也就是说两个80G的H100就可以。

推理
执行推理需要资源来加载模型权重并存储 KV 缓存和激活内存。模型大小是最主要的参数,比其他参数要大得多。
总推理内存 = 模型大小 + KV 缓存 + 激活
下面我们看看 模型大小、KV 缓存、激活 这些内存计算怎么得到

模型大小
第一个也是最重要的内存需求是加载模型所需的内存。这取决于模型的参数数量和所需的精度。一种常见的优化技术称为量化。量化包括以较低的精度加载模型权重。虽然它会影响性能,但效果并不明显,而且比选择具有更高精度的较小模型更可取。
模型大小 = 参数数量 * 精度
单一模型参数,在 32 位全精度下,由 4 个字节表示。因此,一个 10 亿参数的模型需要 4 GB 的 GPU RAM,才能以全精度将模型加载到 GPU RAM 中。通过将模型权重从 32 位全精度量化为 16 位或 8 位精度,您可以快速将 10 亿参数模型的内存需求减少 50% 至仅 2 GB,甚至减少 75% 至仅 1 GB 的加载内存需求。
精度计算
  • 4 个字节: FP32 / 全精度 / float32 / 32 位
  • 2 个字节: FP16 / float16 / bfloat16 / 16 位
  • 1 字节: int8/8 位
  • 0.5 字节: int4/4 位

KV 缓存
在 Transformer 中,解码阶段会在每个时间步骤生成一个 token,具体取决于之前的 token 张量(tensors)。为了避免重新计算这些张量,它们被缓存在 GPU 内存中。
KV 缓存 = 2 * 批次大小 * 序列长度 * 层数 * 隐藏大小 * 精度
批次大小、序列长度 、层数 、隐藏大小、精度包括后面需要用来计算内存的, 这些参数大部分情况下都可以从模型的Model card看到,如果Model card没有展示,就要从其他地方去查找,一般都是可以找到的。

激活
在模型的前向传递过程中,必须存储中间激活值。这些激活值表示数据在模型中向前传播时神经网络中每一层的输出。它们必须保存在 FP32 中,以避免数值爆炸并确保收敛。
激活内存 = 批次大小 * 序列长度 * 隐藏大小 * (34 + (5 * 序列长度 * 注意力头数量) / (隐藏大小))

并发
对于并发调用的情况,‌需要同时运行多个模型实例,‌那么总的内存需求将是单个模型层的内存需求乘以并发调用的数量。‌这是因为每个并发调用都需要独立的模型实例来处理,‌而这些实例将共享或占用相同的内存资源。‌
此外,‌需要注意的是,‌实际的内存消耗可能会因为推理框架的优化而有所不同。‌例如,‌一些优化得更好的框架可能会减少内存消耗,‌而使用高级技术如FlashAttention、‌Alibi或RoPE等也可以显著减少处理长序列时的内存消耗

训练
由于优化器和梯度状态,训练所需的资源比推理多。这些是训练模型所必需的,并且会显著增加所需的内存资源。
总内存 = 模型大小 + KV 缓存 + 激活 + (优化器状态 + 梯度)* 可训练参数数量
这些附加组件导致每个模型参数需要大约 12-20 字节的额外 GPU 内存。例如,要训练一个 10 亿参数的模型,您将需要大约 24 GB 的 32 位全精度 GPU RAM,这是模型推理所需的 4 GB GPU RAM 的六倍。

微调
由于优化器和梯度状态的计算,训练需要额外的内存资源。为了减少可训练参数的数量,通常采用参数高效微调 (PEFT) 技术,例如低秩自适应 (LoRA) 和量化低秩自适应 (QLoRA)。

优化器状态
优化算法需要资源来存储参数和辅助变量。这些变量包括 Adam(2 个状态)或 SGD(1 个状态)等优化算法使用的动量和方差等参数。这取决于优化状态的数量及其精度。
  • AdamW(2 个状态):每个参数 8 个字节
  • AdamW(bitsandbytes 量化):每个参数 2 个字节
  • SGD(1 个状态):每个参数 4 个字节

梯度优化
梯度值是在模型反向传递过程中计算的。它们表示损失函数相对于每个模型参数的变化率,对于在优化过程中更新参数至关重要。作为激活,它们必须存储在 FP32 中以保持数值稳定性。

减少微调内存消耗
由于优化器状态消耗大量内存,因此已经进行了大量的研究来减少它们的内存占用,例如:
  1. LoRA:冻结整个模型,并添加一个具有数百万个参数的可训练适配器。使用LoRA,我们只存储适配器参数的优化器状态。
  2. QLoRA: LoRA,但模型量化为4位或更低精度。
  3. AdaFactor和AdamW-8bit:更高效的内存优化器,提供接近AdamW的性能。但AdaFactor在训练期间可能不稳定。
  4. GaLore:将梯度投影到低秩子空间中,这可以将优化器状态的大小减少80%。
内存的另一个重要部分被激活所消耗。为了减少它通常采用梯度检查点。当需要计算梯度时,它会重新计算一些激活。它减少了内存消耗但也减慢了微调速度。
还有一些框架,如Unsloth,在使用LoRA和QLoRA进行微调方面进行了极大的优化。

LLM内存需求计算器
Github:https://github.com/manuelescobar-dev/LLM-System-Requirements
只需要选择模型,系统就可以根据默认参数和上面的公式计算出推理和微调所需的内存。也可以修改默认参数,按自己的实际情况填写。如果没有所需的模型可选,可以参考项目的默认模型的参数格式提供自己的参数就好。模型参数需要自己想办法查找到。
{"model_size":8,"architectures": ["LlamaForCausalLM"],"attention_bias": false,"attention_dropout": 0.0,"bos_token_id": 128000,"eos_token_id": 128001,"hidden_act": "silu","hidden_size": 4096,"initializer_range": 0.02,"intermediate_size": 14336,"max_position_embeddings": 8192,"model_type": "llama","num_attention_heads": 32,"num_hidden_layers": 32,"num_key_value_heads": 8,"pretraining_tp": 1,"rms_norm_eps": 1e-05,"rope_scaling": null,"rope_theta": 500000.0,"tie_word_embeddings": false,"torch_dtype": "bfloat16","transformers_version": "4.40.0.dev0","use_cache": true,"vocab_size": 128256}
例如Llama3 70B,推理需要142.51GB

训练需要924.82GB, Percentage of trainable parameters 表示可训练参数的数量占模型中参数总数的比例。不同优化器所需内存差异还是比较大的。


了解一下量化
量化通过降低模型权重的精度来减少加载和训练模型所需的内存。量化将模型参数从 32 位精度转换为 16 位精度,甚至是 8 位或 4 位。量化将一组较高精度的浮点数源投影到一组较低精度的目标数中。量化机制利用源和目标范围,首先计算缩放因子,进行投影,然后以较低的精度存储结果,这样需要的内存更少,最终提高训练性能并降低成本。

投影后精度有所损失,因为现在小数点后只有六位。`fp16`的值`pi`现在是3.140625,通过将值存储在 中就已经损失了精度。

LLM的量化技术在减少内存需求和提高推理速度方面具有显著优势,但也需要权衡其对性能和效果的影响。通过采用合适的量化策略和优化方法,可以在保证模型精度的同时实现高效的推理性能。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅