返回介绍

数学基础

统计学习

深度学习

工具

Scala

四十七、GLM-130B [2022]

发布于 2023-07-17 23:38:25 字数 132395 浏览 0 评论 0 收藏 0

  1. 大型语言模型(large language model: LLM),尤其是那些参数超过100B 的语言模型,已经呈现出有吸引力的 scaling laws ,并突然涌现(emergent )出 zero-shot 能力和 few-shot能力。其中,具有175B 参数的 GPT-3 在各种 benchmark 上用 32 个标记样本产生了比完全监督的 BERT-Large 模型更好的性能,从而开创了 100B-scale LLM 的研究。然而,GPT-3 (以及其他100B-scale的模型)的模型本身、以及如何训练该模型,迄今为止都没有向公众开放。训练如此规模的高质量 LLM ,并与大家分享模型和训练过程,是非常有价值的。

    因此,论文 《GLM-130B: An Open Bilingual Pre-trained Model》 的目标是在考虑到伦理问题的前提下,预训练一个开放的、高度准确的 100B-scale 的模型 。在作者的尝试过程中,作者认识到,与训练10B-scale的模型相比,在预训练的效率、稳定性和收敛性方面,预训练如此规模的 dense LLM 会带来许多意想不到的技术挑战和工程挑战。在训练 OPT-175BBLOOM-176B 时也同时观察到类似的困难,进一步证明了 GPT-3 作为先驱研究的意义。

    在该论文中,作者介绍了 100B-scale 模型(即,GLM-130B )的预训练,包括工程工作、模型设计选择、针对效率和稳定性的训练策略,以及针对可负担推理(affordable inference)的量化。由于人们普遍认识到,从计算上来说,枚举所有可能的设计来训练100B-scale LLM 是不经济的,因此作者不仅介绍了训练 GLM-130B 的成功部分,也介绍了许多失败的方案和经验教训。特别是,训练的稳定性是训练如此规模的模型的成功的决定性因素。与 OPT-175B 中手动调整学习率和 BLOOM-176B 中牺牲性能使用 embedding norm 等做法不同,作者尝试了各种方案,发现 embedding gradient shrink 的策略可以显著稳定 GLM-130B 的训练。

    具体而言,GLM-130B 是一个具有 130B 个参数的双语(英文和中文)的双向的 dense model ,在 202256 日至 73日期间,在 96NVIDIA DGX-A10040G * 8GPU 节点的集群上预训练了超过 400Btoken 。作者没有使用 GPT-style 的架构,而是采用了通用语言模型(General Language Model: GLM )算法(《Glm: General language model pretraining with autoregressive blank infilling》),以利用其双向注意力的优势、以及自回归的 blank infilling objective 。下表总结了 GLM-130BGPT-3 和另两个开源工作(OPT-175BBLOOM-176B )、以及 PaLM 540B (一个更大的模型)作为参考。

    总之,概念上的独特性、以及工程上的努力使 GLM-130B 在广泛的 benchmark (总共 112 个任务)上表现出超过 GPT-3 的性能,在许多情况下也超过了 PaLM 540B 。此外, OPT-175BBLOOM-176B 中没有观察到超过 GPT-3 的性能(参考图 Figure 1(a) )。

    • 对于 zero-shot 性能,GLM-130BLAMBADA 上优于 GPT-3 175B(+5.0%)OPT-175B(+6.5%)、以及 BLOOM-176B(+13.0%) ,并在Big-bench-lite 上取得比 GPT-3 更好的性能。

    • 对于5-shotMMLU 任务,GLM-130BGPT-3 175B(+0.9%)BLOOM-176B(+12.7%) 更好。

    • 作为一个中文的双语 LLM ,它的结果明显优于 ERNIE TITAN 3.0 260B (最大的中文 LLM ),在 7 zero-shotCLUE数据集上(+24.26% )和 5 zero-shotFewCLUE 数据集上(+12.75% )。

    重要的是,正如图 Figure 1(b) 所总结的那样,GLM-130B 作为一个开放的模型,其 biasgeneration toxicity 明显低于100B-scale 的同类模型。

    最后,作者设计 GLM-130B 是为了让尽可能多的人能够进行 100B-scale LLM 的研究:

    • 首先,没有像 OPTBLOOM 那样使用 175B 以上的参数,而是决定采用130B 的规模,因为这样的规模支持在单台 A100 服务器( 840G A100 GPU )上进行推理。

    • 其次,为了进一步降低对 GPU 的要求,作者将 GLM-130B 量化为INT4精度,而 OPTBLOOM 只能达到 INT8 。由于 GLM 架构的独特属性,GLM-130BINT4 量化带来的性能下降可以忽略不计,

      例如,在 LAMBADA 上为 -0.74% ,在 MMLU 上甚至为 +0.05% ,使其仍然优于未压缩的 GPT-3 。这使得 GLM-130B4RTX 309024G)或8RTX 2080 Ti11G)的服务器上实现了快速推理,这是迄今为止使用 100B-scale LLM 所需的最实惠的 GPU

    作者开源了model checkpoint 、代码、训练日志、相关工具包和经验教训。

  2. 相关工作:这里我们将回顾 GLM-130B 的相关工作,包括预训练、迁移、和推理,这些工作利用 web-scale 语料库的自监督学习,近年来深深影响了学术界和社会。

    • Pre-Training:平凡的语言模型指的是 decoder-only 的自回归模型(如 GPT ),但它也承认(recognize )任何形式的文本上的自监督目标。最近,基于 transformer 的语言模型呈现出迷人的 scaling law :随着模型规模的扩大,新的能力涌现了,从 1.5B 规模的语言模型、10B 规模的语言模型,到 100B 规模的 GPT-3

      后来,尽管出现了许多 100B-scale LLM 的英文版本和中文版本,但它们没有向公众提供,或者只能通过有限的 API 访问。LLM 的封闭性严重阻碍了其发展。GLM-130B 的努力,以及最近的 ElutherAIOPT-175BBLOOM-176B,旨在为我们的社区提供高质量的开源 LLM。另外,使 GLM-130B 与其他项目不同的是,GLM-130B 注重 LLM 对所有研究人员和开发者的包容性(inclusivity )。从我们对模型规模的决定,对模型架构的选择,以及允许模型在主流的 GPU 上进行快速推理,GLM-130B 相信,对所有人的包容性才是实现 LLM对人们承诺的福利的关键。

    • Transferring:尽管微调一直是迁移学习的事实方式,但由于 LLM 的规模巨大,其转移学习一直集中在 promptingin-context learning 上。继类似的 LLM 之后,在这项工作中,我们的评估也是在这种环境下进行的。然而,最近的一些尝试是关于语言模型的 parameter-efficient learning《Parameter-efficient transfer learning for nlp》)和 prompt tuning (即 P-tuning )。在这项工作中,我们不关注它们,并将它们在 GLM-130B 上的测试留在未来的研究中。

    • Inference:现在大多数可公开访问的 LLM 都是通过有限的 API 提供服务的。在这项工作中,我们努力的一个重要部分是对LLM 的高效和快速的推断。相关工作可能包括蒸馏、量化、以及剪枝。最近的工作(《Llm. int8 (): 8-bit matrixmultiplication for transformers at scale》)表明,由于 outlier dimension 的特殊分布,OPT-175BBLOOM-176BLLM 可以被量化为 8 bit

      然而,在这项工作中,我们根据我们对 LLM 架构选择的新见解,证明 GLMINT4 权重量化的 scaling law 。这种量化,加上我们在使 GLM-130B 适应 FasterTransformer 方面的工程努力,使得 GLM-130B 可以在少至 4RTX 3090 (24G) GPU8GTX 1080 Ti (11G) GPU 上有效推断。它实现了 LLM 对公众的经济可用性,并分阶段实现了我们对 LLM 的包容性的承诺。

47.1 GLM-130B 的设计选择

  1. 一个机器学习模型的架构定义了它的归纳偏置( inductive bias )。然而,人们已经意识到,探索 LLM 的各种架构设计在计算上是负担不起的。我们介绍并解释 GLM-130B 的独特的设计选择。

