开源LLM系统需求计算器:
-
Github: https://github.com/manuelescobar-dev/LLM-System-Requirements
-
网站: https://llm-system-requirements.streamlit.app
大型语言模型(LLM)通常需要耗费巨大的算力资源,往往包含数十亿个参数,并且需要在数TB的数据上进行训练。近十年来,得益于计算能力的显著提升,以及新型优化技术和架构的出现,开发如此庞大的模型才成为可能。尽管在这些方面已取得了重大进展,但由于算力资源的限制和模型的专有性,LLM的广泛应用仍面临诸多挑战。举例来说,据估计,仅训练GPT-4一个模型的成本就高达约一亿美元。
不过,随着Llama 3等开源模型的出现,各类企业和个人现在可以使用并定制这些模型。这些模型有不同规模的版本,甚至最小型的变体也能适用于移动应用。虽然微调一个70亿参数的模型仍需要相当可观的算力资源,但成本已大幅降低,使得像我这样的技术爱好者也能在本地运行其中的一些模型。
基本经验法则:
-
推理:参数数量 * 精度(通常为2或4字节)
-
训练:推理资源的 4-6 倍
免责声明:本文仅供估算内存需求参考,实际所需内存可能因具体配置和所用框架而异。因此,准确评估内存需求的唯一方法是进行实际测试。
推理(Inference)
在进行推理时,需要加载模型权重,并为KV缓存和激活值分配内存空间。由于推理阶段不涉及模型训练,因此不需要存储梯度和优化器状态。
公式:
推理总内存 = 模型大小 + KV 缓存 + 激活
模型权重(Model Weights)
内存需求中最主要且最重要的部分是加载模型所需的内存。这主要取决于模型的参数数量和选择的精度。一种常用的优化技术称为“量化”(Quantization)。量化是指以较低精度加载模型权重的方法。虽然这可能会略微影响模型性能,但通常影响不大,而且相比选择参数更少的高精度模型,使用量化后的大模型往往能获得更好的效果。
公式:
模型大小 = 参数数量 * 精度
精度:
-
4 字节: FP32 / 全精度 / float32 / 32 位
-
2 字节: FP16 / float16 / bfloat16 / 16 位
-
1 字节: int8 / 8 位
-
0.5 字节: int4 / 4 位
**进一步内存优化:**双重量化
KV缓存(KV Cache)
在Transformer模型中,解码过程是逐步进行的。每个时间步骤会生成一个新的token,这个过程依赖于之前生成的所有token信息。为了提高效率,避免重复计算,这些先前计算得到的token相关张量会被缓存在GPU内存中。
公式:
KV 缓存 = 2 * 批大小 * 序列长度 * 层数 * 隐藏层大小 * 精度
进一步内存优化:分页注意力
激活(Activations)
在模型的前向传播过程中,需要存储各层的中间激活值。这些激活值代表了神经网络每一层在前向传播中产生的输出数据。为了防止数值溢出并确保模型的稳定收敛,这些激活值通常需要以32位浮点数(FP32)格式保存。
公式:
激活内存 = 批大小 * 序列长度 * 隐藏层大小 *(34 +(5 * 序列长度 * 注意力头数)/(隐藏层大小))
进一步内存优化:
-
分页注意力
-
序列并行化
-
激活重计算
训练(Training)
相比推理过程,模型训练需要更多的计算资源,这主要是因为训练过程中需要额外存储优化器状态和梯度信息。这些额外的数据在模型训练时是必不可少的,但同时也显著增加了内存占用。
公式:
总内存 = 模型大小 + KV 缓存 + 激活 +(优化器状态 + 梯度) * 可训练参数数量)
-
模型参数(权重):4字节
-
Adam优化器(2个状态):8字节
-
梯度:4字节
-
激活和临时内存:8字节(高端估计,大小可变)
-
总计:4 + 20字节/参数
微调(Fine-Tuning)
由于需要计算优化器状态和梯度,训练时需要额外的内存资源。通常采用参数高效微调(PEFT)技术,例如低秩适配(LoRA)和量化低秩适配(QLoRA),以减少可训练参数的数量。
优化器状态(Optimizer States)
优化算法需要资源来存储参数和辅助变量。这些变量包括优化算法如 Adam(2 个状态)或 SGD(1 个状态)所用的动量和方差。具体取决于优化状态的数量及其精度。
公式:
-
AdamW(2 个状态):每个参数8字节
-
AdamW(bitsandbytes 量化):每个参数2字节
-
SGD(1 个状态):每个参数4字节
进一步内存优化:
-
替代优化器(如 NVIDIA/apex, Adafactor, 量化Adam等)
-
分页优化器
梯度(Gradients)
在模型的反向传播过程中计算梯度值。它们表示损失函数相对于每个模型参数的变化率,对于在优化过程中更新参数至关重要。为了保持数值稳定性,梯度必须存储在FP32。
公式:每个参数4字节
进一步内存优化:
-
梯度累积
-
梯度检查点
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。