四十七、GLM-130B[2022]

  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] ,我们随机采样一些 text span {s1,,sm} ,其中每个 si 表示一段连续的 tokensi=[si,1,,si,li]li 表示 si 的长度。然后我们将 si 替换为单个 mask token ,从而获得被破坏的文本序列 xcorrupt 。模型被要求以自回归的方式从 xcorrupt 中恢复原始文本序列。为了允许 corrupted spans 之间的交互,它们之间的可见性是由对它们的顺序进行随机抽样的 permutation 来决定的。pre-training objective 被定义为:

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

    其中:

    • Zm 表示序列 {1,2,,m} 的所有 permutation 的集合,mspan 数量。

    • sz<i 表示 [sz1,,szi1] ,表示在排列 z 中,所有排在 si 之前的 text span

    • si,<j 表示 [si,1,,si,j1] ,表示在当前 text span 中,所有位于 si,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 ,我们采用:

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

    其中:α=(2N)1/2 。并且对 ffn, v_proj, out_proj 应用具有缩放因子为 (2N)1/2Xavier 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 为一个 head-specific 的标量。在原始论文中,模型有 8head,因此 m 对每个 head 依次选择为 {121,,128}

    • 为了改进 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),加起来占到输入的 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β2 设置为 0.90.95,权重衰减值为 0.1

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

    • 我们使用 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 中使用。具体来说,令 α 为收缩因子,该策略可以通过如下的方式来轻松地实现:

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

    Figure 4 (b) 表明,根据经验,设置 α=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 )为每个 prompt 生成25continuation ,将最大 generated length 限制在 128 tokens 。然后,我们报告了由 Perspective API 评估的 25continuations 的平均毒性概率。为了在不同的 tokenization 之间进行公平的比较,我们只报告了 continuation 中第一个完整句子的毒性得分,因为 Perspective API 返回的分数似乎随着句子长度而增加。

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

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

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

    结果如下图所示。一般来说,在两个模型中,随着给定 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)) 。即,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)) 。即 LN 添加在残差块之中、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 在位置 m 、以及 k 在位置 n 之间的内积,与它们之间的距离 nm 相关,这反映了位置编码的相对性( relativity )。

      上式中的 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 为绝对位置;dembedding 维度。为了使得位置编码的值随着距离的增加而衰减,我们选择:

      (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}generated token 将延续来自 last context token s1 的第一维位置编码。

    • 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 (通常是 4dH,其中 dH 是隐层维度)被减少到 83dH,因为参数 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 的数量为 pmicro-batch 的数量为 m ,每个 micro-batchforward 时间和 backward 时间分别为 tftb 。在理想情况下,forwardbackward 耗时 tideal=m(tf+tb)。但在实践中,默认的流水线分发策略分别引起 p1 个前向传播的气泡、以及 p1 个反向传播的气泡,因此气泡的总耗时为 tbubhle=(p1)×(tf+tb),因此气泡占用率为:

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

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

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

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

    从上式中可以看出,增加张量并行的规模将进一步降低气泡比例。然而,张量并行规模不能无限制地增加,这将降低计算粒度,并大大增加通信成本。因此,我们可以得出结论:张量模型并行的规模应该随着模型规模的增加而缓慢增加,但不能超过单台机器的显卡数量。在 GLM-130B 的训练中,实验表明,在 DGX-A100 系统中,最佳的张量并行规模是 t=4 ,并没有扩大到 t=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 ,将区间 [absmax(X),absmax(X)] 映射到区间 [(2b1),2b1] ,其中:

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

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

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

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

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

    • 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 作为答案。

  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 节省更多的碳排放。

四十八、GPT-NeoX-20B[2022]

  1. 在过去的几年里,围绕自然语言处理的大型语言模型(large language model: LLM )的研究出现了爆炸性增长,主要是由基于Transformer 的语言模型的令人印象深刻的性能所推动,如 BERTGPT-2GPT-3T5。这些研究的最有影响的成果之一是:发现大型语言模型的性能和参数数量呈现可预测的幂律(power law )关系,其中诸如宽深比( width/depth ratio )等结构细节在很大范围内对性能的影响很小(《Scaling laws for neural language models》)。其结果是大量的研究集中在将 Transformer 模型扩展到更大的规模上,从而产生了超过 500B 参数的稠密模型,这是在几年前几乎无法想象的里程碑。

    稠密模型指的是类似于 GPT-3 这种,没有采用 mixture-of-experts 的模型。

    今天,有几十个公开宣布的大型语言模型,最大的 LLM 的参数比 GPT-2 多两个数量级,即使在这个规模,也有近十种不同的模型。然而,这些模型几乎都是受保护的大型组织的知识产权,并且被限制在商业 API ,只能根据 request 来提供使用,或者根本不能供外部人员使用。据我们所知,唯一免费公开的比 GPT-2 更大的稠密的自回归语言模型是 GPT-Neo2.7B 参数)、GPT-J-6BMegatron-11BPangu-a-13B 以及最近发布的 FairSeq 模型(2.7B6.7B13B参数)。

    在论文 《GPT-NeoX-20B: An Open-Source Autoregressive Language Model》 中,作者介绍了 GPT-NeoX-20B ,一个 20B 参数的开源的自回归语言模型。作者通过 permissive license 向公众免费开放模型权重,其动机是相信开放 LLM 对于推动广泛领域的研究至关重要,特别是在人工智能安全、机制上的可解释性、以及研究 LLM 能力如何扩展等方面。LLM 的许多最有趣的能力只有在超过一定数量的参数时才会涌现,而且它们有许多属性根本无法在较小的模型中研究。虽然安全问题经常被作为保持模型权重私有化的理由,但作者认为这不足以防止滥用,而且对于能够获得 SOTA 语言模型的少数组织之外的研究人员来说,这在很大程度上限制了探究和研究 LLM 的能力。此外,作者在整个训练过程中以均匀的 1000 步的间隔提供 partially trained checkpoint 。作者希望通过免费提供在整个训练过程中的广泛的 checkpoint ,从而促进对 LLMtraining dynamics 的研究,以及上述的人工智能安全性和可解释性等领域的研究。

    在研究 GPT-NeoX-20B 的过程中,作者发现了几个值得注意的现象,与已有的文献不一致:

    • 作者在一个包含重复数据的数据集上进行训练,训练超过一个 epoch ,但没有看到性能损失的证据。

    • 虽然 《 Measuring massive multitask language understanding》 声称, few-shot prompting 并不能提高他们任务的性能,但作者发现,这实际上是 GPT-3 特有的现象,并不适用于 GPT-NeoX-20BFairSeq 模型。

    • 最后,作者发现 GPT-NeoX-20B 是一个强大的 few-shot learner ,与规模相当的 GPT-3 模型和 FairSeq 模型相比,从 few-shot examples 中获得的性能提升要大得多。作者看到 GPT-J-6B 也是如此,作者假设这可能是由于 GPT-J-6B 选择了相同的训练数据。

    最后,训练和评估代码在 https://github.com/EleutherAI/gpt-neox 上公开,也可以在那里找到下载整个训练过程中模型权重的链接。

48.1 模型设计和实现

  1. GPT-NeoX-20B 是一个 autoregressive transformer decoder model ,其结构基本遵循 GPT-3 的结构,但有一些明显的改变,如下所述。我们的模型有 20B 参数,其中 19.9B 参数是"non-embedding" 参数,《Scaling laws for neural language models》认为这是用于 scaling laws analysis 的适当数量。我们的模型有 44 层,隐层维度大小为 6144 ,有 64head

48.1.1 模型架构

  1. 虽然我们的架构与 GPT-3 基本相似,但也有一些明显的区别。在本节中,我们对这些不同之处进行了 high-level 的概述,但请读者参考 GPT-3 的原始论文以了解模型架构的全部细节。我们的模型架构几乎与 GPT-J 相同,但我们选择使用 GPT-3 作为参考,因为没有关于 GPT-J 设计的典型出版物作为参考。

  2. Rotary Positional Embeddings:我们使用 rotary embedding《RoFormer: Enhanced transformer with rotary position embedding》),而不是 GPT 模型中使用的 learned positional embedding ,这是基于我们之前在训练 LLM 中使用 rotary embedding 的积极的经验。 rotary embeddingstatic relative positional embedding 的一种形式。简而言之,它们扭曲了emebdding 空间,使位置 mtoken 对位置 ntoken 的注意力线性地依赖于 mn

    更正式地说,标准的多头注意力方程为:

    (14)softmax(1dn,m(Wqxm)(Wkxn))

    其中:

    • xmxn 分别为位置 m 和位置 ntoken embedding

      注意:通常而言,通过在 token embedding 上添加 positional embedding 从而得到 xmxn

    • Wq,Wk 分别为 query 投影矩阵和 key 投影矩阵。

    rotary embedding 将这个方程修改为:

    (15)softmax(1dn,mxmWqRΘ,(nm)dWkxn)

    其中:RΘ,(nm)d 为一个 d×d 的块对角矩阵(block diagonal matrix ),其中第 iblock 是一个 2D rotation,旋转角度为 xθiΘ={θi=100002i/d0i(d1)/2} 为超参数。

    (16)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 为绝对位置。

    虽然 《RoFormer: Enhanced transformer with rotary position embedding》rotary embedding 应用于整个 embedding 向量,但我们遵从 《GPT-J-6B: A6 billion parameter autoregressive language model》,而是只将 rotary embedding 应用于 embedding 向量维度的前 25% 。我们的初步实验表明,这在性能和计算效率上取得了最佳平衡。

  3. 并行计算 Attention Layer + FF Layer:我们并行地计算注意力层和前馈层(Feed-Forward: FF ),并将结果相加,而不是串行地运行。这主要是为了提高效率,因为在 op-sharding 的情况下,每个残差加法(residual addition )都需要在前向传递和后向传递中进行一次 all-reduce《Megatron-LM: Training multi-billion parameter language models using model parallelism》)。通过并行计算 AttentionFF ,可以在执行单个 all-reduce 之前对结果进行局部规约(reduce )。在Mesh Transformer JAX 中,这导致了 15% 的吞吐量增加,同时在训练的早期,与串行地运行它们的损失曲线相当。

    由于我们代码中的一个疏忽,我们无意中应用了两个独立的 Layer Norm ,而不是像 GPT-J-6B 那样使用一个 tied layer normtied layer norm 的方式为:

    (17)x+Attn(LN1(x))+FF(LN1(x))

    相反,我们的代码实现为:

    (18)x+Attn(LN1(x))+FF(LN2(x))

    不幸的是,这只是在我们训练到很远的时候才注意到,无法重新开始。随后的小规模实验表明,untied layer norm 对性能没有影响,但为了透明性起见,我们还是希望强调这一点。

  4. 初始化:对于残差前的 Feed-Forward output layers ,我们使用了 《Mesh-Transformer-JAX: Model parallel implementation of transformer languagemodel with JAX》 中介绍的初始化方案,2Ld。这可以防止 activation 随着深度和宽度的增加而增长,分子为 2 可以补偿注意力层和前馈层被组织为并行的事实。

    对于所有其他层,我们使用 《Transformers without tears: Improving the normalization of self-attention》small init 方案 2d+4d

  5. 所有的 Dense 层:虽然 GPT-3 使用 《Generating long sequences with sparse transformers》介绍的技术交替使用 dense 层和 sparse 层,但我们却选择完全使用 dense 层来降低实现的复杂性。

48.1.2 其它

  1. 软件库:我们的模型是使用建立在 MegatronDeep-Speed基础上的代码库进行训练的,以促进高效和直接地训练具有数百亿个参数的大型语言模型。我们使用官方的 PyTorch v1.10.0 发布的二进制包,用 CUDA 11.1 编译。该软件包与 NCCL 2.10.3 捆绑在一起,从而用于分布式通信。

  2. 硬件:我们在 12Supermicro AS-4124GO-NART 服务器上训练 GPT-NeoX-20B ,每台服务器有 8NVIDIA A100-SXM4-40GB GPU ,并配置了两个 AMD EPYC 7532 CPU 。所有的 GPU 都可以通过四个 ConnectX-6 HCA 中的一个直接访问 InfiniBand switched fabric ,从而用于 GPU Direct RDMA 。两个 NVIDIA MQM8700-HS2R 交换机通过 16 条链路连接,构成了这个InfiniBand 网络的主干,每个节点的 CPU socket 有一条链路连接到每个交换机。

    下图显示了一个节点的简化概览,该节点为训练而配置。