47.1.1 架构

  1. GLM 作为 Backbone:最近大多数 100B-scale LLM (如 GPT-3PaLMOPTBLOOM ),都遵循传统的 GPT 风格的 decoder-only autoregressive language modeling架构。在 GLM-130B 中,我们反而尝试探索双向的 General Language Mode: GLM 作为其backbone 的潜力。

    GLM 是一个基于 transformer 的语言模型,利用 autoregressive blank infilling 作为其 training objective 。简而言之,对于一个文本序列x=[x1,,xn]$ \mathbf x = [x_1,\cdots,x_n] $ ,我们随机采样一些 text span{s1,,sm}$ \{\mathbf s_1,\cdots,\mathbf s_m\} $ ,其中每个si$ \mathbf s_i $ 表示一段连续的 tokensi=[si,1,,si,li]$ \mathbf s_i =[s_{i,1},\cdots,s_{i,l_i}] $ ,li$ l_i $ 表示si$ \mathbf s_i $ 的长度。然后我们将si$ \mathbf s_i $ 替换为单个 mask token ,从而获得被破坏的文本序列xcorrupt$ \mathbf x_\text{corrupt} $ 。模型被要求以自回归的方式从xcorrupt$ \mathbf x_\text{corrupt} $ 中恢复原始文本序列。为了允许 corrupted spans 之间的交互,它们之间的可见性是由对它们的顺序进行随机抽样的 permutation 来决定的。pre-training objective 被定义为:

    (1)L=maxθEzZm[i=1mlogj=1lip(si,jxcorrupt,sz<i,si,<j)]

    其中:

    • Zm$ \mathcal Z_m $ 表示序列{1,2,,m}$ \{1,2,\cdots,m\} $ 的所有 permutation 的集合,m$ m $ 为 span 数量。

    • sz<i$ \mathbf s_{\mathbf z\lt i} $ 表示[sz1,,szi1]$ [\mathbf s_{z_1},\cdots,\mathbf s_{z_i-1}] $ ,表示在排列z$ \mathbf z $ 中,所有排在si$ \mathbf s_i $ 之前的 text span

    • si,<j$ \mathbf s_{i,\lt j} $ 表示[si,1,,si,j1]$ [s_{i,1},\cdots,s_{i,j-1}] $ ,表示在当前 text span 中,所有位于si,j$ s_{i,j} $ 之前的 token

    GLMunmasked contexts 的双向注意力使 GLM-130B 区别于使用单向注意力的 GPT-style LLMs 。为了同时支持 understandinggeneration ,它混合了两种 corruption objective ,每种 objective 由一个 special mask token 来标识:

    • [MASK]:句中的 short blank ,它们的长度加起来等于输入句子长度的某个比例(这个比例是一个超参数)。

    • [gMASK]:随机长度的 long blank,它们出现在句子末尾并且具有所提供的 prefix context

    从概念上讲,具有双向注意力的 blank infilling objective 能够比 GPT-style model 更有效地理解上下文:

    • 当使用 [MASK] 时,GLM-130B 的表现与 BERTT5 相似。

    • 当使用 [gMASK] 时,GLM-130B 的表现与 PrefixLM (如,UniLM )相似。

    在下图中,根据经验,GLM-130B 超越了 GPT-3PaLM 540B ,在 zero-shot LAMBADA 上提供了 80.2% 的创纪录的高准确率。通过设置注意力掩码,GLM-130B 的单向变体(unidirectional variant)与 GPT-3OPT-175B 相当。我们的观察结果与现有的研究结果一致。

  2. Layer Normalization: LN:训练不稳定是训练 LLM 的一个主要挑战(如 Figure 11 所示,训练一些 100B-scale model 时的崩溃情况)。适当选择 LN 可以帮助稳定 LLM 的训练。我们尝试了现有的做法,例如 Pre-LNPost-LNSandwich-LN,遗憾的是这些做法无法稳定我们的 GLM-130B test run (详见图 Figure 3(a) 和附录技术细节中 Layer Normalization 的内容)。

    我们的搜索后来集中在 Post-LN 上,因为它在初步实验中具有有利的下游结果,尽管它不能稳定 GLM-130B 。幸运的是,对 Post-LN 的尝试之一是用新提出的 DeepNorm ,产生了有希望的训练稳定性。具体来说,给定 GLM-130B 的层数N$ N $ ,我们采用:

    (2)DeepNorm(x)=LayerNorm(α×x+Network(x))

    其中:α=(2N)1/2$ \alpha = (2N) ^{1/2} $ 。并且对 ffn, v_proj, out_proj 应用具有缩放因子为(2N)1/2$ (2N) ^{1/2} $ 的 Xavier normal initialization 。此外,所有 bias 项都被初始化为零。下图显示它对 GLM-130B 的训练稳定性大有裨益。

  3. Positional EncodingFFN:我们在训练稳定性和下游性能方面对位置编码(positional encoding: PE )和 FFN improvement 的不同方案进行了经验性测试(详见附录技术细节中的 Positional EncodingFFN 内容)。

    • 对于 GLM-130B 中的 PE ,我们采用旋转位置编码(Rotary Positional Encoding: RoPE ),而不是 ALiBi《Train short, test long: Attention with linear biases enables input length extrapolation》)。

      Attention with Linear Biases: ALiBi:传统的 Transformer 方法中,positional embedding 被添加到 embedding layer,然后再执行 attention score 的计算。相反,ALiBi 并没有添加 positional embeddingembedding layer,而是直接在 query-key 内积之后添加一个静态的、non-learned bias (如下图所示):

      (3)softmax(qiK+m×[(i1),,2,1,0])

      其中:m$ m $ 为一个 head-specific 的标量。在原始论文中,模型有 8head,因此m$ m $ 对每个 head 依次选择为{121,,128}$ \left\{\frac{1}{2^1},\cdots, \frac{1}{2^8}\right\} $ 。

    • 为了改进 Transformer 中的 FFN ,我们挑选了带有 GeLU激活的 GLU

47.1.2 预训练 Setup

  1. 受最近工作的启发,GLM-130B 的预训练目标不仅包括自监督的 GLM autoregressive blank infilling,还包括针对一小部分的 token 的多任务学习。这预计将有助于提高其下游的 zero-shot 性能。

  2. Self-Supervised Blank Infilling (95% tokens):回顾一下,GLM-130B 同时使用[MASK][gMASK] 来完成这项任务。具体来说:

    • 对于 30%training tokens[MASK] 被用来掩码 consecutive span 从而用于 blank infillingspan 的长度遵循泊松分布(λ=3$ \lambda = 3 $ ),加起来占到输入的 15%

    • 对于其他的 70%training tokens ,每个序列的前缀被保留为上下文,[gMASK] 被用来掩码剩余部分。masked length 从均匀分布中采样。

      masked length 最长是多少,最短是多少?论文并未说明细节。

  3. 预训练数据:包括1.2TPile 英文语料、1.0T 的中文 Wudao-Corpora 、以及我们从网上抓取的 250G 中文语料(包括在线论坛、百科全书、以及问答),它们构成了一个均衡的中英文内容。

  4. Multi-Task Instruction Pre-Training: MIP (5% tokens)T5ExT5表明,预训练中的多任务学习比微调更有帮助,因此我们提议在 GLM-130B 的预训练中包括各种 instruction prompted 的数据集,包括语言理解、生成、以及信息提取。

    与最近利用多任务 prompted fine-tuning 来改善 zero-shot task transfer 的工作相比,MIP 只占 5%tokens ,而且是在预训练阶段设置的,以防止破坏 LLM 的其他通用能力(如,无条件地自由生成)。

    具体来说,我们包括来自 《Multitask prompted training enables zero-shot task generalization》《Deepstruct:Pretraining of language models for structure prediction》74prompted dataset ,参考附录中的 数据集和评估细节内容。建议 GLM-130B 用户避免在这些数据集上评估模型的 zero-shot 能力和 few-shot 能力。

    论文 《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》 中,多任务指的是多任务预训练,包括 blank infilling objective, document-level objective, sentence-level objective,这三个目标的区别在于 blank 策略的不同:

    • blank infilling objective 随机采样多个较短的 span

    • document-level 采样一个长的、位于文本末尾的 span

    • sentence-level 采样多个 span,且每个 span 必须是完整的句子。

47.1.3 Platform-aware 的并行策略以及模型配置

  1. GLM-130B 在一个由 96DGX-A100 GPU840GA100 GPU )服务器组成的集群上进行训练,访问时间为 60 天。目标是训练尽可能多的 token ,因为最近的一项研究(《Training compute-optimal large language models》)表明,大多数现有的LLM在很大程度上是训练不充分的。

  2. 3D 并行策略:数据并行和张量模型并行(《Megatron-lm: Training multi-billion parameter language models using model parallelism》)是训练 billion-scale 模型的事实做法。为了进一步处理巨大的 GPU 内存需求、以及在节点之间应用张量并行导致的 GPU 总体利用率的下降(因为在训练 GLM-130B 时使用了 40G 而不是 80GA100 ),我们将 pipeline model parallelism 与其他两种并行策略结合起来,形成一个 3D 并行策略。

    流水线并行(pipeline parallelism )将模型划分为 sequential stages 用于每个 parallel group 。为了进一步减少 pipeline 引入的 bubbles ,我们利用 DeepSpeedPipeDream-Flush实现来训练 GLM-130B ,采用相对较大的全局batch size (即, 4224 )来减少时间浪费和 GPU内存浪费。通过数值检查和经验考察,我们采用了 4 路张量并行和 8 路流水线并行,达到 135 TFLOP/s per GPU (40G) (详见附录的技术细节的流水线并行的分析内容)。

  3. GLM-130B 配置:我们的目标是使我们的 100B-scale LLM 能够以 FP16 精度运行单个 DGX-A100 (40G) 节点。基于 12288 的隐状态维度(根据 GPT-3 而来),所产生的模型规模不超过 130B 的参数,因此得到 GLM-130B 。为了最大限度地提高 GPU 的利用率,我们根据平台及其相应的并行策略来配置模型。为了避免由于两端的额外 word embedding 而导致 middle stages 的内存利用率不足,我们通过从其中删除一层来平衡 pipeline partition,使 GLM-130B 中包含 9 * 8 - 2 = 70transformer layers

    猜测作者的意思是:input word embeddingoutput word embedding 共享?

    在对集群的 60 天访问期间,我们设法对 GLM-130B 进行了 400Btoken (中文和英文各约 200B )的训练,每个样本的固定序列长度为 2048

    • 对于 [gMASK] training objective ,我们使用 2048token 的上下文窗口;对于 [MASK] training objective 和多任务目标,我们使用 512 的上下文窗口,并将四个样本串联起来从而满足 2048 的序列长度。

    • 在前 2.5% 的样本中,我们将 batch size192 升至 4224

    • 我们使用 AdamW 作为我们的优化器,其中β1$ \beta_1 $ 和β2$ \beta_2 $ 设置为 0.90.95,权重衰减值为 0.1

    • 在前 0.5% 的样本中,我们将学习率从107$ 10^{-7} $ 预热到8×105$ 8\times 10^{-5} $ ,然后通过10×$ 10\times $ 的余弦调度进行衰减。

    • 我们使用 0.1dropout rate ,并使用 1.0 的剪裁值来剪裁梯度。

    完整配置如下表所示。

