答案简单,就是匹配显存。
6B模型可以在在12/16/24G显存的消费级显卡部署和训练。如果一个公司的模型不打算在消费级显卡部署,通常不会训6B这个规模。而且通常还会有一个1.4b或者2.8b,这个是比较适合在手机、车载端量化部署的尺寸。
13B模型按照4k长度组织数据,数据并行=2,刚好占满一个8卡机,并且可以量化部署在A10甚至4090。
下一档也不是130B,目前更大模型有16B、34B、52B、56B、65B、70B、100B、130B、170B、220B这几个规模,基本都是刚好占满某种规格的算力,要么是训练要么是推理。如果需要加快训练速度,只需要倍增卡数即可。比如我们训7B模型以8卡为单位8*8卡训,70B模型以80卡为单位80*6卡训。
-------补充回答-------
评论区有朋友问到怎么计算显存占用,这里给个简单的方法:
首先是训练框架,deepspeed和megatron框架的显存占用是不同的。一家公司如果做pretrain,那么pretrain、sft、rlhf三阶段一般都会使用megatron,因为提供的并行选项更丰富,而且megatron用了很多apex的融合算子,计算效率更高一些,更适合大规模训练。如果只做sft,可能会选择deepspeed或者自己在huggingface模型骨架的基础上实现一套框架。我这里用megatron举例。
megatron框架的模型&优化器存储系数是18,也就是模型参数量*18=显存占用。对于13B的模型是13Bx18=234GB显存占用。这个18的来源是2(半精度模型参数) + 4(单精度梯度) + 4(单精度模型参数副本) + 4(单精度一阶动量) + 4(单精度二阶动量)。
注:混合精度训练__时,megatron存储的梯度并不是半精度的,而是利用apex算子直接计算单精度的梯度,存储在parameter.main_grad中,所以上面的公式是“单精度梯度"。
在 pipeline并行时,所有这些都会被平分到每张卡上,所以系数18可以整体除以卡数。在zero并行时,半精度模型参数和单精度梯度每张卡都有,后面三个平分到每张卡上,所以系数中只有后面三个4+4+4=12可以除以zero并行数,前面的2+4=6不行。
用13B模型、seqlength=4096作为例子计算一遍,模型&优化器显存占用在megatron框架下是13 x 18 = 234GB。这个至少就用到4卡x80G才能装下。
正向传播中间变量的显存占用可以用40xSHL来近似,也就是40x4096(序列长度)x5120(隐层维度)x40(模型层数) =34G。
如果用zero1数据并行:那么模型&优化器显存占用系数是(6 + 12/zero并行数)。数据并行每张卡都要有完整的一条数据,所以每张卡有34G要拿来存储正向传播的中间变量,可用显存只有80-34=46G, 也就是13 x (6+12/zero并行数) < 46,不等式无解,无论如何也是装不下的。
如果你用了 pipeline并行,那么模型&显存占用系数就是18/pipeline并行数,正向传播的中间变量也平均分配到每张卡上占用就是34G/pipeline并行数,那么可以列出公式(13 x 18/pipeline并行数 + 34 / pipeline并行数) < 80,得到pipeline并行数要大于等于4,也就是4卡能装下了,此时每张卡的显存占用67G,其中模型&优化器占58.5,正向传播占8.5。
但是pipeline并行有一个排除显卡占空泡沫提高效率的操作,在megatron框架中主流是用1f1b交错式并行,有兴趣可以参考这一篇:Infi-zc:Megatron-LM 中的 pipeline 并行
也就是说每张卡在正向传播以后显存不会马上释放这8.5G的显存,会继续计算下一条数据的正向传播,n轮之后,第一条数据的反向传播才会从后面传回来,此时才会释放第一条数据占用的显存。
这个n实际上=“pipeline并行数-卡序号+1”,所以1卡负载最严重,最多会记录4-1+1=4条数据的正向传播。所以第一张卡用于记录正向传播的显存占用峰值是(8.5 x 4) = 34G,加上58.5G的模型&优化器,第一张卡会爆,这样计算第二、三张卡也会爆,只有第四张卡不会爆。
此时解决方案有两种,一是batch size只设为1,这样相当于关闭了1f1b操作,但是显然batch size等于1不可能,4096的seqlength对应的batch size通常是1024。
那么第二种方案就是再来4张卡,一共8张卡。8张卡分为2组,每组4张卡组成pipeline并行,这两组之间使用zero1并行,此时1卡的显存占不等式为 13 x (6/pipeline并行数 + 12/(pipeline并行数*zero并行数) + 34,也就是13 x (1.5+1.5) + 34 = 73,此时1卡显存占用73G,能装下了。总结一下,就是需要8卡,其中1、2号卡占用73G,3、4号卡占用64G,5、6号卡占用56G,7、8号卡占用47.5G。实际情况每张卡会稍微多一点,但是确实8张卡够用了。
当然这8张卡你可以全都用来 pipeline并行,此时1卡显存占用就是 13 x 18/8 + 34 = 63.25G
除了pipeline并行(pp),还可以开tensor并行(tp),但是tp有两点问题,1是在transformer结构下,tp每两次矩阵乘法就要进行一次tp间的通信,通信量较大。2是norm层是对最后一个维度整体做归一化,所以norm层的参数在每个tp上都必须是完整的,不能切分,会导致每张卡上都存储了重复的norm层,有一部分显存浪费,但好在不多。
tp也有两点好处:1当模型更大时,一张卡都装不下一层时,pp是失效的,此时只能使用tp把单层切到多张卡上。2是tp不存在pp中的挤泡沫问题,如果由于pp的挤泡沫操作导致不同卡之间的显存占用过于不均衡了,可以将pp减少,增加tp。但是tp通信量大,一般不建议跨机,也就是一般不建议把tp开到8以上。
如何学习大模型 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 的正确特征了。