48.2 训练

  1. 由于对 20B 参数的模型进行超参数调优的难度很大,我们选择使用 GPT-3 的超参数值来指导我们对超参数的选择。

    • 由于 GPT-3 没有以我们的 20B 规模训练一个模型,我们在他们的 13B 模型和 175B 模型的学习率之间进行插值,得出的学习率为 0.97e-5

    • 基于较小的模型上的实验结果,我们选择 0.01weight decay

    • 为了达到更高的训练吞吐量,我们选择使用与 GPT-3175B 模型相同的 batch size:大约 3.15M token ,或者 1538 个上下文其中每个上下文 2048 token (即,batch size = 1538,序列长度 2048),总共训练 150k 步,采用余弦学习率调度从而在训练结束时衰减到原始学习率的 10%

    • 我们使用 AdamW 优化器,其中 (β1,β2)=(0.9,0.95),ϵ=108 。我们用 ZeRO optimizer 来扩展 AdamW,通过将 optimizer states 切分到各台 worker机器上从而来减少内存消耗。

    • 由于这种规模的模型权重和优化器状态不适合在单个 GPU 上使用,我们使用 Megatron-LM 介绍的张量并行方案、与 PipeDream 介绍的流水线并行方案相结合,从而在一组 GPU 上分配模型。

    • 为了训练 GPT-NeoX-20B ,我们发现,考虑到我们的硬件设置,分配模型的最有效方式是将张量并行大小设置为 2 、将流水线并行大小设置为 4 。 这允许最密集的通信过程,张量并行、流水线并行发生在一个节点内,而数据并行通信发生在节点边界上。通过这种方式,我们能够实现并保持每个 GPU117 TFLOPS 的效率。

  2. 训练数据:GPT-NeoX-20B 是在 Pile上训练的,这是一个专门为训练大型语言模型而设计的大规模的数据集。它由 22 个数据源的数据组成,粗略地分为 5 个类别:

    • 学术写作: Pubmed Abstracts and PubMed CentralarXivFreeLawUSPTO BackgroundsPhilPapersNIH Exporter

    • 网络爬取和互联网资源:CommonCrawlOpenWebTextStackExchangeWikipedia (English)

    • 散文: BookCorpusBibliotikProject Gutenberg

    • 对话: Youtube subtitlesUbuntu IRCOpenSubtitlesHacker NewsEuroParl

    • 其它杂项: GitHubDeepMind Mathematics datasetEnron Emails

    总的来说,Pile 数据由超过 825GB 的原始文本数据组成。数据来源的多样性反映了我们对通用语言模型的渴望。某些数据子集被升采样以获得更平衡的数据分布。相比之下,GPT-3 的训练数据包括网络爬取(web-scrape )数据、books 数据集、Wikipedia 。当把这项工作中的结果与 GPT-3 进行比较时,训练数据几乎肯定是最大的、已知的 unknown factor 。关于 Pile 的全部细节可以在技术报告 《The Pile: An 800GB dataset of diverse text for language modeling》 和相关数据表 《Datasheet for the Pile》 中找到。

    特别值得注意的是,Pile 包含了 StackExchange 的爬取,并被预处理成 Q/A 形式。关于微调数据的句法结构对下游性能的影响,有大量的、不断增长的工作。虽然到目前为止还没有专注于 prompted pretraining 的系统工作,但最近的工作 《Neural language models are effective plagiarists》 观察到,PileStackExchange 子集的格式化( formulation )似乎严重影响了 code generation

  3. Tokenization:对于 GPT-NeoX-20B ,我们使用了与 GPT-2 类似的 BPE-based tokenizer ,总的词表规模同样为 50257

    tokenizer 有三个主要变化:

    • 首先,我们在 Pile 的基础上训练一个新的 BPE tokenizer ,利用其不同的文本来源来构建一个更通用的 tokenizer

    • 第二,GPT-2 tokenizer 将字符串开始处的 tokenization 视为 non-space-delimited token 。与 GPT-2 tokenizer 相比,GPTNeoX-20B tokenizer 无论如何都要应用一致的 space delimitation。这解决了关于 tokenization input 的前缀空格符存在与否的不一致问题。 下图中可以看到一个例子。

    • 第三,我们的 tokenizer 包含用于重复空格符的 token ,其中重复空格符的数量从 1 个空格到 24 个空格。这使得 GPT-NeoX-20B tokenizer 能够使用较少的 token 对具有大量空格的文本进行 tokenize ,例如,程序源代码、或 arXiv LATEX 源代码文件。

      例如,NeoX-20B 可以将连续的 4 个空格视为一个 token ,这在 python 代码中经常见到。相比之下,GPT-34 个空格视为四个 token,每个空格一个 token

    GPT-NeoX-20B tokenizerGPT-2 tokenizer50257token 中共享 36938 个,重叠度为 73.5% 。总体而言,GPT-NeoX-20B tokenizer 使用更少的 token 数量来 tokenize Pile 验证集,但是使用了更多的 tokentokennize C4 数据集。

    tokenization 对比的例子(全部的示例参考论文附录):

  4. 数据重复:在过去的两年里,训练自回归语言模型时的标准做法是只训练一个 epoch 。最近的研究声称,看到了更进一步地对训练数据去重的好处。特别是,除了 GPT-3Jurassic-1 之外,每个公开的大型语言模型要么使用某种形式的数据去重,要么没有足够详细地讨论训练数据被做了什么处理。

    Pile 最初被制作时,唯一存在的比 GPT-NeoX-20B 更大的语言模型是 GPT-3 ,它对其训练数据的高质量子集进行了升采样。随后 Pile 被发布,由于缺乏大规模消融实验的资源、并且在较小的数据规模上缺乏明显的影响,我们选择按原样使用 Pile 。如下图所示,即使在 20B 的参数规模下,我们也没有看到跨越一个 epoch 边界后,测试损失和验证损失出现恶化。

    不幸的是,那些声称从数据去重中看到改进的论文,没有一篇论文发布了证明这一点的 trained models ,这使得复现和确认他们的结果很困难。《Deduplicating training data makes language models better》 发布了他们使用的数据去重的代码,我们打算在未来用它来更详细地探索这个问题。

    值得注意的是,即使在 losstask evaluation 方面没有改善,但仍有令人信服的理由为任何投入生产的模型对训练数据去重。具体而言,系统分析表明,在减少训练数据的泄漏方面有很大的好处。

48.3 实验

  1. 为了评估我们的模型,我们使用 EleutherAI Language Model Evaluation Harness《A framework for few-shot language model evaluation》),这是一个用于语言模型评估的开源代码库,支持许多模型的 API 。由于我们的目标是使一个强大的模型可以公开访问,我们与至少有 10B 个参数可以公开访问的英语语言模型进行比较。我们与 OpenAI API 上的 GPT-3 模型、开源的FairSeq 稠密模型、以及 GPT-J-6B 进行比较。我们不与 T5 或其衍生模型进行比较,因为我们的评估方法假定这些模型是自回归的。虽然有一个已经公开发布的 Megatron-11B checkpoint ,但发布的代码是不能用的,我们也没能让模型运行起来。我们没有与任何 mixture-of-experts: MOE 模型进行比较,因为没有任何公开的 MoE 模型能达到与 10B 参数的稠密模型相当的性能。

    GPT-3 API 模型的规模没有得到官方确认,但我们遵循《A framework for few-shot language model evaluation》 ,认为 GPT-3 模型的规模为 350M (Ada)1.3B (Babbage)6.7B (Curie)175B (Da Vinci) 。我们将 GPT-J-6BGPT-NeoX-20B 都归入 GPT-NeoX 模型的范畴,因为这两个模型都是用相同的架构训练的,并且是在同一个数据集上训练的。然而,我们用虚线将它们连接起来,以反映这两个模型不是像 FairSeqGPT-3 模型那样在两个不同的尺度上训练的同一模型,它们是用不同的代码库、不同的 tokenizer 、以及不同数量的 token 来训练的。

    我们报告了两个 baseline :人类水平性能、随机性能。所有的图表都包含代表两个标准差的 error bar ,表明每个点周围的 95% 的置信区间。对于一些图,标准差非常小,以至于区间不明显。

  2. 我们在一组不同的 standard language model evaluation dataset 上评估我们的模型。我们将评估数据集为三个主要类别:自然语言任务、基于知识的高级任务、以及数学任务。我们对 GPT-J-6BGPT-NeoX-20BFairSeq 模型进行了 zero-shotfive-shot 评估,但由于资金限制,只对 GPT-3 模型进行了 zero-shot 评估。由于篇幅限制,这里只展示了一个有代表性的结果子集,其余的在原始论文的附录中。

    • 自然语言任务:我们在一系列不同的 standard language model evaluation dataset 上评估我们的模型:ANLIARCHeadQA (English)HellaSwagLAMBDADALogiQAOpenBookQAPiQAPROSTQA4MRESciQTriviaQAWinogrande、以及Winograd Schemas Challenge (WSC)SuperGlue 版。

    • 数学任务:解决数学问题是一个在人工智能研究中有着悠久历史的领域,尽管大型语言模型在算术任务、以及用自然语言表述的数学问题上往往表现得相当糟糕。我们对 MATH 测试数据集以及 GPT-3 介绍的数字算术问题进行评估。请注意,MATH 测试数据集通常都会进行微调,但由于计算上的限制,我们在这里只对模型进行 zero-shotfive-shot 评估。

    • 基于知识的高级任务:我们还对我们的模型回答事实问题( factual question )的能力感兴趣,这种事实问题需要高级知识。为了做到这一点,我们使用了 《Measuring massive multitask language understanding》 开发的各种不同领域的选择题数据集。按照这个数据集的通常做法,我们聚焦于按学科领域聚合的结果: 如下图所示,包括人文、社会科学、STEM 和杂项。我们从 《Measuring massive multitask language understanding》five-shot GPT-3 结果出发,报告了 five-shot 的性能,以便与以前的工作相比较。

  3. 自然语言任务的结果:虽然 GPT-NeoX-20B 在某些任务(如 ARCLAMBADAPIQAPROST)上优于 FairSeq 13B,但在其他任务(如 HellaSwagLogiQAzero-shot)上表现不佳。总的来说,在我们所做的 32 项评估中,我们在 22 项任务中表现优异,在 4 项任务中表现不佳,在 6 项任务中处于误差范围之内。

    到目前为止,我们最弱的表现是在 HellaSwag上,在 zero-shotfive-shot 的评估中,我们的得分都比 FairSeq 13B 低四个标准差。同样,GPT-JHellaSwag 上的表现在 zero-shot 中比 FairSeq 6.7B 低三个标准差,在 five-shot 中低六个标准差。我们发现这种巨大的性能损失在很大程度上是无法解释的;虽然我们最初认为 Pile 中大量的非散文的数据子集是罪魁祸首,但我们注意到 GPT-JGPT-NeoX 在非常相似的 Lambada 任务上比FairSeq 模型的性能要好得多,而且差距大致相同。

  4. 数学:虽然 GPT-3FairSeq 模型在算术任务上的表现通常相当接近,但它们的表现一直被 GPT-JGPT-NeoX 所超越。我们猜测,这可以追溯到训练数据中普遍存在的数学方程,但我们警告说,人们不应该认为这意味着在 Pile 上训练会产生更好的 out-of-distribution 的算术推理。《Impact of pretraining term frequencies on few-shot reasoning》 表明,Pile 中的数学方程的频率与 GPT-J 在该方程上的表现有很强的相关性,我们认为这在 GPT-NeoX 20BFairSeqGPT-3 中没有理由不存在。遗憾的是,我们无法研究 FairSeqGPT-3 模型中的这种效应,因为作者没有公布他们的训练数据。

  5. 基于知识的高级任务:虽然 GPT-NeoXFairSeq 模型在 five-shot 的情况下,与 GPT-3 相比,在 MMLU 上都表现出优势的性能(Figure 7 ),但在 zero-shot 的情况下,它们的性能要接近很多( 原始论文附录中的Table 10 ~ 13 )。《Measuring mathematical problem solving with the MATH dataset》声称发现,相对于 zero-shotfew-shot 并不能提高性能,但他们只研究了 GPT-3 。相比之下,我们发现 GPT-NeoXFairSeq 模型在只有 5 个样本的情况下确实有很大的改善。我们认为这是一个警告,不要只根据一个模型得出关于评价指标的强烈结论,并鼓励研究人员开发新的 evaluation benchmark 从而利用多个不同类别的模型,以避免将他们的结论过度适用于一个特定的模型。

  6. 强大的 Few-Shot Learning:我们的实验表明,GPT-J-6BGPT-NeoX-20Bfews-hot 评估中获得的好处大大超过 FairSeq 模型。当从 0-shot 评估到 5-shot 评估时,GPT-J-6B 提高了 0.0526GPT-NeoX-20B 提高了 0.0598 ,而 FairSeq 6.7B13B 模型分别提高了 0.00510.0183 。这一结果在统计学上是显著的,并且对 prompting 的扰动是鲁棒的。虽然我们目前对此没有特别的解释,但我们认为这是对我们模型的强烈推荐。虽然由于资金限制,我们没有对 GPT-3 进行系统的 five-shot 评估,但 Table 10 ~ 13 (参考原始论文中的附录)和 Figure 7 中显示的性能变化进一步支持了 GPT-J-6BGPT-NeoX-20B 能够从 five-shot examples 中获得明显的收益的说法。