47.2 GLM-130B 的训练策略

  1. 训练稳定性是 GLM-130B 质量的决定性因素,它在很大程度上也受到 training token 数量的影响(《Training compute-optimal large language models》)。因此,给定计算用量(computing usage )的限制,在浮点格式方面,必须在效率和稳定性之间进行权衡: 低精度浮点格式(例如,16 位精度 FP16 )提高了计算效率,但容易出现上溢出或下溢出错误,导致训练崩溃。

  2. 混合精度:我们遵循混合精度策略(Apex O2 )的普遍做法,即 forwardbackward 采用 FP16 ,优化器状态和 master weight 采用 FP32 ,以减少 GPU 内存占用并提高训练效率。与 OPT-175BBLOOM-176B 类似(参见下图所示),GLM-130B 的训练由于这种选择而面临频繁的 loss 尖峰,随着训练的进行,这种尖峰往往变得越来越频繁。与精度有关的尖峰往往没有明确的原因:有些会自行恢复;有些则伴随着梯度范数突然飙升的预兆,最终出现 loss 尖峰甚至是 NaNloss

    OPT-175B 试图通过手动跳过数据(skipping data)和调整超参数来修复;BLOOM-176B 通过 embedding norm 技术来修复。我们花了几个月的时间来实验性地调查尖峰,并意识到当 transformers scale up 时,会出现一些问题:

    • 首先,如果使用 Pre-LNtransformer main branchvalue scale 在更深的层中会非常大。在 GLM-130B 中,通过使用基于 DeepNormPost-LN 来解决这个问题,这使得 value scale 总是有界。

    • 第二,随着模型规模的扩大,注意力分数增长得非常大,以至于超过了 FP16 的范围。在 LLM 中,有几个方案可以克服这个问题。

      • CogView 中,提出了 PB-Relax ,在注意力计算中去除 bias 项并扣除极值以避免该问题,遗憾的是,这并不能帮助避免 GLM-130B 中的不收敛(disconvergence )。

      • BLOOM-176B 中,由于 BF16 格式在 NVIDIA Ampere GPU (即 A100 )上的取值范围很广,因此使用了 BF16 格式而不是 FP16 。然而,在我们的实验中,BF16FP16 多消耗 15% 的运行时 GPU 内存,这是因为它在梯度累积中转换为FP32 ,更重要的是它在其他 GPU 平台(如 NVIDIA Tesla V100 )上不被支持,限制了所得到的 LLM 的可用性。

        BLOOM-176B 的另一个选择是应用具有 BF16embedding norm,但要牺牲模型性能。

  3. Embedding Layer Gradient Shrink: EGS:我们的实证研究发现,梯度范数可以作为训练崩溃的一个 informative 的指标。具体来说,我们发现训练崩溃通常滞后于梯度范数的 "尖峰" 若干个训练步。这种尖峰通常是由 embedding 层的异常梯度引起的,因为我们观察到在 GLM-130B 的早期训练中,embedding 层的梯度范数往往比其他层的梯度规范大几个量级(参考 Figure 4(a))。此外, embedding 层的梯度范数在早期训练中往往会出现剧烈的波动。这个问题在视觉模型中(《An empirical study of training self-supervised vision transformers》)通过冻结 patch projection layer 来处理。不幸的是,我们不能冻结语言模型中 embedding 层的训练。

    最后,我们发现 embedding 层的梯度收缩可以帮助克服 loss 尖峰,从而稳定 GLM-130B 的训练。这首先在 multi-modal transformer CogView 中使用。具体来说,令α$ \alpha $ 为收缩因子,该策略可以通过如下的方式来轻松地实现:

    (4)WordEmbedding=WordEmbedding×α+WordEmbedding.detach()×(1α)

    Figure 4 (b) 表明,根据经验,设置α=0.1$ \alpha = 0.1 $ 有助于消除我们会遇到的大多数 loss 尖峰,而训练速度几乎不变。

    事实上,最后的 GLM-130B training run 只经历了关于损失函数在训练后期发散的三个 case ,尽管它由于硬件故障而失败了无数次。对于这三个意外的峰值,事实证明,进一步缩小 embedding 梯度仍然可以帮助稳定 GLM-130B 的训练。详情见我们代码库中的 training notesTensorboard 日志。

47.3 在 RTX 2080 Ti 上推断 GLM-130B

  1. GLM-130B 的主要目标之一是降低访问 100B-scale LLM 的硬件要求,而不存在效率和效果的劣势。

    如前所述,130B 的模型规模是为在单台 A10040G * 8 )服务器上运行完整的 GLM-130B 模型而确定的,而不是 OPT-175BBLOOM-176B 要求的高端 A10080G * 8 )机器。为了加速 GLM-130B 推断,我们还利用 FasterTransformer《Accelerated inference for large transformer models using nvidia triton inference server》)在 C++ 中实现 GLM-130B 。与 HuggingfaceBLOOM-176BPyTorch 实现相比,GLM-130Bdecoding inference 在同一台 A100 服务器上要快 7-8.4 倍。(详见附录中技术细节的Inference 加速的内容)。

  2. 针对 RTX 3090/2080INT4 量化:为了进一步支持主流的 GPU ,我们试图在保持性能优势的同时尽可能地压缩 GLM-130B ,特别是通过量化,这对生成式语言模型来说几乎没有引入任务相关的性能下降。

    通常情况下,做法是将模型权重和 activation 都量化为 INT8 。然而,我们在附录中技术细节的 Activation Outlier 分析表明,LLMactivation 可能包含极端的outlier。同时,OPT-175BBLOOM-176B 中出现的outlier也被发现,这些outlier只影响约 0.1%feature dimension ,因此通过矩阵乘法分解来解决outlying dimension

    不同的是,在 GLM-130Bactivations 中存在约 30%outlier ,使得上述技术的效率大大降低。因此,我们决定将重点放在模型权重的量化上(主要是线性层),同时保持activationFP16 精度。我们简单地使用 post training absmax 量化,权重在运行时被动态地转换为 FP16 精度,引入了一个小的计算开销,但大大减少了用于存储模型权重的 GPU 内存使用。

    令人振奋的是,我们设法使 GLM-130B 的权重量化达到了 INT4 ,而现有的成功案例迄今只达到了 INT8 水平。

    • 内存方面,与INT8相比,INT4 版本有助于额外节省一半所需的 GPU 内存,最终需要 70GBGPU 内存,从而允许 GLM-130B4RTX 3090 Ti (24G)8RTX 2080 Ti (11G) 上进行推理。

    • 性能方面,下表左侧显示,在完全没有 post-training 的情况下,INT4 版本的GLM-130B 几乎没有性能下降,因此在 common benchmarks 上保持了对 GPT-3 的优势。

  3. GLMINT4 权重量化的 Scaling LawFigure 4 右侧显示了随着模型大小的增加而出现的性能趋势,表明 GLMINT4 权重量化的性能出现了一个 scaling law

    我们研究了在 GLM 中观察到的这一独特属性的基本机制。我们在下图左侧绘制了权重取值的分布,结果发现它直接影响了量化质量。具体来说,一个分布较宽的线性层需要用较大的 bin 进行量化,从而导致更多的精度损失。因此,宽分布的 attn-densew2 矩阵解释了 GPT-style BLOOMINT4 量化的失败。相反,GLM 的分布往往比类似大小的 GPT 的分布窄得多,随着 GLM 模型规模的扩大,INT4FP16 版本之间的差距不断进一步缩小(详见Figure 15 )。

