周一周三更新干货,周五闲聊外加本周 AI 新闻、论文、工具整理,关注后每周来拿。
之前写的一些干货内容我写了本小册子《看图学大模型》,里面包括了大模型的一些基础知识讲解。关注下面公众号,回复“看图学大模型”获取最新版 PDF。
11
问题
大模型的参数量为什么设计成 7B,13B,33B,65B 等如此怪异的数字?
很多答案都是从推理出发,认为之所以这么设计,是为了适配常见的显卡。
比如,采用半精度的话
剩余的显存可以用来放 KV Cache, 还有其他的一些功能性显存占用,比如 beam search 等。
这么回答也算合理,但是只能算是回答了一个方面,而且不是最重要的方面。
我们在分析的问题的时候,一定要溯源,先找到第一个这么设计的模型。
是谁呢?GPT 3。
GPT 3 当时选定了 6.7B, 13B, 和 175 B。后面复现的人得做对比实验吧,那自然要对标 GPT 3,不然一个 6.7 B,一个 10 B,那对比起来也没什么意义。
所以这些参数的设定可以说是从 GPT 3 传下来的,因为大家都想和 GPT 3 PK 一下。所以那个时候很多模型都是 7B 和 13 B 左右,但是略有差异,也许是 6B,也许是 14B。
后来到了 Meta 手里,又加了 33 B 和 65 B 两个模型。但是 Meta 发布 Llama 之后,模型结构基本都已经固化了,所以基本都是复用 Llama 的结构了,那自然也就延续了 Llama 的模型大小。
那 GPT 3 为什么选择 这几种尺寸呢?其实论文里有说,但是说的也是含糊。原文为:
We partition the model across GPUs along both the depth and width dimension in order to minimize data-transfer between nodes. The precise architectural parameters for each model are chosen based on computational efficiency and load-balancing in the layout of models across GPU’s.
…
To train the larger models without running out of memory, we use a mixture of model parallelism within each matrix multiply and model parallelism across the layers of the network. All models were trained on V100 GPU’s on part of a high-bandwidth cluster provided by Microsoft.
从这里我们可以获取到如下信息
说实话,那个时候可能压根就没考虑过推理的事情,因为训练完了行不行还不知道呢,当时只能先专注于训练的效率。
根据 GPT 3 给的表格,我们可以估算一下 6.7B 的计算资源。根据 大模型面试必问:“给一个大模型,如何估算训练和推理需要的显存?” 这一篇的公式和工具,如果 batch size per gpu 的大小为4, 预估所需要的显存为:
由于 pipeline 并行可能产生 bubble, 我们先假设 6.7B 的只使用了 Tensor parallel, 假设 tp = 8 的话, 216.1349 G / 8 = 27 G 的显存 在 V100(32G) 上绝对是够了。
当然这里只是根据并行度简单的切分,实际实现的细节上不可能这么完美,会多一点。然后选择 tp = 4, pp = 2 也是可以的,但是效率可能更低一点。
至于 13 B,tp * pp = 8 可能太够,我们假设 tp = 8, pp = 2 的话, 假设每台 gpu 30 G 显存,所以总显存不能超过 480 G,根据计算器我们可以得到,当每台 batch size per gpu = 6 的时候,所需 464.1650 GB, 差不多刚好能运行。但是 6 这个数字不能被 1024 整除,不太好, batch = 8 又刚好放不下。
那假设 batch size per gpu = 16 的话, tp = 8, pp = 4 刚好每台 GPU 需要 28 G 的显存。
当然这都是事后诸葛亮,通过后续的一些材料来推测 GPT 3 是这么训练的。只能是说找了一个相对合理的答案,来说明为什么大模型选择了这样的参数。