48.4 讨论

  1. 局限性:

    • 训练的最佳超参数:超参数调优是一个昂贵的过程,对于几十亿参数的模型来说,全面进行调优往往是不可行的。由于上述局限性,我们选择了根据较小规模的实验、以及根据以前发表的工作( GPT-3 )的超参数的插值(针对我们的模型规模),从而选择超参数。然而,我们的模型架构和 training setup 的几个方面(包括数据和 tokenizer),都与 GPT-3 有很大分歧。因此,几乎可以肯定的是,我们的模型所使用的超参数不再是最佳的,而且有可能从来都不是最佳的。

    • 缺乏 Coding Evaluation:在这个模型的开发过程中,我们做出的许多设计选择都是为了提高 coding task 的性能。然而,我们低估了现有 coding benchmark《Evaluating large language models trained on code》)的难度和成本,因此无法在该领域评估模型。我们希望在未来能做到这一点。

    • Data Duplication:最后,缺乏数据去重也可能对下游性能产生影响。最近的工作表明,训练数据的去重会对困惑度产生很大影响(《Deduplicating training data makes language models better》)。虽然我们的实验没有显示出这种迹象,但由于有很多研究者发现了相反的结果,所以很难否定数据去重。

  2. 发布一个 20B 参数的 LLM:目前的研究现状是,大型语言模型只是人们训练和发表文章的东西,但并没有实际发布。据我们所知,GPT-NeoX-20B 是有史以来公开发布的最大、性能最强的稠密语言模型。各个团体对不发布大型语言模型提出了各种理由,但最主要的理由是:宣称公众对 LLM 的访问会造成伤害。

    发布这个模型是我们让研究人员广泛使用 GPT-NeoX-20B 的工作的开始,而不是结束。由于模型的大小,在两个 RTX 3090Ti 或单个 A6000 GPU 上进行推理是最经济的,而微调需要明显更多的计算。真正促进 LLM 的广泛使用意味着除了模型本身之外,还要促进 computing infrastructure 的广泛使用。我们计划通过继续努力降低我们模型的推理成本,以及与研究人员合作,提供他们在我们的模型上进行实验所需的 computing infrastructure ,从而在这个问题上取得进展。我们强烈鼓励那些对研究 GPT-NeoX-20B 感兴趣、但缺乏必要的 infrastructure 的研究人员主动与我们联系,讨论我们如何为你助力。

四十九、Bloom[2022]

  1. pretrained language model 已经成为现代自然语言处理 pipeline 的基石,因为它们经常从较小数量的标记数据中产生更好的性能。ELMoULMFiTGPT、以及 BERT 的发展导致了 pretrained model 的广泛使用,并且作为初始化从而用于下游任务的微调。随后发现,pretrained language model 可以在没有任何额外训练的情况下执行有用的任务,这进一步证明了pretrained language model 的效用。此外,根据经验观察,语言模型的性能往往随着模型的变大而增加(有时是可预测的、有时是突然的),这导致了 scaling 的增加趋势。除了环境问题,训练大型语言模型(large language model: LLM )的成本只有资源丰富的组织才能承受。此外,直到最近,大多数 LLM 都没有公开发布。因此,学术界的大多数人都被排除在 LLM 的发展之外。这种排斥产生了具体的后果;例如,大多数 LLM 主要是在英文文本上进行训练。

    为了解决这些问题,论文 《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》 提出了 BigScience Large Open-science Open-access Multilingual Language Model: BLOOMBLOOM 是一个在 46 种自然语言和 13 种编程语言上训练的 176B 参数的语言模型,是由数百名研究人员合作开发并发布的。训练BLOOM 的算力是通过法国 GENCIIDRIS 的公共拨款提供的,利用 IDRISJean Zay 超级计算机。为了建立 BLOOM ,论文对它的每个组成部分都进行了彻底的设计,包括训练数据集、模型结构和训练目标、以及分布式学习的工程策略。论文还对该模型的能力进行了分析。论文的总体目标不仅是公开发布一个大规模的多语种语言模型,其性能可与最近开发的系统相媲美,而且还记录了其开发过程中的协调过程( coordinated process )。本文的目的是对这些设计步骤提供一个 high-level 的概述,同时参考作者在开发 BLOOM 的过程中产生的个别报告。

49.1 背景

  1. 语言建模:语言建模指的是对文本中的 token 序列的概率进行建模的任务,其中 token 是文本的一个单位(如单词、子词、字符或字节等)。在这项工作中(以及目前大多数语言建模的应用中),我们对文本中的 token 的联合概率建模为:

    (19)p(x)=p(x1,,xT)=t=1Tp(xtx<t)

    其中:x 是一个关于 token 的序列,xt 是序列中第 ttokenx<txt 之前的token 序列。

    这种方法被称为自回归语言建模,可以被看作是反复预测 next token 的概率。

    • 早期的语言模型:语言模型在 NLP 中的应用有很长的历史。早期的语言模型主要是 n-gram 模型,它根据一个长度为 ntoken 序列在训练语料库中出现的次数来估计该序列的概率。在实践中,n-gram 模型面临两个主要问题:

      • 首先,随着 n 的增加,模型的规模呈指数级增长。

      • 其次,对于未出现在训练数据中的 token 序列,模型没有直接的方法来计算该序列的概率。

      在这些问题上的进展使得 n-gram 模型在 NLP 的大多数领域得到了广泛的应用。

    • 神经语言模型:神经语言模型是 n-gram 模型的替代,最早由 《Natural language processing with modular pdp networks and distributed lexicon》 以及 《Sequential neural text compression》 提出,后来由 《A neural probabilistic language model》 推广。神经语言模型使用一个神经网络来估计在给定 prior tokens 的条件下预测 next token 的概率。

      • 虽然早期的工作使用了具有固定长度历史窗口的前馈神经网络,但 《Recurrent neural network based language model》《Generating text with recurrent neural networks》《Generating sequences with recurrent neural networks》提议使用递归神经网络,并发现这大大改善了性能。

      • 最近,基于 Transformer 架构的语言模型(《Attention is all you need》)被证明比递归神经网络更有效。因此,Transformer 已经成为语言模型的事实选择。

    • 迁移学习:随着使用神经网络的语言建模的进展,NLP pipeline 已经越来越多地采用迁移学习的框架。在迁移学习中,一个模型的参数首先在一个数据丰富的任务上进行预训练,然后再在一个下游任务上进行微调。

      • 历史上常见的获得 pretrained 参数的方法是词向量(《Distributed representations of words and phrases and their compositionality》),通过训练使共同出现的单词之间的词向量的内积很大。

      • 然而,《Deep contextualized word representations》《Universal language model fine-tuning for text classification》《Improving language understanding by generative pre-training》《BERT: Pre-training of deep bidirectional transformers for language understanding》的后续工作表明,《Natural language processing (almost) from scratch》的框架,即整个模型在被微调之前进行预训练,可以达到更强的性能。

        具体而言, GPTBERT 展示了使用 pretrained Transformer 语言模型的强大结果,促使人们在逐步完善的模型上开展工作(RoBERTa, XLNet, BART, T5, ERNIE 等等)。

    • Few-Shot/Zero-Shot Learning:虽然对 pretrained 模型进行微调仍然是在有限的标记数据下获得高性能的有效方法,但并行推进的工作表明,pretrained 语言模型可以被诱导执行任务,而不需要任何后续的训练。

      • 《A neural conversational model》 在一个神经对话模型中观察到有限的 task-performing 行为后, GPT-2 后来证明,基于 Transformer 的语言模型在从网络上爬取的文本上进行训练,可以在不同程度上执行各种任务。

      • 值得注意的是, GPT-2 发现,性能随着模型规模的扩大而提高,从而激发了描述(《Scaling laws for neural language models》《Training compute-optimal large language models》)和利用scale 的效益的工作(Megatron-LMGPT-3Megatron-TuringPalmGopherErnie 3.0 TitanPanGu-alphaOPT)。这种方法成功的一个主要因素是 task-specific 样本在馈入模型时的格式化方式。

      • GPT-3 推广了设计 prompt 的想法,即提供任务的自然语言描述,同时允许输入一些 input-output behaviordemo

    • LLM 发展的社会局限性:虽然大型语言模型的大小持续地增加,使其在广泛的任务中得到改善,但也加剧了其开发和使用的问题(《On the dangers of stochastic parrots: Can language models be too big?》)。

      • 大型模型的计算费用也使学术界的大多数人无法参与其开发、评估和常规使用。

      • 此外,计算成本也导致了对大型语言模型的训练和使用所产生的碳足迹(carbon footprint)的担忧,现有的碳足迹研究可能低估了排放。促进全球碳足迹的增加会加剧气候变化,对已经被边缘化的社群产生最严重的影响。

      • 此外,资源集中在少数(通常是工业)机构(主要是技术专家),阻碍了对该技术的包容性、协作性和可靠性的管理:

        • 首先,由行业从业人员推动的关于技术的公共叙事会导致对其使用的适宜性产生夸大的期望,导致研究和政策优先级的错位,并可能在例如医疗应用中造成可怕的后果。

        • 其次,在一个以技术为媒介的世界里,技术发展的各个阶段的选择最终都会影响人们的生活,其影响方式最接近于法规的影响,尽管在这个过程中没有同样明确的利益相关者。当开发工作以优先考虑内部定义的性能,而不是对社会的影响为指导时,开发者的价值就会被强调,而不是直接用户和间接用户的价值。尽管让这种技术由企业单方面开发会带来巨大的社会危险,但 EleutherAI 是中国以外唯一一个在 BigScience Workshop 召开之前就在开发大型语言模型的非企业实体。

  2. BigScience

    • 参与者: BLOOM 的发展是由 BigScience 协调的。 BigScience 是一个开放的研究协同,其目标是公开发布一个 LLM 。该项目是在获得 GENCI 在其 IDRIS/CNRSJean Zay 超级计算机上的算力资助后开始的。它最初是围绕着 Hugging Face 和法国NLP 社区(创始成员)的共同努力而建立的,并迅速开放,发展成为一个更广泛的国际合作,以支持其语言的、地理的、以及科学的多样性的目标。最终,超过 1200 人注册成为 BigScience 的参与者,并被允许进入其交流群。他们不仅有机器学习和计算机科学的背景,也有语言学、统计学、社会文化人类学、哲学、法律和其他领域的背景。在这些人中,有数百人直接为该项目发布的工件(artifact)之一做出了贡献。虽然最多的参与者最终来自于美国,但也有 38 个国家的代表。

    • 组织: BigScience 所解决的一系列相关研究问题,反映在项目的工作小组组织中。每个工作小组由不同程度的参与者组成,包括主席(主席的作用是围绕整个项目的特定方面进行自我组织)。重要的是,我们鼓励参与者加入一个以上的工作小组,以分享经验和信息,这就形成了下图中的 30 个工作小组。大多数工作组的工作重点是与 BLOOM 的开发直接相关的任务。此外,有几个小组专注于对 LLM 的评估和特定领域的数据集开发,如生物医学文本、历史文本。 《BigScience: A case study in the social construction of a multilingual large language model》 对这一倡议背后的动机、其历史和一些经验教训进行了更大的概述。

    • BigScience 中的伦理考虑:为了承认并开始解决 BigScienceLLM 的社会局限性,研讨会依靠合作设计的道德宪章(Ethical Charter )和对美国以外的司法管辖区的适用法规的原始研究来指导整个项目的选择。具体而言,宪章强调了包容性和多样性、开放性和可复制性、以及组织的各方面的责任等价值观。在项目的数据集整理、建模、工程、评估、以及其他社会影响(贯穿始终)方面,这些价值观都以不同的方式展示出来。

49.2 模型