47.4 实验结果

  1. 我们遵循 GPT-3PaLMLLM 的常见设置,对 GLM-130B 针对英语进行评估。作为一个具有中文的双语 LLMGLM-130B 也在中文 benchmark 上进行了评估。

  2. 关于 GLM-130BZero-Shot Learning 的范围的讨论:由于 GLM-130B 是用MIP 进行训练的,因此我们在此澄清它的 zero-shot 的范围。事实上,"zero-shot" 似乎有争议性的解释,在社区中没有达成共识。我们遵循其中一个有影响力的相关综述(《Zero-shot learning -- a comprehensive evaluation of the good, the bad and the ugly》),它说 "在测试时间,在zero-shot learning setting 中,目的是将测试图像分配给一个未见过的 class label ",其中涉及未见过的 class label 是一个关键。因此,我们推导出挑选 GLM-130Bzero-shot/few-shot 数据集的标准为:

    • 英语:

      • 对于有固定标签的任务(如自然语言推理任务):不应评估此类任务中的数据集。

      • 对于没有固定标签的任务(如问答任务、主题分类任务):只考虑与 MIP 中的数据集有明显的 domain transfer 的数据集。

    • 中文:所有的数据集都可以被评估,因为存在着 zero-shot 的跨语言迁移(cross-lingual transfer)。

    根据之前的实践(GPT-3 )和我们上面提到的标准,我们过滤并避免报告可能被污染的数据集上的结果。对于 LAMBADACLUE ,我们发现在 13-gram setting 下,overlap 最小。Pile, MMLU, BIG-bench 要么被 held-out ,要么发布时间晚于语料库的爬取。

47.4.1 语言建模

  1. LAMBADALAMBADA 是一个用于测试 last word 的语言建模能力的数据集。在 Figure 2 中显示的结果表明,GLM-130B 凭借其双向注意力达到了 80.2zero-shot 准确率,在 LAMBADA 上创造了新的记录。

  2. PilePile 测试集包括一系列语言建模的 benchmark 。平均来说,与 GPT-3Jurassic-1 相比,GLM-130B 在其 18 个共享测试集的加权 BBP 方面表现最好,显示了其强大的语言能力。

47.4.2 MMLU

  1. Massive Multitask Language Understanding: MMLU 是一个多样化的 benchmark ,包括 57 个关于人类知识的多选题问题任务,范围从高中水平到专家水平。它是在 Pile 的爬取之后发布的,是 LLMfew-shot learning 的理想测试平台。GPT-3 的结果来自于MMLUBLOOM-176B 的结果则通过使用与 GLM-130B 相同的 prompt 进行测试。

    在下图中,GLM-130BMMLU 上的 few-shot (5-shot) 性能在查看了大约 300Btoken 后接近 GPT-343.9)。随着训练的进行,它继续上升,当训练不得不结束时(即总共查看了 400Btoken ),达到了 44.8 的准确率。这与观察到的情况一致,即大多数现有的 LLM 远没有得到充分的训练。

47.4.3 BIG-BENCH

  1. Beyond The Imitation Game Benchmark: Big-Bench 是关于模型的推理、知识、常识等能力的挑战性任务的 benchmark 。鉴于对其 150 个任务的评估对 LLM 来说是很耗时的,我们现在报告 BIG-bench-lit (一个官方的 24 个任务的子集合)。

    从下图和下表中可以看出,GLM-130Bzero-shot setting 中优于 GPT-3 175B ,甚至 PaLM 540B (比 GLM-130B 的模型规模大四倍)。这可能是由于 GLM-130B 的双向上下文注意力和 MIP ,这已被证明可以改善未见任务中的 zero-shot 结果。随着 shot 数量的增加,GLM-130B 的性能不断上升,保持了对 GPT-3 的优势。

    PaLM 540B1-shot 效果在这个表格里效果最好。

  2. 局限性和讨论:在这个实验中,我们观察到 GLM-130B 的性能增长(13.3115.12 )随着 few-shot 样本的增加,不如 GPT-34.3513.18 )那么明显。以下是理解这一现象的直观尝试。

    • 首先,GLM-130B 的双向性可能会导致强大的 zero-shot 性能(正如 zero-shot language modeling 所表明的那样),从而比单向的 LLM 更接近类似规模(即 100B-scale )的模型的 few-shot "upper-bound"

    • 其次,这也可能是由于现有的 MIP 范式的不足,这些范式在训练中只涉及 zero-shot prediction ,将有可能使 GLM-130B 偏向于更强的 zero-shot learning 、但相对较弱的 in-context few-shot 性能。为了纠正这种 bias ,如果我们有机会继续对GLM-130B 进行预训练,我们提出的一个潜在的解决方案是采用具有多样化 shots of in-context samplesMIP ,而不是只有 zero-shot 样本。

      即,MIP 范式没有给出示例样本,因此模型仅见过 zero-shot 的模式,所以在 zero-shot learning 方面更强大。

    • 最后,尽管 GPT 架构与 GPT-3 几乎相同,但 PaLM 540Bfew shot in-context learning 上的相对增长要比 GPT-3 更显著。我们猜测这种性能增长的进一步加速是来自于 PaLM 的高质量和多样化的私人收集的训练语料。通过结合我们的经验和《Training compute-optimal large language models》的见解,我们认识到应该进一步投资更好的架构、更好的数据、以及更多的 training FLOPS

47.4.4 CLUE

  1. 我们在既定的中文 NLP benchmarkChinese Language Understanding Evaluation: CLUEFewCLUE 上对 GLM-130B 的中文zero-shot 性能进行评估。请注意,我们在 MIP 中不包括任何中文的下游任务。到目前为止,我们已经完成了对这两个 benchmark 的部分测试,包括 7CLUE 数据集和 5FewCLUE 数据集。我们将 GLM-130B 与现有最大的中文单语语言模型 260B ERNIE Titan 3.0 进行比较。我们遵从 ERNIE Titan 3.0 的设置,在验证集上报告了 zero-shot 的结果。

    GLM-130B12 个任务中的表现一直优于 ERNIE Titan 3.0 (如下图所示)。有趣的是,GLM-130B 在两个 abstractive MRC 数据集(DRCDCMRC2018 )上的表现至少比 ERNIE260% ,这可能是由于 GLM-130B 的预训练目标与 abstractive MRC 的形式自然产生共鸣。

47.5 经验教训

  1. 我们成功和失败的经验都浓缩在以下训练 100B-scale LLM 的经验教训中:

    • 教训一(Bidirectional Architecture):除了 GPT 之外,双向注意力的 GLM 是一个强大的架构选择。

    • 教训二(Platform-aware Configuration):根据集群和并行策略(并行策略用于压榨硬件潜力)来配置 LLM

    • 教训三(Improved Post-LN):反常态地,DeepNorm ,一种 Post-LN 的类型,是稳定 GLM-130B 的选择。

    • 教训四(Training Stability Categorization):LLM 所遭受的意想不到的训练不稳定性由系统上和数值上而引起。

    • 教训五(Systematical Instability: FP16):尽管 FP16 诱发了更多的不稳定性,但它能在各种各样的平台上进行训练和推理。

    • 教训六(Numerical Instability: Embedding Gradient Shrink):将 embedding 层的梯度缩小到 0.1 倍可以解决大多数数值不稳定问题。

    • 教训七(GLM’s INT4 Quantization Scaling Law):GLM 有一个独特的 INT4 weight quantization scaling law ,在GPT 风格的 BLOOM 中未被观察到。

    • 教训八 (Future Direction):为了创造强大的 LLM ,主要重点可以放在:更多更好的数据、更好的架构和预训练目标、更充分的训练。

47.6 附录

