深浅色
70B 是什么意思?它不是智商分,是文件大小。
像把一个图书馆的书目编成号码
参数(parameter)——模型训练时被调的数字,存着它就等于存着整个模型。
7B 就是七十亿个这样的数字。名字里的 B 是 billion,十亿。这个数字跟聪明程度有关,但不是直接等号。
算一下体积你就明白了。模型里的参数绝大多数是 16 位浮点数,每个占两个字节。70B 就是 700 亿乘以 2 字节,约 140 GB。这个数字就是你要买的显卡显存的下限。参数量的第一作用是决定「装不装得下」。
我自己第一次看到有人把模型塞进笔记本的时候,反复确认了三遍是不是看错了单位。不是模型变小了,是有人把参数从 16 位压到了 4 位甚至更少——这叫量化(quantization)——把参数的存储精度砍掉换内存,能力会掉一点但通常还能用。
参数量和训练量,是两件事
这是最值得记住的一节。
2022 年 DeepMind 那篇论文,标题叫《训练算力最优的大语言模型》。他们训了 400 多个模型,从 7000 万参数到 160 亿参数量级,每个配 500 亿到 5000 亿词元,然后去拟合那条最优曲线。
结论是:给定算力预算,模型大小和训练词元数应该同步增长。翻倍的模型,配的词元也该翻倍。
他们顺带给当时最大的那些模型下了个判断——它们没喂饱。这话说出来挺得罪人:GPT-3 那会儿大家比的是谁的参数多,但真按算力最优去算,好些大模型是「又大又饿」,参数堆上去了,语料没跟上。
这也是为什么现在看模型不能只看参数。数据量、训练算力、词表大小、上下文长度,都是独立的旋钮。
三种做法,各自动什么
这三样东西经常被放在一起讲,其实动的东西完全不同。
微调(fine-tuning)——在已经训好的模型上再补一小批数据继续训。动的是参数本身,动全部。全量微调一个 70B 模型,显存和存储都是灾难级的问题。
低秩适配(LoRA)——只微调很小一部分参数的省钱做法。原理是把权重的改变量拆成两个瘦长矩阵相乘,原始权重冻住不动,只训这两个小矩阵。2021 年那篇论文的动机写得很直白:如果微调 GPT-3 的 175B 模型,每部署一个专属版本就得再存一份 175B,代价高得离谱。LoRA 训练的部分小到可以忽略,存下来也只是几 MB 到几十 MB。现在开源社区的模型几乎人手一个 LoRA,起点都是这个。
检索增强生成(RAG)——先查资料再回答的做法。它一个参数都不动。你把公司的手册切块、存进一个检索库,问问题的时候先搜出最相关的几段塞进提示词,模型看着这几段回答。2020 年那篇提出这个做法的论文,出发点正是「模型把事实存在参数里,你既没法查证它从哪来,也没法更新它」。RAG 解决的正是后两件事。
一句话对比:微调和 LoRA 改的是模型本身,RAG 改的是模型每次看到的东西。
参数量不等于效果
我见过有人拿参数量当横向对比表,最后结论全错。原因是不同的模型连语种、结构、训练数据都不一样。7 亿参数在中文上完全可能强过 70 亿。
更靠谱的判断顺序是:先看它在你要做的那个任务上的实际表现(基准测试题库,benchmark——用来横向比模型的固定题库),再看它在你自己的真实输入上答得怎么样,最后才看参数。
延伸阅读
Training Compute-Optimal Large Language Models(Jordan Hoffmann、Sebastian Borgeaud、Arthur Mensch et al.,2022,arXiv 预印本)—— 就是 Chinchilla 那篇。摘要里那句结论值得背:给定算力预算,模型规模和训练词元数应当等比例放大。以及那句得罪人的话——当时的大语言模型普遍训练不足。arXiv: 2203.15556
LoRA: Low-Rank Adaptation of Large Language Models(EJ Hu、Y Shen、P Wallis et al.,2021,arXiv 预印本)—— 用 GPT-3 的 175B 举例说明动机:每部署一个全量微调版本,成本高到不现实。办法是冻住原权重,插进一对可训练的低秩矩阵。论文里强调它还能在多个任务上分别训出不同的小适配器,然后热插拔切换。arXiv: 2106.09685
另外一篇和这一页极相关的,检索增强生成那篇原论文:
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(Patrick Lewis、Ethan Perez、Aleksandra Piktus et al.,2020,NeurIPS)—— 作者自己把动机写得很清楚:预训练模型把事实存进参数里,导致「说不清答案从哪来」和「知识更新不了」这两个问题一直没解。他们接了一个可微分的检索模块,答案里能标出引了哪一段。arXiv: 2005.11401
动手试试
打开任意一个模型托管站(或者本地跑 transformers),找模型卡上的这几行:
- 参数规模——确认 B 的数量级
- 上下文长度——注意单位和上一节的「词元」对不对得上
- 训练用的词表大小——比如 32000 还是 151936
- 文件列表里最大的那几个权重文件,加起来多少 GB
第 4 步我建议你真算一下。用第 1 步的数字乘以 2 字节,误差不会超过百分之十几。看着这个数字你就明白,为什么本地跑不动一个「7B」,也明白为什么量化是个人用户唯一的出路。
下一站
这一层到这儿。前面八页讲的是它怎么工作,接下来我们要讲它会怎么坏。