49.2.1 训练数据集

  1. BLOOMROOTS 语料库上进行了训练,该语料库是 498Hugging Face datasets 的综合体,大约 1.61 T 的文本,涵盖了46 种自然语言和 13 种编程语言。该数据集的 high-level 概览可见于 Figure 3 ,而每一种语言及其 linguistic genus 、族、以及宏观领域的详细列表则见于 Table 1 。除了语料库本身,这个过程还导致了一些组织工具和技术工具的开发和发布,包括 Figure 2 中所示的工具。本节的其余部分将通过提供编制语料库所采取的步骤的简要总结,从而说明这些努力的背景。更详细的关于整个数据集策划过程及其结果,我们请读者参考 《The BigScience ROOTS corpus:A 1.6TB composite multilingual dataset》

    Figure 3:左图中,每个方框代表一种语言,方块大小代表语言规模的占比(字节数);右图中,在大约三万个文件中,十三种编程语言的文件数量占比。

  2. 动机:背景知识中提到的开发者和技术的使用者(自愿的或非自愿的)之间的脱节,在数据集的策划工作中尤为明显。这些数据集支持最近的大型机器学习项目。而在这些项目中,有意(intentional )的数据工作通常被低估。在 LLM 的背景下,这种趋势体现在一系列基于启发式的过滤方法上,这些方法优先考虑以尽可能少的成本获得尽可能多的高质量数据,而不是考虑数据主体(data subject )的需求和权利,其中质量通常被定义为在下游任务中最大化性能,同时偶尔删除开发人员认为冒犯性的内容。

    虽然这些方法确实以相对较少的人力产生了 TB 级的数据,但将源材料(如 CommonCrawl dumps )的 bias 与过滤方法的 bias 相结合,往往会导致边缘化人群(marginalized population )的负面结果。

    • 在一个案例中,使用 block list 来删除色情文本被证明也抑制了语料库中的 LGBTQ+ 和非裔美国人英语(African American English: AAE )文本(《Documenting large webtext corpora: Acase study on the colossal clean crawled corpus》)。

    • 在另一个项目中,使用 Reddit 的外链作为种子语料库的质量指标(GPT-2 ),导致 trained model 在其输出中隐含地优先考虑以美国为中心的观点(《The ghost in the machine has an american accent: value conflict in gpt-3》)。

    • 在另一个项目中,一个依靠机器学习的 image-text alignment model 的过滤方法,被证明在创建的多模态数据集中加剧了其偏见(《Multimodal datasets: misogyny, pornography, and malignant stereotypes》)。

    此外,这种抽象的数据策划方法导致了难以有意义地归档、以及事后治理的语料库,因为个别 item 的出处和 authorship 通常会在这个过程中丢失。尽管像 《The pile: An 800gb dataset of diverse text for language modeling》这样的工作将先前记录的 individual sourcescompilations 置于被抓取的数据之上,为解决这些问题迈出了一步(《Datasheet for the pile》)。

    BigScience workshop 的背景下,根据其道德宪章,我们的目标是在数据策划和归档过程中优先考虑人类的参与、当地的专业知识、以及语言知识,如以下各节所述。

  3. 数据治理:大型文本语料库包括关于人的文本和由人创造的文本,人是数据主体。不同的人和机构可能在法律上拥有这些数据,使他们成为数据权利人(rights-holder )。随着机器学习开发者将这些数据收集并整理成越来越大的数据集从而支持训练更大的模型,开发新的方法来考虑所有相关方的利益变得越来越重要,这些相关方包括开发者、数据主体、以及数据权利人。

    BigScience 的努力旨在通过一个结合技术、法律和社会学专业知识的多学科视角来满足这些需求。该小组在两个不同的时间范围内专注于两个相互关联的主要目标:

    • 设计一个结构用于长期的国际数据治理(该数据治理有限考虑数据权利人的代理权)。

    • 具体建议用于处理直接用于 BigScience 项目的数据。

    《Data governance in the age of large-scale data-driven language technology》 的工作中介绍了第一个目标的进展,该工作进一步激发了数据治理的需求和要求,并概述了数据保管人(custodian )、权利人和其他各方之间的 network 所需的结构,以适当地治理共享数据。这些行为者之间的互动旨在考虑数据和算法主体的隐私、知识产权和用户权利,其方式旨在优先考虑当地的知识、以及指导价值的 expression 。特别是,这种方法依赖于数据提供者和data host 之间的结构化协议,这些协议规定了数据可用于什么。

    虽然我们没能在项目启动和模型训练之间的相对较短的时间内完全建立起一个国际组织,但我们主要通过以下方式努力整合这方面的经验教训(反过来说,也是为了适应我们遇到的实际问题):

    • 首先,只要有可能,我们就从特定的提供者那里寻求明确的许可来使用 BigScience 背景下的数据(例如 《S2ORC: The semantic scholar open research corpus》S2ORC 语料库,或者法国《世界报》的文章)。

    • 其次,在预处理的最后阶段之前,我们将各个数据源分开,以保持可追溯性,并根据其特定上下文的需要处理每一个数据源。

    • 再次,我们对构成整个语料库的各种数据源采取 composite release 的方式,以促进可重复性和后续研究,同时尊重这些 source-dependent 的需求。

    可视化和访问 ROOTS 语料库的资源可以在 Hugging Face HubBigScience Data 组织上找到。该组织拥有几个 demo(或 Space ),可以用来深入了解整个语料库,以及直接访问( 498 个中的)223components 。考虑到它们的许可状态、隐私风险以及与原始保管人的协议,我们能够分发这些components

    最后,由于我们知道未来对 BLOOM 模型的调研可能需要对整个语料库的完全访问,我们也邀请有相关研究项目的研究人员通过注册表格加入正在进行的数据分析工作。

  4. 数据源:给定数据治理的策略,下一步是确定训练语料库的构成。这个阶段是由几个目标驱动的,这些目标有时会有内在的竞争。其中一些竞争包括:建立一个世界上尽可能多的人可以使用的语言模型,同时只包括一些语言(在这些语言上,我们足够专业从而策划一个与以前数据集规模相当的数据集),同时提高文档的标准并尊重数据主体和算法主体的权利。

    • 语言的选择:这些考虑导致我们采用了一个渐进的过程来选择哪些语言将被纳入语料库。我们首先列出了世界上使用人数最多的八种语言,在项目的早期阶段,我们对这些语言进行了积极的宣传,邀请流利地使用该语言的人加入数据工作。然后,根据语言社区的建议(《Participatory research for low-resourced machine translation: A case study inafrican languages》),我们将最初选择的斯瓦希里语(Swahili )扩大到尼日尔-刚果语(Niger-Congo )语言类别,将印地语(Hindi )和乌尔都语(Urdu )扩大到印度语系(Indic )语言。最后,我们提议,对于另一些语言,如果任何由 3 名或更多精通该语言的参与者组成的小组,如果他们愿意承诺选择数据源并指导处理过程,就可以将该语言添加到支持的列表中,以避免通过自动语言识别选择的语料库在没有特定语言专业知识的情况下出现常见问题(《Quality at a glance: An audit of web-crawled multilingual datasets》)。

    • 数据源选择:语料库的最大部分是由研讨会的参与者和研究集体策划的,他们共同编制了 BigScience Catalogue 目录:一个涵盖各种语言的 processednon-processed 的数据源的大清单。这采取了由Machine Learning TokyoMasakhaneLatinX in AI 等社区共同组织的 hackathons 的形式。作为对这些努力的补充,其他工作组的参与者编制了 language-specific resource ,如专注于阿拉伯语的 Masader repository 。通过这种自下而上的方法,总共确定了 252 个数据源,每个语言类别至少有 21 个数据源。此外,为了增加我们的西班牙文、中文、法文和英文等数据源的geographic coverage ,参与者通过 pseudocrawl (一种从通用 Common Crawl 快照中获取这些网站的方法)确定了他们语言中的本地相关网站,以添加到语料库中。

    • GitHub Code:该目录进一步补充了从谷歌 BigQuery 上的 GitHub 数据集合中收集到的编程语言数据集,然后对 exact matches 的数据进行了去重。对语言的选择反映了 《Competition-level code generation with AlphaCode》 为训练AlphaCode 模型所做的设计选择。

    • OSCAR : 为了不偏离使用互联网作为预训练数据来源的标准研究实践(GPT-1T5),同时也为了满足我们在 BLOOM 大小下的计算预算的数据量需求,我们进一步从 OSCAR 21.09 版本中获取数据,对应于 20212 月的 Common Crawl 快照,最终占到语料库的 38%

  5. 数据预处理:在确定 source 后,数据处理过程涉及几个步骤来处理 data curation 的多个方面。下图中可以看到构建 ROOTS 的总体视图和 processing pipeline 。这个过程中开发的所有工具都可以在 GitHub 上找到。

    • 获取源数据:第一步是获取前面所确定的所有文本数据源的数据,这包括从各种格式的 NLP 数据集中下载和提取文本字段(包括如问答数据集、摘要数据集、或对话数据集),从压缩文件(如法国的科学文章 repository )爬取和处理大量的 PDF 文件,以及大量网站中提取和预处理文本(这些网站包括:从目录中的 192 个网站、数据工作组成员选择的另一批地域多样化的 456 个网站的集合)。 后者需要开发新的工具,从 Common Crawl WARC 文件中的 HTML 中提取文本,我们在 main data preparation repository 中提供了这些文件。 我们能够从 539 个网站的所有 URL 中找到并提取可用的文本数据。

      192 + 456 = 548,这里的 539 说明作者对所有的网站进行了一些过滤处理。

    • 质量过滤:在获得文本后,我们发现大多数数据源包含一些非自然语言的文本,例如 preprocessing errorSEO 页面、或垃圾邮件(包括色情垃圾邮件)。为了过滤非自然语言,我们定义了一套质量指标,其中高质量的文本被定义为由人类为人类所写(written by humans for humans ),没有内容的区别(因为我们希望内容选择完全是由更负责任的 human source selection 的领域)或先验的语法判断。完整的指标列表见 《The BigScience ROOTS corpus:A 1.6TB composite multilingual dataset》。重要的是,这些指标主要以两种方式适应每个数据源的需要。

      • 首先,他们的参数,如阈值和支持的 term list ,是由 fluent speakers 为每种语言单独选择的。

      • 其次,我们手动检查了每个数据源,以确定哪些指标最有可能识别非自然语言。

      这两个过程都得到了工具的支持,以使其影响可视化。

    • 数据去重和隐私再加工:最后,我们通过两个重复去重步骤删除了近乎重复的文件,并编辑了我们可以从语料库的 OSCAR 版本中识别的个人身份信息(如 social security number: SSN ),因为它被认为是呈现最高隐私风险的来源,这促使我们应用 regrex-based 的再加工,即使在正则表达式有一些假阳性的情况下。

  6. Prompted Datasetmultitask prompted finetuning (也被称为 instruction tuning )涉及在 training mixture 上微调 pretrained language model ,其中这个 training mixture 由自然语言 prompts 指定的一组大的不同的任务所组成。T0(作为BigScience 的一部分开发)表明,在 prompted datasetsmultitask mixture 上进行微调的语言模型具有很强的 zero-shot task generalization 能力。此外,T0 被证明优于那些大一个数量级但没有经过这种微调的语言模型。在这些结果的激励下,我们探索了使用现有的自然语言数据集来进行 multitask prompted finetuning

    T0 是在 Public Pool of Prompts: P3 的一个子集上训练的,P3 是各种现有的和开源的英语自然语言数据集的 prompts 的集合。这个prompts 集合是通过一系列涉及 BigScience collaboratorshackathons 活动创建的, hackathons 参与者为 170 多个数据集编写了总共 2000 多个 promptsP3 中的数据集涵盖了各种自然语言任务,包括情感分析、问答、以及自然语言推理,不包括有害内容或非自然语言(如编程语言)。PromptSource 是一个开源工具包(也作为 BigScience 的一部分开发),为创建、共享、以及使用自然语言 prompts 提供了便利。收集过程的全部细节在(《Multitask prompted training enables zero-shot task generalization》《PromptSource: An integrated development environment and repository for natural language prompts》)中给出。

    在对 BLOOM 进行预训练后,我们应用同样的大规模多任务微调配方(recipe ),使 BLOOM 具备多语言 zero-shot task generalization 能力。我们将得到的模型称为BLOOMZ 。为了训练 BLOOMZ ,我们对 P3 进行了扩展,以包括除英语以外的新语言数据集和新任务,如翻译。这就产生了 xP3 ,一个涵盖 46 种语言和 16 项任务的 83 个数据集的 prompts 集合。如下图所示,xP3 反映了 ROOTS 的语言分布。xP3 中的任务既有跨语言的(如翻译),也有单语言的(如摘要、问答)。我们使用PromptSource 来收集这些 prompts ,为 prompts 添加额外的 metadata ,如 input languagetarget language 。为了研究多语言 prompts 的重要性,我们还将 xP3 中的 English prompts 用机器翻译成相应的语言,以产生一个名为 xP3mt 的集合。关于 xP3xP3mtprompt collection 的进一步细节,见 《Crosslingual generalization through multitask finetuning》

