为什么LLM模型普遍选择6/7/8/9B、13B和130B这些规模?
近年来,随着自然语言处理(NLP)技术的飞速发展,语言模型(LLM)的规模不断扩大。我们经常听到6B、7B、13B和130B等不同规模的模型,但这些模型大小的选择并非随意,而是深思熟虑后的结果。这些模型大小主要是为了匹配显存和硬件的限制,使得训练和部署更加高效。本文将详细探讨为什么LLM的大小通常设计成这几个档次,并介绍计算显存占用的一些基本方法。
一、模型大小与显存匹配
1.1 6B和7B模型
6B和7B模型的规模是为了适应消费级显卡的显存限制。通常,消费级显卡的显存容量为12GB、16GB或24GB。这些显卡广泛用于个人计算机、科研机构和中小型企业中。6B和7B模型在这些显卡上可以顺利部署和训练。
1.2 13B模型
13B模型的规模设计是为了最大化利用4卡8卡机器的显存和计算资源。以4096长度的输入数据为例,13B模型可以通过数据并行和量化技术部署在A10甚至4090显卡上。13B模型在8卡的机器上可以占满整个系统资源,实现高效的计算和推理。
1.3 超大规模模型
除了常见的6B、7B和13B模型外,行业内还有一些更大规模的模型,如16B、34B、52B、56B、65B、70B、100B、130B、170B和220B。这些模型的规模是根据训练和推理所需的算力设计的,通常用于大型数据中心和超级计算机。对于这些超大规模模型,训练速度的提升可以通过倍增显卡数量来实现。例如,7B模型以8卡为单位进行训练,而70B模型则可以以80卡为单位进行训练。
二、计算显存占用的方法
在选择模型规模时,计算显存占用是一个关键问题。不同的训练框架(如DeepSpeed和Megatron)对显存的占用不同。以下是一个基于Megatron框架的显存占用计算方法。
2.1 Megatron框架的显存占用
Megatron框架的模型和优化器存储系数为18,即模型参数量乘以18等于显存占用。对于13B的模型,其显存占用为13B x 18 = 234GB。这个系数18的来源是:
- 2 (半精度模型参数)
- 4 (单精度梯度)
- 4 (单精度模型参数副本)
- 4 (单精度一阶动量)
- 4 (单精度二阶动量)
2.2 Pipeline并行和Zero并行
在使用Pipeline并行时,模型和优化器的显存占用可以平分到每张显卡上。以13B模型和4096序列长度为例,模型和优化器的显存占用在Megatron框架下是13B x 18 = 234GB。这需要至少4张80GB的显卡才能装下。
在正向传播中间变量的显存占用上,可以用40 x SHL来近似计算,即40 x 4096 (序列长度) x 5120 (隐层维度) x 40 (模型层数) = 34GB。
Zero并行
在Zero并行时,半精度模型参数和单精度梯度每张卡都有,而单精度模型参数副本、一阶动量和二阶动量则平分到每张卡上。因此,显存占用的系数中只有后面的12可以除以Zero并行数,前面的6不能。
假设使用13B模型和4096序列长度,在Megatron框架下,模型和优化器显存占用为234GB。这至少需要4张80GB的显卡来装下。
2.3 进一步优化显存利用
在使用Pipeline并行时,显存占用系数为18除以Pipeline并行数,正向传播的中间变量也平均分配到每张显卡上。因此,可以列出公式:
$$ (13 \times \frac{18}{\text{Pipeline并行数}} + \frac{34}{\text{Pipeline并行数}}) < 80 $$
得到Pipeline并行数至少为4,即需要4张显卡。这时,每张显卡的显存占用为67GB,其中模型和优化器占58.5GB,正向传播占8.5GB。
然而,由于Pipeline并行中的显卡空泡问题,实际显存占用会更高。解决方案是增大显卡数量,例如使用8张显卡,其中每4张显卡组成一个Pipeline并行组,两组之间使用Zero并行。
Tensor并行
除了Pipeline并行,还可以使用Tensor并行(TP)。但TP有两点问题:一是在Transformer结构下,每两次矩阵乘法需要进行一次TP间通信,通信量较大;二是Norm层的参数在每个TP上都必须是完整的,不能切分,会导致部分显存浪费。
尽管如此,TP在模型更大时依然有优势,特别是在单层无法装下的情况下。此外,TP不存在Pipeline并行中的显存不均衡问题,可以将TP开到适合的数量以优化显存利用。
三、总结
LLM模型的规模设计成6B、7B、13B和130B等档次,主要是为了匹配显存和硬件限制,优化训练和推理效率。通过合理选择模型规模和并行策略,可以最大化利用现有硬件资源,提高计算效率。未来,随着硬件技术的不断进步,LLM模型的规模和计算方法也将不断演进,进一步推动NLP技术的发展。