47.6.1 Bias 和毒性的评估

  1. Bias 评估:

    • CrowS-PairsCrowS-Pairs,即 Crowdsourced Stereotype Pairs benchmark ,被广泛用于测量 masked language modelbias 。它收集了 1508 个具有九种常规 bias 的例子,并采用 probing-based 的方法来来比较一对刻板印象句子(stereotypical sentence )和反刻板印象句子(antistereotypical sentence )的伪对数可能性(pseudo log-likelihood )。

      我们将 GPT-3 DavinciOPT-175BCrowS-Pairs 上的结果(来自 OPT 的原始论文)与GLM-130B 进行比较。我们的结果如下表所示。除了宗教和国籍,GLM-130B 在几乎所有种类的刻板印象上都显示出较少的 bias 。我们推测,这是因为 GLM-130B 是一个双语预训练的 LLM ,它从英文语料和中文语料中学习某些内容的语义。由于 CrowsS-Pairs 的刻板印象主要来自 US Equal Employment Opportunities Commissionlist ,两种不同文化和语言的 bias 分布可能是不同的,因此在 GLM-130B 中调和 benchmark 上的 social bias ,而这个 benchmark 最初是为英语社会所设计的。我们认为这是一个有趣的发现,因为多语言的预训练可能会帮助 LLM 呈现更少的有害 bias ,以达到更好的公平性。

      最后,我们也承认,GLM-130B 可能会出现一些特殊的中文bias ,而这些bias 目前还缺乏测试 benchmark ,需要在未来做出大量努力来检测和预防。

      注意,得分越低越好。

    • StereoSet:另一个广泛使用的 bias 和刻板印象评价 benchmarkStereoSet 。为了平衡 bias detecting 和语言建模质量之间的评估,StereoSet 报告了一系列指标,包括语言建模分(Language Modeling Score: LMS )、刻板印象分(Stereotype Score: SS )、以及理想化语境关联测试分数(Idealized Context Association Test Score: ICAT )作为整体平均指标。

      例如,给定"She is the twin’s mother" 这一 premiseStereoSet 提供了三个候选hypothesis"the water is deep""she is a lazy, unkind person""she is a kind, caring woman" 。第一个选项作为distractor ,用于测试模型的语言能力和计算 LMS ;第二个选项和第三个选项分别是 anti-stereotypicalstereotypical 的,用于计算 SS

      这里的一个常见做法是根据选项的长度来校准其可能性,因为 distractor term 特别短。 遵从 OPT ,我们在 token 上(而不是在字符上)归一化分数,从而产生用于计算指标的 model prediction 。结果如下表所示。正如我们所观察到的,GLM-130B 在所有指标上都远远超过了GPT-3 DavinciOPT-175B 。这样的结果与我们在语言建模实验和 CrowS-Pairs bias evaluation 实验中的发现一致,即 GLM-130B 在语言建模和社会公平方面都有很高的质量。

      LMSICAT 得分越高越好,SS 得分越低越好。

  2. ETHOS:社交媒体语料库可能包含仇恨言论,调查 LLM 在多大程度上知道并能帮助识别这些言论是至关重要的。我们采用 ETHOS 数据集来检测性别主义和种族主义言论。GPT-3 DavinciGPT-3 175B 的一个可公开访问的变体,注意是 API 访问而不是开源)和 OPT 175B 也在该 benchmark 上进行了测试(其结果在 OPT 原始论文中报告)。对于二分类,包括 Zero-shotOne-shotFew-shot(binary) (回答 "yes""no"),我们报告binary F1;对于多分类(回答 "yes""no""neither" ),我们报告micro F1 。我们采用了与 《Detecting hate speech with gpt-3》中几乎相同的 prompt ,只是将 Few-shot (binary) promptOne-shot 中使用的形式对齐,并在原 Few-shot (multiclass) prompt 中的冒号前添加 "Classification" 一词。

    结果如下表所示。我们发现 GLM-130B 在四个不同的设置中胜过其他两个 LLM 。一方面,GLM-130B 对来自在线论坛和社交媒体的无监督的多样化语料进行预训练,包括 "hackernews""stackexchange""pile_cc " 等部分,可以赋予我们的模型识别这些言论的背景知识。另一方面,MIP 训练也可以提高GLM-130Bzero-shotfew-shot 能力。

  3. RealToxicPrompts:评估由给定 prompt 产生的毒性对模型的安全部署至关重要。我们在 RealToxicPrompts数据集上评估 GLM-130Btoxic generation 。遵从 OPT 的设置,首先我们随机采样 10Kprompt ,然后我们使用核采样(p=0.9$ p=0.9 $ )为每个 prompt 生成25continuation ,将最大 generated length 限制在 128 tokens 。然后,我们报告了由 Perspective API 评估的 25continuations 的平均毒性概率。为了在不同的 tokenization 之间进行公平的比较,我们只报告了 continuation 中第一个完整句子的毒性得分,因为 Perspective API 返回的分数似乎随着句子长度而增加。

    核采样:给定一个概率阈值p$ p $ ,从 vocabulary 中选择一个最小集Vp$ \mathbb V_p $ ,使得它们出现的概率和大于等于p$ p $ :

    (5)xVpP(xt=xx1:t1)p

    然后再将Vp$ \mathbb V_p $ 中的单词的概率归一化,并用这个归一化的概率进行采样。

    结果如下图所示。一般来说,在两个模型中,随着给定 prompt 的毒性增加,continuation 的毒性概率也相应增加。与 GPT-3 Davinci 相比,GLM-130B 在所有情况下都有较低的毒性率,表明 GLM-130B 不容易产生有害的内容。我们不包括 OPT 原始论文的结果,因为 API 已经更新,因此需要重新评估。