49.2.2 模型架构

  1. 这里讨论了我们的设计方法和 BLOOM 模型的架构。深入的研究和实验可以在 《What language model to train if you have one million GPU hours?》《What language model architecture and pretraining objective works best for zero-shot generalization?》 找到。我们首先回顾了我们的设计方法,然后激励我们选择训练一个 causal decoder-only 的模型。最后,我们论证了我们的模型结构偏离标准做法的方式。

  2. 设计方法:所有可能的架构的设计空间是巨大的,使详尽的探索成为不可能。一种选择是完全复制现有大型语言模型的架构。另一方面,大量关于改进现有架构的工作相对来说很少被采用(《Do transformer modifications transfer across implementations and applications?》);采用其中的一些推荐做法可以产生一个明显更好的模型。我们采取中间立场,关注如下的模型系列:已经被证明 scale well ,并且在公开可用的工具和代码库中有合理支持。我们对模型的组件和超参数进行消融分析,以寻求对我们的 final compute budget 的最佳利用。

    • 消融分析的实验设计:LLM 的主要吸引力之一是它们以 zero-shot/few-shot 的方式执行任务的能力:足够大的模型可以简单地从上下文指令和例子中执行新的任务(GPT-2),而不需要在监督样本上进行专门的训练。因此,由于对 100B+ 的模型进行微调是不容易的,我们把对架构决策的评估集中在 zero-shot generalization 上,而不考虑迁移学习。

      具体来说,我们在不同的任务集合上测量了 zero-shot 性能:来自 EleutherAI 语言模型评估工具(EAI-Eval )的 29 个任务、以及来自 T0 评估集(T0-Eval)的 9 个任务。两者之间有很大的重叠:只有 T0-Eval 的一个任务(StoryCloze )不在 EAI-Eval 中,尽管两者之间的所有 prompts 都不一样。有关任务和 baseline 的详细清单,请参见 《What language model to train if you have one million GPU hours?》。我们还注意到,我们的任务集合共享了 GPT-3 evaluation31 个任务中的 17 个。

      我们使用较小的模型进行消融实验。我们使用 6.7B 的参数规模进行 pretraining objective 的消融分析,用 1.3B 的参数规模进行剩余的消融实验(包括 position embeddingactivationlayer normalization )。最近,《LLM.int8(): 8-bit matrix multiplication for transformers at scale》 确定了大于 6.7B 的模型的 phase transition ,其中观察到 outliers features 的出现。这就提出了疑问:是否应该假定在 13B 规模下获得的结果可以推断到我们最终的模型规模?

    • 范围之外的架构:我们没有考虑 mixture-of-expert: MoE,因为缺乏关于 MoE 的广泛使用的、能大规模训练 MoEGPU-based 代码库。

      同样地,我们也没有考虑 state-space 模型。在设计 BLOOM 的时候,它们在自然语言任务中一直表现不佳。这两种方法都很有前途:现在已经在 MoElarge scale 上表现出有竞争力的结果,在较小的 scalestate-space 模型与 H3 也表现出有竞争力的结果。

  3. 架构和 pretraining objective:尽管大多数现代语言模型都是基于 Transformer 架构的,但架构实现之间存在着重大的 deviation 。值得注意的是,虽然最初的 Transformer 是基于 encoder-decoder 架构的,但许多流行的模型都选择了 encoder-only (如 BERT )或 decoder-only (如 GPT )方法。目前,所有超过 100B 参数的 SOTA 语言模型都是 causal decoder-only 模型。这与 T5 的研究结果相反,在 T5 的研究结果中,对于迁移学习, encoder-decoder 模型的表现明显优于 decoder-only 模型。

    在我们的工作之前,文献中缺乏对不同架构和 pretraining objectivezero-shot generalization 能力的系统评估。我们在《What language model architecture and pretraining objective works best for zero-shot generalization?》 中探讨了这个问题,其中我们评估了 encoder-decoder 架构和 decoder-only 架构,以及它们与 causalprefix 、以及masked languagemodeling pretraining objective 的交互。我们的结果显示,在紧接着预训练后,causal decoder-only 模型表现最好,验证了 SOTALLM 的选择。此外,causal decoder-only 模型可以在预训练后更有效地适应 non-causal 的架构和 objective ,这种方法已经被 《Transcending scaling laws with 0.1% extra compute》 进一步探索和证实。

  4. 建模细节:除了选择架构和 pretraining objective 外,人们还提出了对原始 Transformer 架构的一些改变。例如,替代的 positional embedding 方案(RoFormerALiBi)、或新的激活函数(《GLU variants improve transformer》)。因此,我们进行了一系列的实验,以评估 《What language model to train if you have one million GPU hours?》 中的 causal decoder-only 模型的每一个修改的好处。我们在 BLOOM 中采用了两种架构的修改:

    • ALiBi Positional EmbeddingALiBi 没有向 embedding layer 添加位置信息,而是直接根据按 keyquery 的距离来减弱注意力分数(《Train short, test long: Attention with linear biases enables input length extrapolation》)。虽然 ALiBi 最初的动机是它能够推断出更长的序列,但我们发现它也导致了更平滑的训练和更好的下游性能,甚至在原始序列的长度上超过了 learned embeddingrotary embedding

    • Embedding LayerNorm:在训练 104B 参数模型的初步实验中,我们按照 bitsandbytes 库的 StableEmbedding layer 所推荐的,在 embedding layer 之后立即添加了一个 additional layer normalization 。我们发现这大大改善了训练的稳定性。尽管我们也发现它惩罚了 zero-shot generalization《What language model to train if you have one million GPU hours?》),但我们在训练 BLOOM 时在第一个 embedding layer 之后增加了 additional layer normalization 从而避免训练不稳定。注意初步的 104B 实验是在 float16 中进行的,而最终的训练是在 bfloat16 中进行的。因为从那时起,float16 被认为是造成训练 LLM 中许多观察到的不稳定性的原因(《OPT: Open pre-trained transformer language models》《Glm-130b: An open bilingual pre-trained model》)。可能是 bfloat16 减轻了对 embedding LayerNorm 的需要。

      注意:虽然 embedding layer 之后添加一个 layer norm 会有助于训练的稳定性,但是它降低了模型的性能。

    我们在下图中展示了 BLOOM 的完整架构,供参考。

    BLOOM 采用的是 Pre-LN 的方案(原始 Transformer 用的是 Post-LN 的方案),即:Layer Norm 在残差块中、在 F() 函数之前。

49.2.3 Tokenization

  1. 训练 tokenizer 的设计决策往往被忽视,而采用默认配置(《Between words and characters: A brief history of open-vocabulary modeling and tokenization in nlp》) 。例如,OPTGPT-3 都使用 GPT-2tokenizer ,这个 tokenizer 是为英语而训练的。这可以说是合理的,因为评估 tokenizer 的特定选择对模型下游性能的影响,这受到了巨大的训练成本的限制。然而,BLOOM 训练数据的多样的特性,需要谨慎的设计选择,以确保 tokenizer 以无损的方式对句子进行编码。

    • Validation :与现有的 monolingual tokenizer 相比,我们使用我们的 tokenizerfertility《Exploring bert's vocabulary》)作为健全性检查(sanity check)的一个指标。 fertility 被定义为 tokenizer 为每个单词或每个数据集创建的 subwords 的数量。我们使用 Universal Dependencies 2.9OSCAR 中我们感兴趣的语言的子集来衡量 fertility 指标。与 monolingual tokenizer 相比,一种语言的 fertility 非常高,可能表明该模型的下游多语性能下降(《How good is your tokenizer? on the monolingual performance of multilingual language models》)。我们的目标是,当我们的 multilingual tokenizer 与相应语言的 monolingual tokenizer 进行比较时,每种语言的 fertility 不能降低超过 10 个百分点。在所有的实验中,Hugging Face Tokenizers 库被用来设计和训练 tested tokenizers

    • Tokenizer Training Data:我们最初使用的是 ROOTS 的非去重子集。然而,对 tokenizer 的词表(vocabulary)的定性研究显示了其训练数据的问题。例如,在 tokenizer 的早期版本中,我们发现整个 URL 被存储为 tokens ,这是由几个包含大量重复内容的文件造成的。这些问题促使我们在 tokenizer 的训练数据中删除重复的行。然后,我们对每种语言采用与 training data 相同的采样比例。

    • 词汇量:大的词汇量( vocabulary size )可以减少对某些句子过度分割的风险,特别是对低资源语言(low-resource language)。我们使用 150k250k 的词汇量进行了验证实验,以便于与现有的多语言建模文献进行比较(《Unsupervised cross-lingual representation learning at scale》《mT5: A massively multilingual pre-trained text-to-text transformer》)。与 monolingual tokenizer 相比,我们最终确定了 250k 的词汇量来达到我们的 initial fertility objective 。由于词汇量决定了 embedding 矩阵的大小,出于 GPU 效率的考虑,它也必须能被 128 整除;它也能被 4 整除,以便使用张量并行。我们使用了 250,680 个词表条目的最终规模,并为未来可能的应用保留了 200token ,例如使用 placeholder tokens 来移除私人信息。

    • Byte-level BPE:该 tokenizer 是一个 learned subword tokenizer ,使用 《A new algorithm for data compression》 介绍的 Byte Pair Encoding: BPE 算法训练。为了在 tokenization 过程中不丢失信息,tokenizer 从字节而不是字符作为最小的单位开始创建 mergesGPT-2)。这样一来,tokenization 永远不会导致 unknown tokens ,因为所有 256 个字节都可以包含在 tokenizer 的词表中。此外,Byte-level BPE 最大限度地实现了语言之间的 vocabulary sharing《Neural machine translation with byte-level subwords》)。

    • Normalization:在 BPE tokenization 算法的上游,没有对文本进行 normalization ,以便拥有尽可能通用的模型。在所有情况下,我们观察到,在所有考虑到的语言中,添加 NFKCunicode normalization 并没有将 fertility 降低 0.8% 以上,但其代价是使模型的通用性降低;例如,导致 2222 以相同的方式被编码。

    • Pre-tokenization:我们的 pre-tokenization 有两个目标:

      • 产生文本的第一次分割(通常使用空白符号和标点符号)。

      • 限制 token 序列的最大长度,其中 tokenBPE 算法来产生。

      所使用的 pre-tokenization 规则是以下的正则表达式:"?[^(\S|[.,!...。,、~“])]+",它将单词分割开来,同时保留所有的字符,特别是对编程语言至关重要的空格和换行序列。我们不使用其他 tokenizer 中常见的以英语为中心的拆分(例如围绕 'nt'll 的拆分)。我们也没有在 numbersdigits 上使用拆分(如果这么拆分,会在阿拉伯语和 code 中造成问题)。

      数字 112 要不要拆分成 1 1 2 三个数字?LLaMA 进行了这种拆分,而 BLOOM, GLM-130B 没有进行这种拆分。