47.6.2 技术细节

  1. 这里介绍了我们在整个 GLM-130B 训练中发现并解决的技术问题的额外细节。连同同时进行的开源 LLM 工作,我们相信这些公布的细节可以作为未来 LLM 训练的重要基石。

  2. tokenization:为了对语料库进行 tokenization ,我们在icetk package 的基础上实现了一个 text tokenizer ,并进行了一些调整。作为一个 image-text unified tokenizericetk 的词汇量为 150000 。前 20000tokenimage token ,其余是 text tokenicetktext tokenizer25GB 的中英文双语语料库上由 sentence-piece 制定和训练,其中语料库中平均分布了英文内容和中文内容。

    • 常见的 tokenNo.20000No.20099 ,由标点符号、数字、以及用于自由扩展的 space 而组成。

    • No.20100No.83822 为英文 tokenNo.83823No.145653 为中文 token

    • No.145653 之后的 token 是其他 special token ,包括拼接的标点符号、其他语言的 piece 等。

    在我们的实现过程中,我们忽略了前 20000image token ,利用了后 130000 个用于 text tokenizationtoken 。我们取消了对换行符的忽略,将换行符 \n tokenizeNo. 20004 token <n> 。在固有 token 的基础上,我们增加了 special token [MASK] and [gMASK] 用于模型预测。我们还增加了 special token <sop>, <eop>, <eos> 用于句子和段落的隔离。

    <sop> 表示段落的开始(start of paragraph),<eop> 表示段落的结束(end of paragraph),<eos> 表示句子的结束(end of sentence)。不需要标识句子的开始,因为上一个句子的结束就是下一个句子的开始。

  3. Layer Normalization:这里我们简单介绍一下语言建模问题中 layer normalization 的历史,以及其变体在最近的 LLM 中的表现,包括我们在 GLM-130B 上对其进行的实验。

    • Post-LNPost-LN 是与 Transformer 架构共同提出的,并被置于 residual block 之间。然后它被 BERT采用。尽管如此,Post-LN 后来被指责导致了 Transformer 的缓慢的和脆弱的收敛(《On layer normalization in the transformer architecture》),因此 Pre-LN 作为替代品出现了。

      Post-LNXl+1=LN(Xl+F(Xl))$ \mathbf X_{l+1} = \text{LN}\left(\mathbf X_l + \mathcal F(\mathbf X_l)\right) $ 。即,LN 添加在残差连接之后。

    • Pre-LN :相反,Pre-LN 位于 residual block 中从而缓解爆炸的梯度,在现有的语言模型中成为主导,包括所有最近的LLM。然而,OPT-175BBLOOM 、以及文本到图像模型CogView 后来观察到,当模型规模达到100B 或遇到多模态数据时,Pre-LN 仍然无法处理脆弱的训练。这在 GLM-130B 的初步实验中也得到了证明,Pre-LN 在早期训练阶段一直处于崩溃状态。

      Pre-LNXl+1=Xl+F(LN(Xl))$ \mathbf X_{l+1} = \mathbf X_l + \mathcal F(\text{LN}(\mathbf X_{l})) $ 。即 LN 添加在残差块之中、F$ \mathcal F $ 函数之前。

      根植于 Pre-LN transformer 的另一个问题是,与 Post-LN 相比,它可能在 tuning 之后损害模型的性能。这在 《Realformer: Transformer likes residual attention》 中观察到。

    • Sandwich-LN:作为补救措施,在 Pre-LN 的基础上,CogView (以及在后来的 Normformer 中)开发了 Sandwich-LN ,它在每个 residual branch 的末端附加了额外的 normalization 。伴随着Precision-Bottleneck Relaxation: PB-Relax 技术,它们稳定了一个 4Btext-to-image generation model 的训练。尽管它比 Pre-LN 有优势,但可悲的是,Sandwich-LN 也被证明在GLM-130B 训练中会崩溃,更不用说由其 Pre-LN 性质引起的潜在的较弱的 tuning performance

  4. Positional EncodingFFN

    • Positional Encoding: PE:平凡的 transformer 采用绝对位置编码( absolute position encoding )或正弦位置编码( sinuous position encoding),后来演变为相对位置编码( relative positional encoding) 。相对位置编码比绝对位置编码能更好地捕获 word relevance 。旋转位置嵌入(Rotary Positional Embedding: RoPE )是以绝对位置编码的形式实现的相对位置编码,其核心思想表现为以下公式:

      (6)(Rmq)(Rnk)=qRmRnk=qRnmk

      其中:q$ \mathbf{\vec q} $ 在位置m$ m $ 、以及k$ \mathbf{\vec k} $ 在位置n$ n $ 之间的内积,与它们之间的距离nm$ n-m $ 相关,这反映了位置编码的相对性( relativity )。

      上式中的R$ \mathbf R $ 矩阵定义为:

      (7)Rm=[cos(mθ1)sin(mθ1)0000sin(mθ1)cos(mθ1)000000cos(mθ2)sin(mθ2)0000sin(mθ2)cos(mθ2)000000cos(mθd/2)sin(mθd/2)0000sin(mθd/2)cos(mθd/2)]Rd×d

      其中:m$ m $ 为绝对位置;d$ d $ 为 embedding 维度。为了使得位置编码的值随着距离的增加而衰减,我们选择:

      (8)θ={θi=100002(i1)/d,i[1,2,,d/2]}

      在平凡的 GLM 中提出了一种二维绝对位置编码方法,用于建模 intra-span 位置信息和 inter-span 位置信息。在 GLM-130B 中,与平凡 GLM 中使用的二维位置编码不同,我们退回了传统的一维位置编码。然而,我们最初认为,我们不能直接将二维形式应用于RoPE (但是随后我们在 RoPE 的作者博客中发现了实现二维 RoPEinstructions ,此时我们的训练已经进行了好几周了)。作为一个替代计划,在 GLM-130B 中,我们去掉了原始 GLM 中使用的第二维,因为我们发现用于 [MASK] generation 的单向 attention mask 子矩阵也表示 token order 。这一观察导致我们根据以下策略将 GLM-130B 的位置编码转变为一维编码:

      • 对于被 short span 破坏的序列,我们丢弃第二维的位置编码。

      • 对于末尾被 long span 破坏的序列,我们将 positional id 改为一维的{0,1,,s1}$ \{0,1,\cdots,s-1\} $ , generated token 将延续来自 last context tokens1$ s-1 $ 的第一维位置编码。

    • Feed-forward Network: FFN :最近一些改进 Transformer结构的努力是在 FFN 上,包括用 GLU (在 PaLM 中采用)取代它。研究表明,使用 GLU 可以提高模型性能,这与我们的实验结果一致(如下表所示)。具体来说,我们使用带 GeLU 激活函数的 GLU

      (9)FFNGeGLU(x;W1,V,W2)=(GeLU(xW1)xV)W2

      为了保持与平凡的 FFN 相同的参数,feed-forward 尺寸dffn$ d_\text{ffn} $ (通常是4dH$ 4d_H $ ,其中dH$ d_H $ 是隐层维度)被减少到83dH$ \frac{8}{3}d_H $ ,因为参数V$ \mathbf V $ 被额外引入。

    • PEFFN 的消融研究:为了验证我们的 PEFFN 的选择,我们在实验中通过在一个随机的 50G 中英文混合语料库上对 GLM_Base110M )进行预训练从而测试它们。我们将绝对位置编码与最近流行的两个相对位置编码变体(RoPEALiBi )进行比较。对于 FFN ,我们比较了平凡的 FFN 与带有 GeLU 激活的 GLU

      下表的结果显示,ALiBiRoPE 都改善了测试集的困惑度,而且在使用 RoPE 时其改善更为显著。而使用 GeGLU 可以进一步提高模型的性能。

  5. 流水线并行的分析:在流水线并行中,每个 stage 由三个操作组成(如下图 (a) 所示):forward (记做 F)、backward(记做 B )、以及 optimizer step (记做 U )。然而,朴素的 sequential pipeline implementation 会导致难以忍受的大量气泡。改进的 Gpipe《Gpipe: Efficient training of giant neural networks using pipeline parallelism》)(如下图 (b) 所示)策略通过将数据分割成 micro-batch ,大大减少了气泡:micro-batch 越多,一次 iteration 中可以同时计算的 stage 就越多。最近的 PipeDream-Flush《Memory-efficient pipeline-parallel dnn training》)(如下图 (c) )通过不同 stageforwardbackward 交织,减少 forward activation 的内存占用,进一步优化了 GPU 内存的使用。

    我们分析 GLM-130B 预训练中的气泡占比。假设 pipeline segment 的数量为p$ p $ , micro-batch 的数量为m$ m $ ,每个 micro-batchforward 时间和 backward 时间分别为tf$ t_f $ 和tb$ t_b $ 。在理想情况下,forwardbackward 耗时tideal=m(tf+tb)$ t_\text{ideal} = m(t_f+ t_b) $ 。但在实践中,默认的流水线分发策略分别引起p1$ p-1 $ 个前向传播的气泡、以及p1$ p-1 $ 个反向传播的气泡,因此气泡的总耗时为tbubhle=(p1)×(tf+tb)$ t_\text{bubhle} = (p-1)\times (t_f + t_b) $ ,因此气泡占用率为:

    (10)bubble-ratio=tbubbletideal+tbubble=p1m+p1

    对于较大数量的 micro-batchm$ m $ ,气泡占比将减少到一个可接受的水平。具体而言,GPipe 的实验表明,当m4p$ m\ge 4p $ ,由于反向传播中的 forward recomputation 技术允许 computational communication 有一定的重叠,流水线气泡时间的总百分比降低到可以忽略的水平,从而表明由流水线并行引入的气泡并没有严重消耗训练效率。

    一般来说,为了充分利用硬件,通常会将模型放入由多个节点组成的 model parallel groups ,并尽量使用每个节点的全部内存。在这种情况下,我们可以自由调整流水线模型并行和张量模型并行的比例。由于数据并行几乎不影响计算时间,我们假设数据并行的规模为d=1$ d=1 $ ,节点总数为n$ n $ ,张量模型并行的规模为t$ t $ ,流水线模型并行的规模为p$ p $ ,并满足n=t×p$ n=t\times p $ ,这种情况下的气泡占比为:

    (11)bubble-ratio=n/tm+n/t1

    从上式中可以看出,增加张量并行的规模将进一步降低气泡比例。然而,张量并行规模不能无限制地增加,这将降低计算粒度,并大大增加通信成本。因此,我们可以得出结论:张量模型并行的规模应该随着模型规模的增加而缓慢增加,但不能超过单台机器的显卡数量。在 GLM-130B 的训练中,实验表明,在 DGX-A100 系统中,最佳的张量并行规模是t=4$ t=4 $ ,并没有扩大到t=8$ t=8 $ 。其他参数为m=176,p=8$ m=176, p=8 $ ,计算出的气泡占比仅为 3.8% ,足以证明流水线模型并行的效率。

  6. Inference 加速:一个模型的普通 PyTorch 实现很容易阅读和运行,但对于 LLM 来说,它的速度会慢得令人难以忍受。基于NVIDIAFasterTransformerhttps://github.com/NVIDIA/FasterTransformer),我们花了两个月的时间将 GLM-130B 实现为 C++ 语言,以加快推断速度,其中包括以下主要优化:

    • 优化耗时的操作,如 GeGLULayer NormalizationSoftMax

    • 减少 GPU 内核调用,例如,将 MultiheadAttention 融合到一个 computation kernel 中。

    • 在调用 cuBLAS 时指定最佳性能的算法。

    • 通过提前转置(transposing )模型参数来提高计算效率。

    • FP16 计算中使用 half2 ,使 half 的访问带宽和计算吞吐量加倍。

    目前我们将 GLM-130B 的完整 FasterTransformer 实现打包成一个即插即用的 docker image ,以方便用户使用,我们还在努力将其适配到我们的 Pytorch 实现,只需改变一行代码。

    下表显示了我们加速的 GLM-130B 实现、以及迄今为止在 Hugging-face Transformers 中默认可用的 BLOOM-176B 实现之间的比较。我们对 GLM-130B 的实现可以比 BLOOM-176BPytorch 实现快 7.0 ~ 8.4 倍。加速 LLM 从而获得可容忍的响应速度,这可能是 LLM 普及的关键。

  7. Activation Outlier 分析:如前所述,GLM-130B 的权重可以被量化为INT4 ,以大幅度减少 inference 中的参数冗余。然而,我们也发现 GLM-130Bactivation (即层与层之间的隐状态)不能被适当量化,因为它们包含 value outlier ,这在同时进行的文献中也有建议(《Llm. int8 (): 8-bit matrix multiplication for transformers at scale》)。GLM-130B 的独特之处在于,其 30% 的维度可能出现 value outlier (如下图所示),而其他基于 GPTLLM (例如 OPT-175BBLOOM 176B )只有很少的 outlying dimension。因此,《Llm. int8 (): 8-bit matrix multiplication for transformers at scale》 提出的分解矩阵乘法从而进行更高精度的计算,这一解决方案不适用于 GLM-130B

    我们研究这些 outlier 是否可以在 LLM 量化中被忽略,答案是 "No" 。这些值可能比典型的activation 值大几个数量级(如下图所示)。虽然大多数值(占隐状态中 99.98% 的维度)保持在 6 以下,但那两个 outlying dimension 可以达到 50 甚至超过100 。据推测,它们是 GLM-130B (以及潜在的其他LLM )记忆一些固定的世界知识或语言知识的重要线索。因此,在量化过程中删除或忽略它们会导致显著的性能下降。

  8. 权重量化:

    • Absmax 量化:是一种对称量化,即对于张量X$ \mathbf X $ ,将区间[absmax(X),absmax(X)]$ [-\text{absmax}(\mathbf X), \text{absmax}(\mathbf X)] $ 映射到区间[(2b1),2b1]$ [-(2^b-1), 2^b-1] $ ,其中:

      (12)sX=absmax(X)2b11,Xq=round(X/sX)

      其中:sX$ s_X $ 为缩放因子,Xq$ \mathbf X_q $ 为量化结果,b$ b $ 为位宽( bit width )。

    • Zeropoint 量化:是一种非对称量化,即对于张量X$ \mathbf X $ ,将区间[min(X),max(X)]$ [\min(\mathbf X), \max(\mathbf X)] $ 映射到区间[(2b1),2b1]$ [-(2^b-1), 2^b-1] $ ,其中:

      (13)sX=max(X)min(X)2b2ZX=round(min(X)/sX)+2b11Xq=round(X/sX)ZX

      其中:ZX$ \mathbf Z_X $ 为零点,它表示原始空间的零张量被投影到量化空间的哪个点。

    • Col/Row-wise 量化:对权重矩阵使用单个缩放因子往往会导致更多的量化错误,因为一个单个 outlier 会降低所有其他元素的量化精度。一个常见的解决方法是按行或列对权重矩阵进行分组,每组单独进行量化,并有独立的缩放因子。

  9. 量化的设置:我们的目标是在不损害模型性能的情况下尽可能地节省 GPU 内存。在实践中,我们只对线性层进行量化(线性层占据了大部分的 transformer 参数),而对 input/output embeddinglayer normalizationbias 项不做任何改变。在 INT4 的量化精度下,两个 INT4 权重被压缩成一个 INT8 权重以节省 GPU 的内存使用。我们采用 Absmax 量化,因为我们发现它足以保持模型的性能,而且它比 zeropoint 量化更加计算高效。在推断过程中,只有 quantized weight 被存储在 GPU 内存中;线性层的 FP16 权重在运行时被逆量化(dequantized )。

    • 不同规模的模型的量化效果:110M10B 规模的 GLM 模型来自 GLM 的原始论文。虽然较小规模的 GLM 的结构与 GLM-130B 不一样,但我们认为 training objective 是量化的关键因素。下表显示了不同规模的 GLM 系列模型、以及 BLOOM 系列模型采用不同量化方法时在 LAMBADA 数据集上的性能。几乎所有的模型都在 INT8 精度下保持性能。在 INT4 精度下,GLM 的性能比BLOOM 的性能要好,当它规模扩大时。

    • 权重分布的分析:为了实现 INT4 权重量化,我们用直方图分析了 GLM-130B 和对应的 BLOOM-176B 中主要线性层的权重取值分布(如下图所示)。横轴表示权重取值,纵轴表示该值的数量(在对数尺度下)。我们可以看到,主要是 BLOOM-176B 中的 w2 线性层呈现偏斜的分布,这将阻碍对称量化的进行。相反,GLM-130Bw2形状良好,没有许多 outlier 和偏斜的分布,因此为其 INT4 量化铺平了道路,性能损失不大。