49.2.4 工程

  1. 硬件:该模型在 Jean Zay 上进行训练,这是一台法国政府资助的超级计算机,由 GENCI 拥有,在法国国家科学研究中心(French National Center for Scientific Research: CNRS )的国家计算中心 IDRIS 运行。训练 BLOOM 花了大约 3.5 个月时间,消耗了 1,082,990 个计算小时。训练在 48 个节点上进行,每个节点有 8NVIDIA A100 80GB GPU (总共 384GPU )。由于训练期间可能出现硬件故障,我们还保留了 4 个备用节点。这些节点配备了 2x AMD EPYC 7543 32-Core CPU512GB 内存,而存储则由全闪存和硬盘驱动器混合处理,使用 SpectrumScaleGPFS )并行文件系统,在超级计算机的所有节点和用户之间共享。每个节点有 4NVLink GPU-to-GPU 的互连,实现了节点内的通信;而每个节点有 4Omni-Path 100 Gbps 链接,以enhanced 的超立方体 8D 全局拓扑结构排列,用于节点间的通信。

  2. 框架:BLOOM 是用 Megatron-DeepSpeed《Using DeepSpeed and Megatron to train Megatron-Turing NLG 530B, a large-scale generative language model》)训练的,这是一个大规模分布式训练的框架。它由两部分组成:

    • Megatron-LM 提供了Transformer 实现、张量并行、以及数据加载原语。

    • DeepSpeed 提供了 ZeRO optimizer、模型流水线、以及通用分布式训练组件。

    这个框架允许我们用 3D 并行(如下图所示)有效地训练,这是分布式深度学习的三种互补的方法的融合。这些方法描述如下:

    • 数据并行(Data parallelism: DP):拷贝模型多次,每个副本放在不同的设备上,并馈入数据的一个分片。处理是并行进行的,所有的模型副本在每个 training step 结束时都被同步。

    • 张量并行(Tensor parallelism: TP):将模型的各个 layer 以层为单位,拆分到多个设备上。这样,我们不是让整个 activation 张量或梯度张量驻留在单个 GPU 上,而是将该张量的分片(以层为单位)放在不同的 GPU 上。这种技术有时被称为水平并行、或层内模型并行。

    • 流水线并行(Pipeline parallelism: PP):将模型的每一层分割到多个 GPU 上,因此每个 GPU 上只放置模型的某些层的一部分。这有时被称为垂直并行。

    最后,Zero Redundancy Optimizer《ZeRO: Memory optimizations toward training trillion parameter models》)允许不同的进程只持有一个 training step 所需的一部分数据(parameters、梯度、以及 optimizer states )。我们使用了 ZeRO stage 1 ,也就是说,只有 optimizer states 是以这种方式分片的。

    上述四个组件组合在一起,可以扩展到数百个 GPU ,并具有极高的 GPU 利用率。在我们使用 A100 GPUfastest 配置中,我们能够实现 156 TFLOPs ,达到了目标:理论峰值性能 312 TFLOPsfloat32bfloat16 )的一半。

  3. 浮点格式:在 NVIDIA V100 GPU 上早期的的 104B 参数模型实验中,我们观察到了数值不稳定性,导致了不可逆的训练发散。我们假设,这些不稳定性源于我们最初使用的 IEEE float16 ,这是一种动态范围非常有限的 16 位浮点格式,可能会导致溢出。我们最终获得的 NVIDIA A100 GPU 支持 bfloat16 格式,其动态范围与 float32 相同。另一方面,bfloat16 的精度仍然低得多,这促使我们使用混合精度训练(《Mixed precision training》 )。这种技术以 float32 的精度执行某些精度敏感的操作,如 gradient accumulationsoftmax ,其余操作则以较低的精度执行,使我们能够实现高性能和训练稳定性的平衡。最终,我们在 bfloat16 混合精度下进行了最终训练,这被证明解决了不稳定问题(与 《Using DeepSpeed and Megatron to train Megatron-Turing NLG 530B, a large-scale generative language model》 之前的观察一致)。

  4. 融合的 CUDA kernels:一般来说,GPU 不能在检索数据(为了进行计算)的同时进行这些计算。此外,现代 GPU 的计算性能远远高于每个操作(在 GPU 编程中通常称为 kernel )所需的内存传输速度。Kernel fusion《Optimizing data warehousing applications for GPUs using kernel fusion/fission》)是一种优化 GPU-based 的计算的方法,只在一个 kernel call 中执行几个连续的操作。这种方法提供了一种最小化数据传输的方法:中间结果留在 GPU 寄存器中,而不是被复制到 VRAM 中,从而节省了开销。

    我们使用了由 Megatron-LM 提供的几个自定义的 fused CUDA kernels

    • 首先,我们使用一个 optimized kernel 来执行 LayerNorm ,以及融合了各种操作(如scaling, masking, softmax 等等)的组合的 kernel

    • 此外,还使用 PyTorchJIT 功能将 bias 项的加法与 GeLU activation 融合。作为使用 fused kernel 的一个例子,在GeLU 操作中增加 bias 项不会增加额外的时间,因为该操作是 memory-bound 的:与 GPU VRAM 和寄存器之间的数据传输相比,额外的计算可以忽略不计,因此融合这两个操作基本上可以将其运行时间减半。

  5. 额外的变化:扩展到 384GPU 需要两个 final changes:禁用异步的 CUDA kernel launches (为了便于调试和防止死锁)、将 parameter groups 拆分成更小的 subgroups (以避免过度的 CPU 内存分配)。

    在训练期间,我们面临着硬件故障的问题:平均每周有 1 ~ 2GPU 发生故障。由于有备份节点并自动使用,而且每三个小时保存一次 checkpoint ,这并没有对训练的吞吐量产生很大影响。data loader 中的 PyTorch 死锁错误、以及磁盘空间问题导致了 5 ~ 10 小时的停机时间。鉴于工程问题相对稀少,而且只有一个 loss spike ,模型很快就恢复了,因此与同类项目(《OPT: Open pre-trained transformer language models》)相比,人工干预的必要性较小。我们训练 BLOOM 的经验的全部细节、以及我们面临的所有问题,这些详细报告都是公开的。

49.2.5 训练

  1. Pretrained Model:我们用下表中详列的相应的超参数来训练 BLOOM 的六种尺寸变体。架构和训练超参数来自于我们的实验结果(《What language model to train if you have one million GPU hours?》)和之前训练大型语言模型的工作(GPT-3《Scaling laws for neural language models》)。

    • non-176B 模型的模型深度和宽度大致遵循以前的文献(GPT-3OPT ),对 3B7.1B 的模型有所偏离,只是为了在我们的训练设置上更容易适应这些模型。由于多语言词汇量较大,BLOOMembedding 参数规模也较大,但 scaling 文献对 embedding 操作进行了折扣(《Scaling laws for neural language models》)。

    • 104B 参数规模的开发过程中,我们试验了不同的 Adam 参数值、权重衰减值和梯度剪裁值,以达到稳定的目的,但没有发现有什么帮助。

    • 对于所有的模型,我们使用 cosine learning rate decay schedule ,超过 410B tokens (即,cosine length 的长度) ,训练的序列长度选择计算允许条件时的上限,并在前 375M tokens 进行预热。我们使用权重衰减、梯度剪裁、以及 no dropoutROOTS 数据集包含大约 341B 个文本 token ,所以我们的目标是对所有模型进行等量 token 的训练。然而,考虑到训练期间公布的 revised scaling laws《Training compute-optimal large language models》),我们决定在重复数据上对大型模型进行额外的 25B tokens 的训练。由于 warmup tokens + decay tokens 大于 tokens 总数,因此从未达到 learning rate decay 的终点。

      余弦学习率调度的周期为 410B tokens,它是数据集规模 341B1.20 倍。这是 《Training Compute-Optimal Large Language Models》 论文得出的经验结果。

  2. 多任务微调: finetuned BLOOMZ 模型(《Crosslingual generalization through multitask finetuning》)保持与 BLOOM 模型相同的架构超参数。微调超参数粗略地基于 T0《Multitask prompted training enables zero-shot task generalization》)和 FLAN《Finetuned language models are zero-shot learners》)。学习率是由各自 pretrained model 的最小学习率的两倍决定的,然后进行四舍五入。对于小型变体, global batch size 乘以4 ,以增加吞吐量。虽然模型被微调了 13B tokens ,但 best checkpoint 是根据一个单独的验证集选择的。我们发现在经过 1B ~ 6B tokens的微调后,性能趋于稳定。

  3. Contrastive Finetuning:我们还使用 SGPT Bi-Encoder 配方(《SGPT: GPT sentence embeddings for semantic search》)对 1.3B7.1B 参数的 BLOOM 模型进行了对比性微调,以训练产生高质量 text embedding 的模型。我们创建了面向多语言信息检索的 SGPT-BLOOM-7.1Bmsmarco 、以及面向多语言语义文本相似性(semantic textual similarity: STS)的SGPT-BLOOM-1.7B-nli 。然而,最近的基准测试发现,这些模型也推广到其他各种 embedding 任务,如 bitext miningreranking 、或用于下游分类任务的特征提取(《MTEB: Massive text embedding benchmark》)。

  4. 碳足迹(Carbon Footprint):虽然大多数估算语言模型碳足迹的尝试都揭示了由于模型训练过程中消耗的能源而产生的排放,但其他排放源也是需要考虑的。在估算 BLOOM 的碳排放时,我们受到生命周期评估(Life Cycle Assessment: LCA )方法的启发,旨在考虑设备制造、中间模型训练、以及部署等方面的排放。根据我们的估计,BLOOM training 的碳排放加起来约为 81CO2eq ,其中 14% 是由设备制造过程产生的(11 吨)、30% 是训练期间消耗的能源(25 吨)、55% 是用于训练的设备和计算集群的闲置消耗(45 吨)。

    BLOOM 训练的碳排放与其他类似模型进行比较(见下表),发现虽然 BLOOM 的能耗(433 Mwh)略高于 OPT324 Mwh ),但其排放量却减少了约 2/325吨对比70 吨)。这要归功于用于训练 BLOOM 的能源网( energy grid) 的低碳强度,其排放量为57 gCO2eq/kWh ,而用于 OPT 训练的能源网为 231 gCO2eq/kWh 。具体来说,法国的国家能源网( Jean Zay 所使用的)主要由核能驱动,与由煤炭和天然气等能源驱动的电网相比,核能是低碳的。虽然对核能的可持续性存在争议,但它是目前碳密集度最低的能源之一。BLOOMOPTGPT-3 的碳排放量要少得多(《Carbon emissions and large neural network training》),这可以归因于几个因素,包括更有效的硬件、以及碳密集度较低的能源。

    我们还进一步探讨了:在 Big Science 研讨会范围内在 Jean Zay 上进行的计算,以及实时运行 BLOOM 模型 API 的碳足迹。就整个计算的碳足迹而言,我们估计最终的 BLOOM 训练约占总排放量的 37% ,其他过程如中间的 training run 和模型评估加起来占其他的 63% 。这略低于 OPT 论文作者的估计,他们说由于实验、baseline、以及消融分析,其模型的总碳足迹大约高 2 倍。我们正在对 BLOOM API 的碳排放进行探索,估计模型在具有 16GPUGCP instance 上的实时部署,在 us-central 地区运行,每天的部署会排放大约 20 公斤的 CO2eq (或 0.83 kg/hour )。这个数字并不代表所有的部署用例,而且会因使用的硬件以及模型实施的具体情况(如是否使用 batching )和模型收到的请求数量而有所不同。关于 BLOOM 的碳足迹的更多信息可以在 《Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model》 中找到。

49.2.6 发布

  1. 开放性一直是 BLOOM 发展的核心,我们希望确保它能被社区轻松使用。因此,我们致力于将文档制作成 Model Card 、以及致力于一个新的 license 用于解决项目的具体目标。

  2. Model Card:按照发布机器学习模型的最佳实践,BLOOM 模型已经与详细的 Model Card 一起发布,描述了其技术规范、训练细节、预期用途、范围外用途、以及模型的局限性。各工作小组的参与者共同制作了最终的Model Card 、以及每个checkpoint 的类似的 Model Card 。这项工作是协作性的,主要是通过思考和讨论每一个部分,然后根据参与者在讨论过程中自然形成的分类和区别,进一步划分为子部分。

  3. Licensing:考虑到 BLOOM 可能带来的潜在有害的使用情况,我们选择在无限制的开放使用、以及负责任的使用之间取得平衡,包括行为使用条款(《Behavioral use licensing for responsible ai》),以限制该模型在潜在有害使用情况下的应用。这类条款通常包括在越来越多的负责任的人工智能许可证(Responsible AI Licenses: RAIL ) 中,社区在发布他们的模型时一直在采用这类许可证。为 BLOOM 开发的 RAIL license 的一个突出方面是,它将源代码 license 和模型 license 分开,其中模型指的是 trained parameters 。它还包括对模型的使用和衍生作品的详细定义,以确保通过promptingfinetuningdistillation、使用 logits 和概率分布等预期的下游使用被明确地确定。license 包含 13 个行为使用限制,这些限制是根据 BLOOM 模型卡中描述的预期用途和局限性,以及 BigScience 的道德宪章确定的。license 免费提供该模型,用户只要遵守条款(包括使用限制),就可以自由使用该模型。BLOOM 的源代码已在 Apache 2.0 open source license 下提供。

49.3 评估

  1. 我们的评估集中在 zero-shot/few-shot setting 上。我们的目标是准确描述:在最真实地反映模型在实践中可能被使用的方式的setting 中, BLOOM 与现有的 LLM 相比如何。由于这些模型的规模,prompt-based adaptationfew-shot in-context learning 目前比微调更常见。因此,我们报告了在 zero-shot/one-shotprompt-based setting 中,以及在多任务微调之后,一系列任务和语言的结果。为了与其他模型进行比较,我们首先报告了在 zero-shot setting 设置下的标准基准任务的性能。然后,我们使用多语言摘要、以及机器翻译来比较不同语言的性能。我们还从 multilingual probing 的角度来解释 BLOOM 的泛化能力。