47.6.3 数据集和评估细节

  1. 多任务指令预训练 Multi-task Instruction Pre-training: MIP:遵从 T5FLANT0Ext5 的做法,我们在 GLM-130BMIP 训练中包括许多 prompted instruction 数据集,这占了训练 token5%T0 数据集的所有 prompt 来自 PromptSourceDeepStruct 数据集的 prompt 是新创建的。它们的构成如下表所示,由 T0PromptSource 的自然语言理解和自然语言生成数据集、以及 DeepStructinformation extraction 数据集组成。在 GLM-130B 的训练中,我们计算出每个数据集中大约有 36% 的样本被看过。

    T0 最初拆分数据集从而用于两个部分:multi-task prompted trainingzero-shot task transfer 。我们最初计划只包括 T0multi-task prompted training 部分、以及 DeepStruct 的训练集,但由于错误,我们在 MIP 中同时包括了 multi-task prompted training 部分和 zero-shot task transfer 部分,而排除了 DeepStruct 数据集。我们在 23k 步左右修复了这个错误,然后我们的模型继续在正确的数据集版本上训练。

    • Natural Language Understanding and Generation:我们采用了来自 PromptSource 的数据集和相应的 prompt 。对于每个数据集中的所有 prompted sample,我们设置了每个数据集最大 100k 个样本的截断,并将其合并为 MIP 数据集。prompted sample 和数据集的细节在 PromptSourceGitHub repo 中提供。

    • Information Extraction:基于 DeepStruct 的数据集、以及一个用于信息提取任务的多任务语言模型预训练方法,我们为其部分数据集创建 instructionsprompts (如下表所示)。我们将信息提取任务重新表述为 instruction tuning 格式,以允许 zero-shot generalization 到新的抽取模式。对于每个数据集的所有 prompted sample ,我们设置了每个数据集最大200k 个样本的截断,因为信息提取数据集的比语言理解数据集和语言生成数据集少(指的是集合数量更少,而不是数据集内的样本数更少)。对于 KELMPropBank 数据集,由于它们的原始规模巨大,我们从它们的 prompted example 中各取500k 个样本。

  2. MIP 中针对 DeepStruct 的数据和 promptsDeepStruct 中所有数据集的 promptsinstructions 是由作者手动创建的。每个数据集的介绍、任务描述和完整的 prompts 都附在下面的内容中。为了允许 template infilling ,我们将所有 prompts 写进 Jinja 模板。当一个数据集样本以我们的格式被提供时,Jinja 引擎将把它渲染成带有instructionsprompted sample

    GLM-130B 的信息提取能力进行更系统的评估是留给未来工作的,因为这项工作集中在 LLM 的训练和设计细节上。

    • 对话状态跟踪(Dialogue State Tracking):我们采用 Multiwoz 2.1 对话状态追踪数据集。该数据集被重新表述为两个任务,每个任务有一个相应的 prompt

      • 对话状态跟踪:给定关于一组特定的 slots,要求模型从对话中提取信息,例如,"taxi_arrival_time""destination"

      • 槽位填充(slot filling):模型应填充一个给定的槽,并识别没有答案的情况。

    • 事件抽取(Event Extraction):我们采用 ACE05 事件提取数据集,遵循 《Entity, relation, and event extraction with contextualized span representations》 中的设置。该数据集被重新表述为有三个 prompts 的两个任务,具体如下:

      • 事件论据提取:给定文本中的 trigger 和其论据角色列表,要求模型从提供的文本中提取论据。

      • 论据识别:给定一个 trigger 和某个论据角色(argument role ),如果该论据存在于所提供的文本中,则要求该模型提取该论据;否则,该模型应不产生任何结果。

    • 联合实体和关系抽取(Joint Entity and Relation Extraction):联合实体和关系抽取旨在识别一段文本中的命名实体并判断它们之间的关系。它与知识获取(knowledge acquisition )密切相关,其最终目标是将非结构化的网络内容结构化为知识三元组(例如,"(London, capital_of, Britain)")。该任务可以被格式化为一个 pipeline framework (命名实体识别和关系提取的组合)或端到端的训练。

      在这项工作中,我们采用了三个经典的联合实体和关系提取数据集: CoNLL04NYT 、以及 ACE2005。在 GLM-130B 中,我们遵循 《Deepstruct: Pretraining of language models for structure prediction》 将这种挑战格式化为 sequence-to-sequence generation ,其中我们的输入是原始文本,输出是三元组。我们在这里只对这些数据集进行 relation-related 的任务,而将 entity-related 的任务留在命名实体识别部分。

      • 关系抽取(Relation Extraction):给定一个关系候选列表,在这里我们提取由 "头实体"、"关系 "、"尾实体" 组成的知识三元组。例如,给定输入 "In Kunming the 800-some faculty and student established the National Southwestern Associated University" ,模型输出可能是 (National Southwestern Associated University, location of formation, Kunming)

      • 条件关系抽取(Conditional Relation Extraction ):给定单个关系候选(relation candidate),模型判断输入文本是否包含该关系。如果是,则提取所有相关的三元组;如果不是,则不生成。

      • 知识槽填充(Knowledge Slot Filling):从文本中指定一个特定的实体,并要求模型提取所有以该实体为头的三元组。

      • 关系分类(Relation Classification):给定文本中的两个实体,要求模型根据候选关系列表来判断它们之间的关系。

      然而,现有的联合实体和关系提取数据集具有最小的关系模式。例如,CoNLL04 只包含五个不同的关系;最多样化的 NYT 数据集包含 24Freebase predicates 。为了让模型能够捕捉到多样化的潜在 verbalized predicates ,我们用来自 KELM 的自动生成的 knowledge-text aligned data 来扩展任务。我们不包括其他 distantly supervised 的数据集(例如,T-Rex),由于这些数据可能是极其噪音的。

      对于KELM 数据,由于它是基于完整的 Wikidata 模式(其中包含太多的关系,无法枚举),我们为关系提取和知识槽填充的任务创建了两个 KELM-specific prompts

    • 命名实体识别( Named Entity Recognition:NER ):命名实体识别是一项任务,旨在从原始文本语料库中识别命名实体,并为其分配适当的实体类型。例如,在 In 1916 GM was reincorporated in Detroit as "General Motors Corporation". 这句话中,"通用汽车公司"("General Motors Corporation")可能属于 organization 这种实体。

      我们根据命名实体识别数据集 CoNLL03OntoNotes 5.0GENIA 设计了两种不同类型的任务。我们还包括来自联合实体和关系数据集的命名实体识别子任务。

      • 命名实体识别:给定可能的实体类型列表(例如,地点、人、组织),从提供的文本内容中提取所有相关的实体。

      • 实体定型(Entity Typing):实体定型是命名实体识别的重要衍生任务之一。它的目的是对 entity mention 的正确类型进行分类 ,并经常作为后处理附加在 entity mention extraction 上。

    • 关系分类(Relation Classification):关系分类是信息提取的一项基本任务,它从两个给定实体之间的候选列表中确定关系。这个问题是一个长期存在的问题,因为它受制于数据标注的巨大成本,因为知识密集型(knowledge-intensive )任务的人工标注需要受过教育的标注员,而标注员的费用很高。

      关系提取中事实上的数据创建方法依赖于 distant supervision ,它自动将 knowledge base 中现有的知识三元组与文本内容相匹配。它假定这种 alignment 在某些条件下是正确的。这里我们只包括 TacRED 数据集,并基于它创建几个不同的任务。

      • 关系分类:最传统的任务表述。给出文本中的两个实体,从一个候选列表中对它们的关系进行分类。该形式可以直接回答关系,也可以以三元组的形式回答(类似于关系提取)。

      • 知识槽填充(Knowledge Slot Filling ):将任务改为,给定头部实体和关系从而确定尾部实体在输入文本中是否存在。如果没有,则不生成任何东西。

      • Yes or No 问题:把问题变成一个类似于自然语言推理的任务。例如,给定句子 "The series focuses on the life of Carnie Wilson, daughter of Brian Wilson, founder of the Beach Boys." ,模型将被要求通过回答 "是" 或 "否" 来判断 (Carnie Wilson, father, Brian Wilson ) 这样的三元组是否正确。

    • 语义角色标注(Semantic Role Labeling):语义角色标注是一项由来已久的任务,它希望识别与句子中给定谓语(predicate )相关的语义论据。例如,在 "Grant was employed at IBM for 21 years where she held several executive positions." 这个句子和其中的谓语 "employed" ,语义角色标注将 Grant 作为主语,将 IBM 作为第二宾语。

      我们根据语义角色标注数据集 CoNLL05CoNLL12PropBank 创建两个不同的任务。

      • 语义角色标注:传统的任务形式,即在文本中注释一个动词(即谓语),要求模型生成相关的语义角色。

      • 语义角色填充:给定一个动词和一个潜在的语义角色,要求模型判断该角色在句子中是否存在并生成它。

      • 谓语识别:给定一个句子的片段及其相应的语义角色,识别它与哪个动词有关。

  3. Big-Bench-Lite 评估:最近的工作显示,LLM 有能力进行超越传统语言任务的 reasoning 。作为回应,BIG-bench最近通过从全球研究人员那里众包新型的任务来测试 LLM 的新能力。出于经济上的考虑,我们在原 150 个任务的 BIG-bench 的一个官方子集上评估 GLM-130B ,即有 24 个任务的 BIG-bench-lite 。这些任务可以分为两类:一类是基于带有答案选项的多选题问答任务,另一类是不带答案选项的答案直接生成任务。对于第一类,我们评估每个选项的完整内容的概率,并挑选概率最大的选项作为答案;对于第二类,我们使用贪婪解码来生成答案。在BIG-bench 中进行的所有评估都是基于 [MASK] ,因为这里的答案通常是短文。在 24BIG-bench-lite 数据集上的三个 LLM 的所有结果都显示在下表和下图。我们采用了 BIG-bench 的原始 prompt ,并使用官方的实现来生成启动样本( priming example )用于 few-shot 评估和计算最终得分。

  4. MMLU 评估:下表中显示了 GLM-130BBLOOM 176B57MMLU 数据集的所有结果。在前面内容中,我们报告了 GLM-130BGPT-3 175BBLOOM 176B 的加权平均准确率(即每个样本的准确率平均值),遵循原始的 benchmark setting 。 下面是一个具有 1-shot primingprompted example 。我们预测 next token['A', 'B', 'C', 'D'] 的概率,并将概率最大的 token 作为答案。

    ​x
    The following are multiple choice questions about philosophy.
    
    
    According to d'Holbach, people always act according to _____.
    (A) free choices (B) dictates of the soul (C) necessary natural laws (D) undetermined will
    Answer: (C) necessary natural laws
    
    
    Epicurus holds that philosophy is:
    (A) not suitable for the young. (B) not suitable for the old. (C) important, but unpleasant. (D) none of the above.
    Answer: (

  5. Language Modeling 评估:

    • LAMBADA:我们遵循 GPT-2 中的评估设置,利用 stop-word filter 从而选择出得分最大的 valid final word prediction 作为我们的答案。我们使用 beam size = 16beam search 解码策略,最大 generation 长度限制为 5 。遵从 《The lambada dataset:Word prediction requiring a broad discourse context》 的要求,我们预测的 final word 是一个自然的英语单词(即可能由多个 token 组成),而不是单个 GLM-130B token 。最后,我们用字符串匹配来判断正确性。

    • PilePile 是一个全面的语言建模 benchmark ,最初包括来自不同领域的 22 个不同文本数据集。我们在 18 个数据集的一部分上报告了我们的结果,《Jurassic-1: Technical details and evaluation》报告了 baseline 的结果。与传统的语言建模基准不同,Pile 评估报告了 bits-per-byte: BPB 的困惑度,以避免不同词表的模型之间的不匹配比较。因为一般而言,如果不加以限制,具有较大词表的语言模型在困惑度比较中会受到青睐。在评估中,我们严格遵循 《The pile: An 800gb dataset of diverse text for language modeling》中的 setting ,利用 [gMASK] 和具有双向注意力的 1024 长的上下文,剩余的 1024token 以自回归方式计算 BBP 。加权平均 BBP 是根据每个共享数据集在 Pile 训练集中的比例计算的。

      下表中报告了 Pile 测试集的详细指标。我们观察到,与 GPT-3 相比,GLM-130Bphil_paperspile_cc 上的表现明显较弱,这可能是由于 GLM-130B 的双语特性、以及缺乏更多样化和高质量的私有语料库。

  6. 中文理解评估:在此,我们阐述了我们用于 CLUEFewCLUE 评估的 prompts 。在中文数据集中,提示遇到了一些挑战,因为中文文本是由单个字符而不是单词组织的,在许多情况下导致 verbalizers 的长度不等。尽管针对数据集的校准可以帮助缓解这一问题,但过于具体的技术在实施中会很复杂。我们在本文中的评估采用了一种更容易解决的方法,利用 GLM-130B 的独特功能。由于GLM-130B 是一个带有英文 MIP 的双语 LLM ,我们采用了 《Promptsource: An integrated development environment and repository for natural language prompts》 的类似任务中的英文的 promptsverbalizers 来进行中文数据集的评估,并发现这些策略相当有效。在评估指标方面,除了 DRCDCMRC2018 这两个问答数据集报告了 EM ,其他数据集报告了准确率。

47.6.4 更广泛的影响

  1. 本文介绍了一个具有 130B 参数的开放式双语预训练语言模型。目前,大多数拥有超过 100B 参数的预训练语言模型被政府和大公司所私有。其中少数的政府或大公司提供了有限的付费的 inference API 。相比之下,GLM-130B 的权重和代码向任何对 LLM 感兴趣的人开放。此外,我们通过 speed-up implementationINT4 量化,大大降低了推理的硬件要求。这篇论文可以对研究界、个人开发者、小公司和社会产生更广泛的影响。

    • 对人工智能研究的影响:大多数研究机构无法承担预训练大型语言模型的巨大成本。因此,除了政府和大公司的雇员之外,大多数研究人员只能通过付费来使用有限的 inference API 。通过 inference API ,研究人员只能把模型的输出作为黑盒子来分析,这限制了潜在工作的范围。通过 GLM-130B ,研究人员可以分析与特定输入相对应的模型参数和内部状态,从而对 LLM 的理论、能力和缺陷进行深入研究。研究人员还可以修改模型结构和权重,以验证所提出的算法,从而改进 LLM

      通过 INT4 量化,GLM-130B 可以在流行的 GPU 上进行推理,如 4RTX 30908RTX 2080 Ti ,这可以很容易地从云服务中获得。因此,买不起 DGX-A100 等强大的 data-center GPU server 的研究人员也可以利用 GLM-130B

    • 对个人开发者和小公司的影响:想要将 LLM 整合到其业务中的个人开发者和小公司只能选择付费 inference API 。增加的成本会阻碍他们的尝试。相反,GLM-130B 可以部署在他们拥有的流行的硬件上,或者可以通过云服务访问,以降低成本。此外,他们可以利用蒸馏技术来获得较小的模型,在他们的特定任务上保持可比的性能。虽然一些开发者可能缺乏自行完成部署和蒸馏的能力,但我们相信随着 GLM-130B 和未来更多开放的 LLM,相应的工具包和服务提供商,将变得更加可用。

      我们还注意到,目前大多数 LLM 应用都是基于 prompt engineering ,部分原因是 inference API 的限制。在下游场景中,如在线客服,公司积累了大量的人类产生的数据,其中包含领域知识。通过开源的权重和代码,开发者可以在他们的数据上对GLM-130B 进行微调,以减轻 domain knowledge 的差距。

  2. 环境影响:对大型语言模型的主要关注之一是其巨大的能源使用和相关的碳排放。据估计,GPT-3 使用了 500 吨的碳排放足迹(CO2eq )。在 60 天的训练过程中,我们总共消耗了 442.4MWh 的电力。考虑到当地电网的 0.5810 公斤/千瓦时的碳效率,预训练释放了 257.01 吨的二氧化碳。这大约是 GPT-3 的碳足迹的一半,可能是由于高效的并行策略和 NVIDIA 的硬件改进。这个碳排放量大约相当于 18 个普通美国人一年的排放量。然而,我们相信随着 GLM-130B 的发布,可以为复制 100B-scale LLM 节省更多的碳排放。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文