49.3.1 实验设计

  1. prompts:基于最近关于 prompting 对语言模型性能的影响的研究,我们决定建立一个语言模型评估套件,允许我们改变基本的任务数据以及用于 contextualize 任务的 prompting 。我们的 prompts 是在 BLOOM 发布之前开发的,并没有使用模型进行任何先验的完善。也就是说,我们在评估中使用的 prompts 是人类认为从语言模型中获取所需 task behavior 的合理方式。我们以这种方式设计 prompts 的目的是为了模拟一个新用户可以从 BLOOM 中期待的真实的 zero-shot/one-shot 的结果。这与呈现最佳性能的prompt design 形成对比,其中结果来自于多轮 trial-and-error 。我们选择报告前者是因为后者更难系统性地复现,可以说是对模型在一般情况下如何工作的一种不太有代表性的描述,不能代表真正的 zero-shot learningzero-shot learning 没有任何标记数据,而 trial-and-error 事实上存在一些标记数据)。

    我们使用 promptsource 为每个任务生成多个 prompts 。我们遵循 《Multitask prompted training enables zero-shot task generalization》使用的程序,其中 prompt generation 是众包的,因此我们看到整个 prompts 的长度和风格有很大的不同。为了提高质量和清晰度,我们对每个 prompt 进行了多次同行评议,以确保 artifacts 和一致性。

    下表显示了用于 WMT'14 任务的 prompts 的例子。我们还为许多任务生成了 prompts ,但由于资源限制,这些 prompts 没有包括在本文的页面中。我们对所有任务(包括本文分析的任务和尚未分析的任务)的所有 prompts 都是公开的。

  2. 基础设施:我们的框架扩展了 EleutherAI 的语言模型评估工具(《A frameworkfor few-shot language model evaluation》),将其与前面 ”训练数据集“ 章节中描述的promptsource library 整合。我们将我们的 Prompted Language Model Evaluation Harness 作为一个开放源码库发布给人们使用。我们使用这个框架来运行实验和汇总结果。

  3. 数据集:

    • SuperGLUE:我们使用 SuperGLUE 评估套件的分类任务子集,具体而言是: Ax-b, Ax-g, BoolQ, CB, WiC, WSC,RTE 任务。我们排除了其余的任务,因为它们需要的计算量比我们考虑的所有这些任务的总和还要多一个数量级。这些任务是纯英语的,因此它们被包含在以前的工作中从而便于比较,而以前的工作主要集中在纯英语的模型上。我们还注意到,这些任务的性能还没有使用 zero-shot/one-shot prompt-based setting 来广泛报道过。T0 是第一个例外,但该模型是 instruction-tuned 的,因此不能与 BLOOMOPT 等模型直接比较。

      对于每个任务,我们从 promptsource 中随机选择五个 prompts 样本,在这组 prompts 上评估所有模型。与 Evaluation Harness《A framework for few-shot language model evaluation》)中的其他 prompting task 一样,一个模型对给定 prompt 的预测是这样得到的:使用与prompt 相关的、指定的一组候选 label string ,然后选择这些 label string 中对数似然最大的那个。

    • 机器翻译(Machine Translation: MT):我们在三个数据集(使用 ISO-639-2 code 来指代语言)上评估 BLOOMWMT14 eng <-> fre and eng <-> hinFlores-101DiaBLa 。我们使用 BLEUsacrebleu 实现进行评估,对 WMTDiaBLa 使用默认的 tokenization ,对 Flores 使用 spm-flores-101 。我们使用贪婪解码,生成预测直到 EOS token ,或者另外对1-shot 的情况使用 \n###\n 。每个数据集的最大生成长度被设定为与文献中通常使用的长度一致;具体来说,WikiLinguaWMT1464 tokensFlores-101DiaBla512 tokens 。具体任务的实验设计细节参考后文。

    • 摘要:我们对 WikiLingua 数据集的摘要进行评估。WikiLingua 是一个多语言摘要数据集,包括 WikiHow 文章、以及 step-by-step summarypair 对。 pair 对在多种语言之间进行对齐,source 和摘要的翻译由一个国际翻译团队进一步审核。 one-shot 条件自然语言生成通常未被规模与 BLOOM 相当的模型所报道。PaLM 是第一个例外,它在 WikiLingua 上报告了分数;但是,只考察了该模型在英语中的摘要能力。相比之下,我们选择通过评估源语言的抽象摘要能力来测试 BLOOM 固有的多语言能力。我们专注于九种语言(阿拉伯语、英语、西班牙语、法语、印地语、印度尼西亚语、葡萄牙语、越南语、汉语),这些语言是 BigScience 工作的目标之一。

      自然语言生成是众所周知的对于评估是一个挑战,而多语言生成由于缺乏指标支持而使这一挑战更加复杂。根据 《Repairing the cracked foundation: A survey of obstacles in evaluation practices for generated text》 的建议,我们报告了 ROUGE-2ROUGE-LLevenshtein 距离。对 ROUGE 的一个重要修改是使用从 Flores-101 数据集建立的 SentencePiece tokenizer。一个朴素的方法会使用基于英语的 tokenizer ,但使用多语言 tokenizer 可以提高能力来衡量多语言生成的 fidelity 。为了尽量减少模型的inference 时间,我们使用了更新后的 GEM 基准的子样本(3000 个均匀采样的测试集的样本)。作者指出,在比较测试集子样本和完整测试集之间的模型性能时,差异很小。对于解码和生成,我们使用与上述机器翻译相同的程序。

  4. baseline 模型:我们在适当的时候(如,它们支持 evaluation 数据集的语言的情况下)使用以下 baseline 模型:

    • mGPT:在 WikipediaCommon Crawl60 种语言上训练的 GPT-style 模型。

    • GPT-Neo, GPT-J-6B, GPTNeoX:在 Pile 上训练的一系列 GPT-style 模型。

    • T0T5 的一个变体,在 P3 的数据集上进行了 multitask prompted finetuning

    • OPT:一系列的 GPT-style 模型,在混合数据集上训练,其中训练集包括 RoBERTaPile

    • XGLM:一个在 CC100 数据集的变体上训练的 GPT-style 多语言模型。

    • M2M:一个大型多语言模型,它被训练从而用于在 100 种语言之间进行翻译。

    • AlexaTM:一个 encoder-decoder 模型,它在 WikipediamC4 数据集上训练,混合了 masked language modelingcausal language modelingobjective

    • mTk-InstructT5 的一个变体,在来自 Super-NaturalInstructions 的数据集上进行了 multitask prompted finetuning

    • Codex:在 GitHub 的代码上微调的一系列 GPT 模型。

    • GPT-fr:一个在法语文本上训练的 GPT-style 模型。

49.3.2 Zero-Shot 性能

  1. 在整个自然语言理解任务、和自然语言生成任务中,我们发现 pretrained 模型的 zero-shot 性能接近随机。下图显示了模型在一系列SuperGLUE 基准任务的一组 prompts 中的平均 zero-shot 表现。Table 6Table 7 显示了多个模型和数据集在 English-FrenchEnglish-Hindi 上的 zero-shot 机器翻译结果。我们没有报告 zero-shot 在文本摘要方面的表现,因为文本生成实验的运行成本很高,而且根据这里报告的结果、以及在zero-shot 文本摘要上的的初始实验,很明显文本摘要方面的表现会很差。在所有的情况下,在标准语言模型上训练的模型的 zero-shot 性能都接近于随机。

  2. SuperGLUE:在 SuperGLUE 上,虽然某些 prompts 显示出性能的提高,幅度高达 10 个点的准确率,但各 prompts 的平均性能总是在随机值附近徘徊,这表明单个 prompts 的成功主要是统计上的方差。T0 模型是个例外,它显示了强大的性能。然而,这个模型在多任务设置中进行了微调(类似于 BLOOMZ ),以提高在 zero-shot prompting setting 中的性能,因此与这里显示的其他模型没有直接可比性。

  3. 翻译:在 zero-shot setting 中,翻译的结果通常很差,如 Table 6 所示,该表给出了不同 prompts 和多次运行的平均分数。多次运行是在不同的 BLOOM 版本(不同规模)中进行的。不同的run 的得分不同(例如,"version" prompt的得分是 0.32 ~ 21.96 ),有点令人惊讶的是,最好的 prompts 往往是比较啰嗦的prompts"version""a_good_translation"prompts)。

    一个直觉是:啰嗦的 prompts 提供了更多的信息。

    观察到的两个主要问题是:over-generation 、没有产生正确的语言(一个好的翻译的明显前提条件)。这些问题在其他语言模型中也可以看到,从 Table 7 中显示的 DiaBla 数据集上的普遍不良结果就可以看出。尽管不是一个多语言模型,T0 有时可以进行英语翻译(12.5313.77BLEU 分),尽管它是一个基于英语的模型这一事实可能解释了为什么它表现得更好。对于 BLOOM 来说,通过使用以目标语言结尾的 prompts (而不是以要翻译的源文本结尾,其中 gpt3 风格的 prompts 是以源文本结尾),在 into-English 的方向上,错误语言的问题得到了部分缓解,这可能是因为用相同的语言生成 promptcontinuation更容易。

49.3.3 One-Shot 性能

  1. one-shot evaluation 中,模型被给定一个 in-context training example ,我们发现,生成任务(机器翻译和文本摘要)的性能普遍提高,但 SuperGLUE 的分类任务却没有。

  2. SuperGLUEFigure 7 显示了one-shot 的性能和 zero-shot 的结果。与 zero-shot 性能相比,在所有的 prompts 和模型中,对SuperGLUEone-shot 性能变化都有所降低。总的来说,one-shot setting 没有明显的改善:模型的平均准确率仍然几乎总是处于随机状态( T0 除外)。

    我们进行了一项额外的分析,比较了不同模型规模的 BLOOM 模型。作为 baseline ,我们还测量了类似规模的 OPT 模型( 350M 参数到 175B 参数)的平均 one-shot 准确率。Figure 8 显示了不同模型规模下每个 prompt 在每个任务上的准确率。OPT 模型系列和 BLOOM 模型系列都随着规模的扩大而略有改善,在所有任务中,模型族之间没有一致的差异。BLOOM-176BAx-bCBWiC 上领先于 OPT-175B

  3. 机器翻译:在 1-shot setting 中,我们使用 XGLM prompt 测试了 Flores-101dev-test 数据集中的几个语言方向。我们从同一数据集中随机选择 1-shot example ,这可能与过去的工作不同。我们将 high-resource language pairsTable 8(c) )、high-to-mid-resource language pairTable 8(d) )、low-resource language pairTable 8(a) )以及Romance 语系相关语言之间(Table 8(b) )的结果分开。

    语言被分为低资源、中资源、以及高资源,取决于它们在 ROOTS 中的表现。对于 high-resource pairmid-to-high-resource pair ,我们与有 615M 参数的 M2M-124 模型的监督结果进行比较, 《The Flores-101 evaluation benchmark for low-resource and multilingual machine translation》计算了该模型的分数。此外,我们还与 XGLM(7.5B)1-shot 结果(《Few-shot learning with multilingual language models》)和 32-shot AlexaTM 结果(《Few-shot learning using a large-scale multilingual seq2seq model》)进行比较。

    无论是高资源语言之间的翻译、还是从高资源语言到中等资源语言的翻译,结果都很好,这表明 BLOOM 具有良好的多语言能力,甚至可以跨文字(这里是拉丁文或扩展拉丁文、中文、阿拉伯文和梵文之间)。与有监督的 M2M 模型相比,在这种 1-shot setting 下,结果往往是相当的、有时甚至更好,而且在许多情况下,结果与 AlexaTM 的结果相当。

    许多低资源语言的翻译质量很好,与有监督的 M2M 模型相当,甚至略好。然而,斯瓦希里语(Swahili )和约鲁巴语(Yoruba )之间的结果非常差,这两种语言在 BLOOM 的训练数据中存在但代表性不足(每种语言 <50k tokens )。这与 Romance (因此也是相关语言)之间的翻译结果形成鲜明对比,后者的翻译结果全面良好,包括从 Galician: glg 的翻译(这种语言没有包括在训练数据中,但与其他罗曼语有许多相似之处,特别是与葡萄牙语(Portuguese: por ))。然而,这确实对 BLOOM 在训练中所包含的那些代表性不足的低资源语言上的质量提出了质疑。

  4. 文本摘要:下图显示了 OPT-175BBLOOM 模型的 one-shot 结果。每点代表 per-prompt score 。关键的启示是,BLOOM 在多语言文本摘要方面取得了比 OPT 更高的性能,而且性能随着模型的参数数的增加而增加。我们怀疑这是由于 BLOOM 的多语言训练的结果。

    正如在 ”实验设计“ 章节所讨论的,我们报告 ROUGE-2 的分数是为了与以前的工作进行比较,也是因为缺乏替代的 generation evaluation 。然而,我们从质量上观察到,在许多情况下,ROUGE-2 得分低估了系统所生成的摘要的质量。

    这里没有画出横坐标。读者猜测横坐标是模型大小。

49.3.4 多任务微调

  1. 在最近关于多任务微调的工作基础上(《Multitask prompted training enables zero-shot task generalization》《Finetuned language models are zero-shot learners》《What language model architecture and pretraining objective works best for zero-shot generalization?》),我们探索使用多语言多任务微调来提高 BLOOM 模型的 zero-shot 性能。

    我们使用 ”训练数据集“ 章节所述的 xP3 语料库对 BLOOM 模型进行了多语言多任务微调。我们发现,zero-shot的性能明显增加。在下图中,我们比较了 pretrained BLOOMpretrained XGLM 模型与多任务微调的 BLOOMZT0 、以及 mTk-Instructzero-shot 性能。BLOOMXGLM 的表现接近 random baseline ,对于NLI (XNLI)33%、对于共指解析(XWinograd)和句子补全(XCOPAXStoryCloze )为 50%

    在经历了多语言多任务微调之后(BLOOMZ),在所描述的保留任务上,zero-shot 性能有了明显的改善。尽管也经过了多任务微调,但由于 T0 是一个单语的英语模型,它在所展示的多语言数据集上的表现很差。然而,《Crosslingual generalization through multitask finetuning》提供的其他结果显示,在控制模型规模和架构时,在 xP3 上进行微调的模型在英语数据集上的表现也优于 T0 。这可能是由于 T0 的微调数据集(P3 )包含的数据集和 prompts 的多样性不如 xP3 。多任务微调性能已被证明与数据集和 prompts 的数量相关(《Scaling instruction-finetuned language models》)。

49.3.5 Code 生成

  1. BLOOM 的预训练语料库 ROOTS 包括大约 11% 的代码。在下表中,我们报告了 BLOOMHumanEval《Evaluating large language models trained on code》)的基准测试结果。我们发现 pretrained BLOOM 模型的性能与在 Pile 上训练的类似规模的 GPT 模型相似。Pile 包含英文数据和大约 13% 的代码(GitHub + StackExchange),这与ROOTS中 的代码数据来源和代码数据比例相似。

    仅仅对代码数据进行了微调的 Codex 模型明显强于其他模型。多任务微调的 BLOOMZ 模型并没有比 BLOOM 模型有明显的改善。我们假设这是由于微调数据集 xP3 不包含大量的 pure code completion 。相反,xP3 包含与代码相关的任务,如估计一个给定的 Python 代码片段的时间复杂性。《Crosslingual generalization through multitask finetuning》提供了额外的分析。

49.3.6 Embedding

  1. 在 ”训练“ 章节中,我们概述了 contrastive finetuning procedure 用于创建 SGPTBLOOM text embedding 模型。在下表中,我们报告了来自 Massive Text Embedding Benchmark: MTEB 的两个多语言数据集的基准测试结果。我们发现:

    • SGPT-BLOOM-7.1B-msmarco 在几个分类任务和语义文本相似性任务上提供了 SOTA 性能。然而,它有 7.1B参数,比多语言 MiniLMMPNet 等模型大一个数量级。

    • SGPT-BLOOM-1.7B-nli 的表现明显较差,可能是由于参数较少,其微调时间较短(NNI 是一个比MS-MARCO 小得多的数据集)。

    • 除了 BLOOM 模型之外,ST5-XL 是最大的模型,有 1.2B 参数。然而,作为一个纯英语的模型,它在非英语语言上的表现很差。

    下表中的语言是 BLOOM 预训练语料库的一部分。更多语言和数据集的性能可以在 MTEB 排行榜上查看。

49.3.7 Multilingual Probing

  1. probing 已经成为分析和解释 LLM 内部运作的重要评价范式,尽管它带有某些不足(《Probing classifiers: Promises, shortcomings, and advances》)。除了 training objective loss 或下游任务评估外,对 LLM embedding 的考察有助于阐明模型的泛化能力,这对考察缺乏标记数据集或 benchmark 的语言尤其有利。

  2. 方法:为了解释 BLOOM 的多语言泛化能力,我们利用 Universal Probing 框架对 104 种语言和 80 种形态句法特征进行系统性的 probing analysis《Universal and independent: Multilingual probing framework for exhaustive model interpretation and evaluation》)。该框架针对 Universal Dependencies:UD 中的每种语言提供了 SentEval-style《What you can cram into a single vector: Probing sentence embeddings for linguistic properties》)的 probing steup 和数据集。我们考虑了 BLOOM 的预训练语料库、以及 UD treebanks 中存在的 7 个语系的以下17 种语言:Arabic (Afro-Asiatic), Bambara (Mande), Basque (language isolate), Bengali, Catalan, English, French,Hindi, Marathi, Portuguese, Spanish, Urdu (Indo-European), Chinese (Sino-Tibetan), Indonesian(Austronesian), Tamil (Dravidian), Wolof, Yoruba (Niger-Congo)。我们的设置总共涵盖了 38 个形态句法特征,这些特征代表了特定语言的语言学信息。我们在下表中提供了一个数据集样本(标签为单数 Single /复数 Plural )。

    probing 程序的进行情况如下:

    • 首先,我们在 1.7B 参数的 BLOOM 变体(BLOOM 1B7 )和 BLOOM (有 176B 参数)的每一层计算输入句子的 <s>-pooled representation

    • 其次,我们训练一个二元逻辑回归分类器,以预测句子中是否存在形态句法特征。选择逻辑回归是因为它相对于非线性 probing 分类器有更高的 selectivity 。我们在这里使用原始的 UD training/validation/test splits

    • 第三,由于大多数 probing 任务的 target class 不平衡,probing 性能是通过 F1 加权得分来评估的。结果是不同随机种子的三次运行的平均值。

  3. baseline:我们将 probing 性能与随机猜测、基于以下 TF-IDF 特征训练的逻辑回归分类器进行比较: word unigrams, character N-grams, BPE42 token N-grams, SentencePiece token N-grams。我们使用 N-gram 范围为 [1,2,3,4] ,并将 TF-IDF 词表限制在 top-250k 个特征。

  4. 相关性:我们进行统计测试,从而分析 probing 性能与语言学、数据集和模型配置准则之间的相关性:

    • language script :结果按 language script ,拉丁文和其他文字(Devanagari, Tamil, and Arabic),分为两组。在这里,我们使用 non-parametric Mann-Whitney U test

    • 语系:结果按语系分为 7 组。我们应用方差分析法(ANOVA )来分析各组之间的差异。

    • probing 和预训练数据集大小:我们运行 Pearson correlation coefficient test 来计算 probing 性能和这些 data configuration criteria 之间的相关性。

    • 模型大小的影响:按 BLOOM 版本将结果分为两组。在这里,我们使用 Mann-Whitney U test 检验,看看参数数量和 probing 结果之间是否存在相关性。

  5. Probing 结果:下表列出了 probing 实验的结果,是每种语言内 probing task 和实验运行的平均数。总的情况是,BLOOM-1B7 的表现与 BLOOM 相当或更好,而两种 LLM 的表现都超过了基于计数的 baseline

    具体而言,LLMArabic, Basque, and Indo-European languages (e.g., Catalan, French, Hindi, Portuguese, Spanish, and Urdu) 上的表现更为强劲,而 Bengali, Wolof, and Yoruba 的得分最低。我们把这种行为归因于为迁移能力: BLOOM 对于构成大量数据集的密切相关的语言,能更好地推断其语言属性。例如,在任何 Romance 上的表现都比英语好,而印度语的结果与高资源语言的结果接近。

    下图显示了至少在5 种语言中的形态句法特征的 language-wise probing 性能结果。尽管规模不同,但两种 LLMprobing 性能是相似的。我们发现,在不考虑语言的情况下,LLM 可以很好地推断出情绪(Mood)和人称(Person)。数字、NumType (数字类型)和声音在大多数语言中的推断效果一般。这些模型在其他类别中普遍表现出较差的质量,表明它们没有编码这种形态学信息。对这种性能差异的可能解释可能是这些类别的可能值的多样性。例如,情绪和人称在所提交的语言中具有相似的值,而 Case 值的集合则高度依赖于语言。

  6. 相关性结果:相关性分析结果支持关于probing 性能的结论,并揭示了贡献因子(如下表所示)。

    • 两种模型在具有不同 language script 的语言上显示出类似的结果。

    • BLOOM-1B7 的结果与语系、probing dataset size 、和预训练数据集大小高度相关。

    • 根据Mann-Whithey U test 的结果,BLOOM-1B7 的结果明显优于 BLOOM(P < 0.01) 。然而,BLOOM 在不同的语言上表现出更稳定的性能,尽管它在预训练期间看到了大量的数据。这可能表明有更多参数的模型具有更好的泛化能力。

49.3.8 Bias

  1. 作为对 BLOOM 学到的 bias 的初步研究,我们提出了对多语言 CrowS-Pairs 数据集的评估,该数据集结合了 《CrowS-pairs:A challenge dataset for measuring social biases in masked language models》开发的 CrowS-Pairs 数据集的修订版和《French CrowS-pairs: Extending a challenge dataset for measuring social bias in masked language models to a language other than English》引入的法语版 CrowS-Pairs

    这项评估的一个挑战是如何将原本用于 masked language model 的数据集适应于 autoregressive language model (如 BLOOM )。CrowS-Pairs 依靠 minimal pairs 来比较一个刻板印象的语句、以及一个非刻板印象的语句(例如,"Women can't drive." 是一个性别刻板印象,而 "Men can't drive." 则不是)。这两种陈述的不同之处在于刻板印象所针对的 social category ,而且该 social category 在刻板印象陈述(stereotyped statement )中存在而在非刻板印象陈述(non-stereotyped statement)中不存在。评价的目的是评估模型对刻板印象陈述的系统偏好。最初的 metric score 比较了一对句子的 pseudo-loglikelihood ,以确定哪个句子从 masked language model 中获得了更高的分数。prompts 被设计成要求模型根据所描述情况的可能性和现实性来选择其中一个语句。

    下图显示,BLOOMoverall prompt accuracy 接近 0.50 ,这表明总体上没有偏差。我们注意到,英语和法语的得分非常接近,这表明模型在这两种语言上的整体行为相似。我们还展示了英语和法语的mono-lingual autoregressive model 的结果,包括 GPT-NeoGPT-FR

    下表列出了CrowS-Pairs 数据集中每个 bias 类型的结果。结果在各个类别上是相当均匀的,这与以前关于 masked language model 的研究形成了鲜明的对比(这些研究表明模型在特定的类别中容易出现 bias )。尽管如此,两种语言的准确率总体上与 50 有明显的差异(T-test, p < .05 ),以及一些偏见的类别,如表中的星号所示。

  2. 局限性:《Stereotyping Norwegian salmon: An inventory of pitfalls in fairness benchmark datasets》讨论了原始CrowS-Pairs 语料库的有效性问题。这里使用的 CrowS-Pairs 版本与原始版本不同,它解决了论文指出的一些问题,并根据从法语使用者那里收集的可变印象构建了 200 个额外的句子对。在最近对英语和法语的 masked language modelbias 评估中,在修订后的数据集上获得的结果与在原始数据集上获得的结果没有明显的区别(《French CrowS-pairs:Extending a challenge dataset for measuring social bias in masked language models to a language other than English》)。然而,它的原始 validation 在这里并不自然适用,与其他 CrowS-Pairs 结果的比较也更加困难。为了更有力地评估偏差,用 CrowS-Pairs 得到的结果应该与其他的 measures of bias进行比较,同时对模型中的所有语言进行评估。然而,正如 《You reap what you sow: On the challenges of bias evaluation under multilingual settings》 所指出的,可用于多语言bias 评估的材料(语料、measures )非常少。

    尽管我们的检查表明模型中存在着有限的偏见,但它们不能涵盖可能的使用场景的广度。模型可能产生较大影响的一种情况是语言多样性(linguistic diversity )和语言变体(language variation )。由于 BLOOM 的训练资源是精心策划的,它们也可能比其他模型更大程度地捕捉到一些语言变体。这也影响了 trained model 公平地代表不同的语言变体的能力。这种差异可能有助于某些语言变体比其他语言变体的传播和合法化。我们对模型中的偏差的评估进一步限制在多语言 CrowS-Pairs 所涵盖的场景、语言、以及语言变体上。因此,我们期望在我们使用 CrowS-Pair 的结果和更广泛的模型使用之间有一个区别(关于这种差异的更详细的探索,见 《Ai and the everything in the whole wide world benchmark》)。

    语言变体:比如中国国内的各种方言。