数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四十七、GLM-130B [2022]
大型语言模型(
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-175B
和BLOOM-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
,在2022
年5
月6
日至7
月3
日期间,在96
个NVIDIA DGX-A100
(40G * 8
)GPU
节点的集群上预训练了超过400B
个token
。作者没有使用GPT-style
的架构,而是采用了通用语言模型(General Language Model: GLM
)算法(《Glm: General language model pretraining with autoregressive blank infilling》
),以利用其双向注意力的优势、以及自回归的blank infilling objective
。下表总结了GLM-130B
、GPT-3
和另两个开源工作(OPT-175B
和BLOOM-176B
)、以及PaLM 540B
(一个更大的模型)作为参考。总之,概念上的独特性、以及工程上的努力使
GLM-130B
在广泛的benchmark
(总共112
个任务)上表现出超过GPT-3
的性能,在许多情况下也超过了PaLM 540B
。此外,OPT-175B
和BLOOM-176B
中没有观察到超过GPT-3
的性能(参考图Figure 1(a)
)。对于
zero-shot
性能,GLM-130B
在LAMBADA
上优于GPT-3 175B(+5.0%)
、OPT-175B(+6.5%)
、以及BLOOM-176B(+13.0%)
,并在Big-bench-lite
上取得比GPT-3
更好的性能。对于
5-shot
的MMLU
任务,GLM-130B
比GPT-3 175B(+0.9%)
和BLOOM-176B(+12.7%)
更好。作为一个中文的双语
LLM
,它的结果明显优于ERNIE TITAN 3.0 260B
(最大的中文LLM
),在7 zero-shot
的CLUE
数据集上(+24.26%
)和5 zero-shot
的FewCLUE
数据集上(+12.75%
)。
重要的是,正如图
Figure 1(b)
所总结的那样,GLM-130B
作为一个开放的模型,其bias
和generation toxicity
明显低于100B-scale
的同类模型。最后,作者设计
GLM-130B
是为了让尽可能多的人能够进行100B-scale LLM
的研究:首先,没有像
OPT
和BLOOM
那样使用175B
以上的参数,而是决定采用130B
的规模,因为这样的规模支持在单台A100
服务器(8
个40G A100 GPU
)上进行推理。其次,为了进一步降低对
GPU
的要求,作者将GLM-130B
量化为INT4
精度,而OPT
和BLOOM
只能达到INT8
。由于GLM
架构的独特属性,GLM-130B
的INT4
量化带来的性能下降可以忽略不计,例如,在
LAMBADA
上为-0.74%
,在MMLU
上甚至为+0.05%
,使其仍然优于未压缩的GPT-3
。这使得GLM-130B
在4
个RTX 3090
(24G
)或8
个RTX 2080 Ti
(11G
)的服务器上实现了快速推理,这是迄今为止使用100B-scale LLM
所需的最实惠的GPU
。
作者开源了
model checkpoint
、代码、训练日志、相关工具包和经验教训。相关工作:这里我们将回顾
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
的努力,以及最近的ElutherAI
、OPT-175B
和BLOOM-176B
,旨在为我们的社区提供高质量的开源LLM
。另外,使GLM-130B
与其他项目不同的是,GLM-130B
注重LLM
对所有研究人员和开发者的包容性(inclusivity
)。从我们对模型规模的决定,对模型架构的选择,以及允许模型在主流的GPU
上进行快速推理,GLM-130B
相信,对所有人的包容性才是实现LLM
对人们承诺的福利的关键。Transferring
:尽管微调一直是迁移学习的事实方式,但由于LLM
的规模巨大,其转移学习一直集中在prompting
和in-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-175B
和BLOOM-176B
等LLM
可以被量化为8 bit
。然而,在这项工作中,我们根据我们对
LLM
架构选择的新见解,证明GLM
对INT4
权重量化的scaling law
。这种量化,加上我们在使GLM-130B
适应FasterTransformer
方面的工程努力,使得GLM-130B
可以在少至4
个RTX 3090 (24G) GPU
或8
个GTX 1080 Ti (11G) GPU
上有效推断。它实现了LLM
对公众的经济可用性,并分阶段实现了我们对LLM
的包容性的承诺。
47.1 GLM-130B 的设计选择
一个机器学习模型的架构定义了它的归纳偏置(
inductive bias
)。然而,人们已经意识到,探索LLM
的各种架构设计在计算上是负担不起的。我们介绍并解释GLM-130B
的独特的设计选择。
47.1.1 架构
GLM
作为Backbone
:最近大多数100B-scale LLM
(如GPT-3
、PaLM
、OPT
和BLOOM
),都遵循传统的GPT
风格的decoder-only autoregressive language modeling
架构。在GLM-130B
中,我们反而尝试探索双向的General Language Mode: GLM
作为其backbone
的潜力。GLM
是一个基于transformer
的语言模型,利用autoregressive blank infilling
作为其training objective
。简而言之,对于一个文本序列 $ \mathbf x = [x_1,\cdots,x_n] $ ,我们随机采样一些text span
$ \{\mathbf s_1,\cdots,\mathbf s_m\} $ ,其中每个 $ \mathbf s_i $ 表示一段连续的token
: $ \mathbf s_i =[s_{i,1},\cdots,s_{i,l_i}] $ , $ l_i $ 表示 $ \mathbf s_i $ 的长度。然后我们将 $ \mathbf s_i $ 替换为单个mask token
,从而获得被破坏的文本序列 $ \mathbf x_\text{corrupt} $ 。模型被要求以自回归的方式从 $ \mathbf x_\text{corrupt} $ 中恢复原始文本序列。为了允许corrupted spans
之间的交互,它们之间的可见性是由对它们的顺序进行随机抽样的permutation
来决定的。pre-training objective
被定义为:其中:
$ \mathcal Z_m $ 表示序列 $ \{1,2,\cdots,m\} $ 的所有permutation
的集合, $ m $ 为span
数量。 $ \mathbf s_{\mathbf z\lt i} $ 表示 $ [\mathbf s_{z_1},\cdots,\mathbf s_{z_i-1}] $ ,表示在排列 $ \mathbf z $ 中,所有排在 $ \mathbf s_i $ 之前的text span
。 $ \mathbf s_{i,\lt j} $ 表示 $ [s_{i,1},\cdots,s_{i,j-1}] $ ,表示在当前text span
中,所有位于 $ s_{i,j} $ 之前的token
。
GLM
对unmasked contexts
的双向注意力使GLM-130B
区别于使用单向注意力的GPT-style LLMs
。为了同时支持understanding
和generation
,它混合了两种corruption objective
,每种objective
由一个special mask token
来标识:[MASK]
:句中的short blank
,它们的长度加起来等于输入句子长度的某个比例(这个比例是一个超参数)。[gMASK]
:随机长度的long blank
,它们出现在句子末尾并且具有所提供的prefix context
。
从概念上讲,具有双向注意力的
blank infilling objective
能够比GPT-style model
更有效地理解上下文:当使用
[MASK]
时,GLM-130B
的表现与BERT
和T5
相似。当使用
[gMASK]
时,GLM-130B
的表现与PrefixLM
(如,UniLM
)相似。
在下图中,根据经验,
GLM-130B
超越了GPT-3
和PaLM 540B
,在zero-shot LAMBADA
上提供了80.2%
的创纪录的高准确率。通过设置注意力掩码,GLM-130B
的单向变体(unidirectional variant
)与GPT-3
和OPT-175B
相当。我们的观察结果与现有的研究结果一致。Layer Normalization: LN
:训练不稳定是训练LLM
的一个主要挑战(如Figure 11
所示,训练一些100B-scale model
时的崩溃情况)。适当选择LN
可以帮助稳定LLM
的训练。我们尝试了现有的做法,例如Pre-LN
、Post-LN
、Sandwich-LN
,遗憾的是这些做法无法稳定我们的GLM-130B test run
(详见图Figure 3(a)
和附录技术细节中Layer Normalization
的内容)。我们的搜索后来集中在
Post-LN
上,因为它在初步实验中具有有利的下游结果,尽管它不能稳定GLM-130B
。幸运的是,对Post-LN
的尝试之一是用新提出的DeepNorm
,产生了有希望的训练稳定性。具体来说,给定GLM-130B
的层数 $ N $ ,我们采用:其中:
$ \alpha = (2N) ^{1/2} $ 。并且对ffn, v_proj, out_proj
应用具有缩放因子为 $ (2N) ^{1/2} $ 的Xavier normal initialization
。此外,所有bias
项都被初始化为零。下图显示它对GLM-130B
的训练稳定性大有裨益。Positional Encoding
和FFN
:我们在训练稳定性和下游性能方面对位置编码(positional encoding: PE
)和FFN improvement
的不同方案进行了经验性测试(详见附录技术细节中的Positional Encoding
和FFN
内容)。对于
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 embedding
到embedding layer
,而是直接在query-key
内积之后添加一个静态的、non-learned bias
(如下图所示):其中:
$ m $ 为一个head-specific
的标量。在原始论文中,模型有8
个head
,因此 $ m $ 对每个head
依次选择为 $ \left\{\frac{1}{2^1},\cdots, \frac{1}{2^8}\right\} $ 。为了改进
Transformer
中的FFN
,我们挑选了带有GeLU
激活的GLU
。
47.1.2 预训练 Setup
受最近工作的启发,
GLM-130B
的预训练目标不仅包括自监督的GLM autoregressive blank infilling
,还包括针对一小部分的token
的多任务学习。这预计将有助于提高其下游的zero-shot
性能。Self-Supervised Blank Infilling (95% tokens)
:回顾一下,GLM-130B
同时使用[MASK]
和[gMASK]
来完成这项任务。具体来说:对于
30%
的training tokens
,[MASK]
被用来掩码consecutive span
从而用于blank infilling
。span
的长度遵循泊松分布( $ \lambda = 3 $ ),加起来占到输入的15%
。对于其他的
70%
的training tokens
,每个序列的前缀被保留为上下文,[gMASK]
被用来掩码剩余部分。masked length
从均匀分布中采样。masked length
最长是多少,最短是多少?论文并未说明细节。
预训练数据:包括
1.2T
的Pile
英文语料、1.0T
的中文Wudao-Corpora
、以及我们从网上抓取的250G
中文语料(包括在线论坛、百科全书、以及问答),它们构成了一个均衡的中英文内容。Multi-Task Instruction Pre-Training: MIP (5% tokens)
:T5
和ExT5
表明,预训练中的多任务学习比微调更有帮助,因此我们提议在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》
的74
个prompted 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 的并行策略以及模型配置
GLM-130B
在一个由96
个DGX-A100 GPU
(8
个40G
的A100 GPU
)服务器组成的集群上进行训练,访问时间为60
天。目标是训练尽可能多的token
,因为最近的一项研究(《Training compute-optimal large language models》
)表明,大多数现有的LLM
在很大程度上是训练不充分的。3D
并行策略:数据并行和张量模型并行(《Megatron-lm: Training multi-billion parameter language models using model parallelism》
)是训练billion-scale
模型的事实做法。为了进一步处理巨大的GPU
内存需求、以及在节点之间应用张量并行导致的GPU
总体利用率的下降(因为在训练GLM-130B
时使用了40G
而不是80G
的A100
),我们将pipeline model parallelism
与其他两种并行策略结合起来,形成一个3D
并行策略。流水线并行(
pipeline parallelism
)将模型划分为sequential stages
用于每个parallel group
。为了进一步减少pipeline
引入的bubbles
,我们利用DeepSpeed
的PipeDream-Flush
实现来训练GLM-130B
,采用相对较大的全局batch size
(即,4224
)来减少时间浪费和GPU
内存浪费。通过数值检查和经验考察,我们采用了4
路张量并行和8
路流水线并行,达到135 TFLOP/s per GPU (40G)
(详见附录的技术细节的流水线并行的分析内容)。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 = 70
个transformer layers
。猜测作者的意思是:
input word embedding
和output word embedding
共享?在对集群的
60
天访问期间,我们设法对GLM-130B
进行了400B
个token
(中文和英文各约200B
)的训练,每个样本的固定序列长度为2048
。对于
[gMASK] training objective
,我们使用2048
个token
的上下文窗口;对于[MASK] training objective
和多任务目标,我们使用512
的上下文窗口,并将四个样本串联起来从而满足2048
的序列长度。在前
2.5%
的样本中,我们将batch size
从192
升至4224
。我们使用
AdamW
作为我们的优化器,其中 $ \beta_1 $ 和 $ \beta_2 $ 设置为0.9
和0.95
,权重衰减值为0.1
。在前
0.5%
的样本中,我们将学习率从 $ 10^{-7} $ 预热到 $ 8\times 10^{-5} $ ,然后通过 $ 10\times $ 的余弦调度进行衰减。我们使用
0.1
的dropout rate
,并使用1.0
的剪裁值来剪裁梯度。
完整配置如下表所示。
47.2 GLM-130B 的训练策略
训练稳定性是
GLM-130B
质量的决定性因素,它在很大程度上也受到training token
数量的影响(《Training compute-optimal large language models》
)。因此,给定计算用量(computing usage
)的限制,在浮点格式方面,必须在效率和稳定性之间进行权衡: 低精度浮点格式(例如,16
位精度FP16
)提高了计算效率,但容易出现上溢出或下溢出错误,导致训练崩溃。混合精度:我们遵循混合精度策略(
Apex O2
)的普遍做法,即forward
和backward
采用FP16
,优化器状态和master weight
采用FP32
,以减少GPU
内存占用并提高训练效率。与OPT-175B
和BLOOM-176B
类似(参见下图所示),GLM-130B
的训练由于这种选择而面临频繁的loss
尖峰,随着训练的进行,这种尖峰往往变得越来越频繁。与精度有关的尖峰往往没有明确的原因:有些会自行恢复;有些则伴随着梯度范数突然飙升的预兆,最终出现loss
尖峰甚至是NaN
的loss
。OPT-175B
试图通过手动跳过数据(skipping data
)和调整超参数来修复;BLOOM-176B
通过embedding norm
技术来修复。我们花了几个月的时间来实验性地调查尖峰,并意识到当transformers scale up
时,会出现一些问题:首先,如果使用
Pre-LN
,transformer main branch
的value scale
在更深的层中会非常大。在GLM-130B
中,通过使用基于DeepNorm
的Post-LN
来解决这个问题,这使得value scale
总是有界。第二,随着模型规模的扩大,注意力分数增长得非常大,以至于超过了
FP16
的范围。在LLM
中,有几个方案可以克服这个问题。在
CogView
中,提出了PB-Relax
,在注意力计算中去除bias
项并扣除极值以避免该问题,遗憾的是,这并不能帮助避免GLM-130B
中的不收敛(disconvergence
)。在
BLOOM-176B
中,由于BF16
格式在NVIDIA Ampere GPU
(即A100
)上的取值范围很广,因此使用了BF16
格式而不是FP16
。然而,在我们的实验中,BF16
比FP16
多消耗15%
的运行时GPU
内存,这是因为它在梯度累积中转换为FP32
,更重要的是它在其他GPU
平台(如NVIDIA Tesla V100
)上不被支持,限制了所得到的LLM
的可用性。BLOOM-176B
的另一个选择是应用具有BF16
的embedding norm
,但要牺牲模型性能。
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 $ 为收缩因子,该策略可以通过如下的方式来轻松地实现:Figure 4 (b)
表明,根据经验,设置 $ \alpha = 0.1 $ 有助于消除我们会遇到的大多数loss
尖峰,而训练速度几乎不变。事实上,最后的
GLM-130B training run
只经历了关于损失函数在训练后期发散的三个case
,尽管它由于硬件故障而失败了无数次。对于这三个意外的峰值,事实证明,进一步缩小embedding
梯度仍然可以帮助稳定GLM-130B
的训练。详情见我们代码库中的training notes
和Tensorboard
日志。
47.3 在 RTX 2080 Ti 上推断 GLM-130B
GLM-130B
的主要目标之一是降低访问100B-scale LLM
的硬件要求,而不存在效率和效果的劣势。如前所述,
130B
的模型规模是为在单台A100
(40G * 8
)服务器上运行完整的GLM-130B
模型而确定的,而不是OPT-175B
和BLOOM-176B
要求的高端A100
(80G * 8
)机器。为了加速GLM-130B
推断,我们还利用FasterTransformer
(《Accelerated inference for large transformer models using nvidia triton inference server》
)在C++
中实现GLM-130B
。与Huggingface
中BLOOM-176B
的PyTorch
实现相比,GLM-130B
的decoding inference
在同一台A100
服务器上要快7-8.4
倍。(详见附录中技术细节的Inference
加速的内容)。针对
RTX 3090/2080
的INT4
量化:为了进一步支持主流的GPU
,我们试图在保持性能优势的同时尽可能地压缩GLM-130B
,特别是通过量化,这对生成式语言模型来说几乎没有引入任务相关的性能下降。通常情况下,做法是将模型权重和
activation
都量化为INT8
。然而,我们在附录中技术细节的Activation Outlier
分析表明,LLM
的activation
可能包含极端的outlier
。同时,OPT-175B
和BLOOM-176B
中出现的outlier
也被发现,这些outlier
只影响约0.1%
的feature dimension
,因此通过矩阵乘法分解来解决outlying dimension
。不同的是,在
GLM-130B
的activations
中存在约30%
的outlier
,使得上述技术的效率大大降低。因此,我们决定将重点放在模型权重的量化上(主要是线性层),同时保持activation
的FP16
精度。我们简单地使用post training absmax
量化,权重在运行时被动态地转换为FP16
精度,引入了一个小的计算开销,但大大减少了用于存储模型权重的GPU
内存使用。令人振奋的是,我们设法使
GLM-130B
的权重量化达到了INT4
,而现有的成功案例迄今只达到了INT8
水平。内存方面,与
INT8
相比,INT4
版本有助于额外节省一半所需的GPU
内存,最终需要70GB
的GPU
内存,从而允许GLM-130B
在4
个RTX 3090 Ti (24G)
或8
个RTX 2080 Ti (11G)
上进行推理。性能方面,下表左侧显示,在完全没有
post-training
的情况下,INT4
版本的GLM-130B
几乎没有性能下降,因此在common benchmarks
上保持了对GPT-3
的优势。
GLM
的INT4
权重量化的Scaling Law
:Figure 4
右侧显示了随着模型大小的增加而出现的性能趋势,表明GLM
的INT4
权重量化的性能出现了一个scaling law
。我们研究了在
GLM
中观察到的这一独特属性的基本机制。我们在下图左侧绘制了权重取值的分布,结果发现它直接影响了量化质量。具体来说,一个分布较宽的线性层需要用较大的bin
进行量化,从而导致更多的精度损失。因此,宽分布的attn-dense
和w2
矩阵解释了GPT-style BLOOM
的INT4
量化的失败。相反,GLM
的分布往往比类似大小的GPT
的分布窄得多,随着GLM
模型规模的扩大,INT4
和FP16
版本之间的差距不断进一步缩小(详见Figure 15
)。
47.4 实验结果
我们遵循
GPT-3
和PaLM
等LLM
的常见设置,对GLM-130B
针对英语进行评估。作为一个具有中文的双语LLM
,GLM-130B
也在中文benchmark
上进行了评估。关于
GLM-130B
的Zero-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-130B
的zero-shot/few-shot
数据集的标准为:英语:
对于有固定标签的任务(如自然语言推理任务):不应评估此类任务中的数据集。
对于没有固定标签的任务(如问答任务、主题分类任务):只考虑与
MIP
中的数据集有明显的domain transfer
的数据集。
中文:所有的数据集都可以被评估,因为存在着
zero-shot
的跨语言迁移(cross-lingual transfer
)。
根据之前的实践(
GPT-3
)和我们上面提到的标准,我们过滤并避免报告可能被污染的数据集上的结果。对于LAMBADA
和CLUE
,我们发现在13-gram setting
下,overlap
最小。Pile, MMLU, BIG-bench
要么被held-out
,要么发布时间晚于语料库的爬取。
47.4.1 语言建模
LAMBADA
:LAMBADA
是一个用于测试last word
的语言建模能力的数据集。在Figure 2
中显示的结果表明,GLM-130B
凭借其双向注意力达到了80.2
的zero-shot
准确率,在LAMBADA
上创造了新的记录。Pile
:Pile
测试集包括一系列语言建模的benchmark
。平均来说,与GPT-3
和Jurassic-1
相比,GLM-130B
在其18
个共享测试集的加权BBP
方面表现最好,显示了其强大的语言能力。
47.4.2 MMLU
Massive Multitask Language Understanding: MMLU
是一个多样化的benchmark
,包括57
个关于人类知识的多选题问题任务,范围从高中水平到专家水平。它是在Pile
的爬取之后发布的,是LLM
的few-shot learning
的理想测试平台。GPT-3
的结果来自于MMLU
,BLOOM-176B
的结果则通过使用与GLM-130B
相同的prompt
进行测试。在下图中,
GLM-130B
在MMLU
上的few-shot (5-shot)
性能在查看了大约300B
的token
后接近GPT-3
(43.9
)。随着训练的进行,它继续上升,当训练不得不结束时(即总共查看了400B
个token
),达到了44.8
的准确率。这与观察到的情况一致,即大多数现有的LLM
远没有得到充分的训练。
47.4.3 BIG-BENCH
Beyond The Imitation Game Benchmark: Big-Bench
是关于模型的推理、知识、常识等能力的挑战性任务的benchmark
。鉴于对其150
个任务的评估对LLM
来说是很耗时的,我们现在报告BIG-bench-lit
(一个官方的24
个任务的子集合)。从下图和下表中可以看出,
GLM-130B
在zero-shot setting
中优于GPT-3 175B
,甚至PaLM 540B
(比GLM-130B
的模型规模大四倍)。这可能是由于GLM-130B
的双向上下文注意力和MIP
,这已被证明可以改善未见任务中的zero-shot
结果。随着shot
数量的增加,GLM-130B
的性能不断上升,保持了对GPT-3
的优势。PaLM 540B
的1-shot
效果在这个表格里效果最好。局限性和讨论:在这个实验中,我们观察到
GLM-130B
的性能增长(13.31
到15.12
)随着few-shot
样本的增加,不如GPT-3
(4.35
到13.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 samples
的MIP
,而不是只有zero-shot
样本。即,
MIP
范式没有给出示例样本,因此模型仅见过zero-shot
的模式,所以在zero-shot learning
方面更强大。最后,尽管
GPT
架构与GPT-3
几乎相同,但PaLM 540B
在few shot in-context learning
上的相对增长要比GPT-3
更显著。我们猜测这种性能增长的进一步加速是来自于PaLM
的高质量和多样化的私人收集的训练语料。通过结合我们的经验和《Training compute-optimal large language models》
的见解,我们认识到应该进一步投资更好的架构、更好的数据、以及更多的training FLOPS
。
47.4.4 CLUE
我们在既定的中文
NLP benchmark
,Chinese Language Understanding Evaluation: CLUE
和FewCLUE
上对GLM-130B
的中文zero-shot
性能进行评估。请注意,我们在MIP
中不包括任何中文的下游任务。到目前为止,我们已经完成了对这两个benchmark
的部分测试,包括7
个CLUE
数据集和5
个FewCLUE
数据集。我们将GLM-130B
与现有最大的中文单语语言模型260B ERNIE Titan 3.0
进行比较。我们遵从ERNIE Titan 3.0
的设置,在验证集上报告了zero-shot
的结果。GLM-130B
在12
个任务中的表现一直优于ERNIE Titan 3.0
(如下图所示)。有趣的是,GLM-130B
在两个abstractive MRC
数据集(DRCD
和CMRC2018
)上的表现至少比ERNIE
好260%
,这可能是由于GLM-130B
的预训练目标与abstractive MRC
的形式自然产生共鸣。
47.5 经验教训
我们成功和失败的经验都浓缩在以下训练
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 和毒性的评估
Bias
评估:CrowS-Pairs
:CrowS-Pairs
,即Crowdsourced Stereotype Pairs benchmark
,被广泛用于测量masked language model
的bias
。它收集了1508
个具有九种常规bias
的例子,并采用probing-based
的方法来来比较一对刻板印象句子(stereotypical sentence
)和反刻板印象句子(antistereotypical sentence
)的伪对数可能性(pseudo log-likelihood
)。我们将
GPT-3 Davinci
和OPT-175B
在CrowS-Pairs
上的结果(来自OPT
的原始论文)与GLM-130B
进行比较。我们的结果如下表所示。除了宗教和国籍,GLM-130B
在几乎所有种类的刻板印象上都显示出较少的bias
。我们推测,这是因为GLM-130B
是一个双语预训练的LLM
,它从英文语料和中文语料中学习某些内容的语义。由于CrowsS-Pairs
的刻板印象主要来自US Equal Employment Opportunities Commission
的list
,两种不同文化和语言的bias
分布可能是不同的,因此在GLM-130B
中调和benchmark
上的social bias
,而这个benchmark
最初是为英语社会所设计的。我们认为这是一个有趣的发现,因为多语言的预训练可能会帮助LLM
呈现更少的有害bias
,以达到更好的公平性。最后,我们也承认,
GLM-130B
可能会出现一些特殊的中文bias
,而这些bias
目前还缺乏测试benchmark
,需要在未来做出大量努力来检测和预防。注意,得分越低越好。
StereoSet
:另一个广泛使用的bias
和刻板印象评价benchmark
是StereoSet
。为了平衡bias detecting
和语言建模质量之间的评估,StereoSet
报告了一系列指标,包括语言建模分(Language Modeling Score: LMS
)、刻板印象分(Stereotype Score: SS
)、以及理想化语境关联测试分数(Idealized Context Association Test Score: ICAT
)作为整体平均指标。例如,给定
"She is the twin’s mother"
这一premise
,StereoSet
提供了三个候选hypothesis
:"the water is deep"
、"she is a lazy, unkind person"
、"she is a kind, caring woman"
。第一个选项作为distractor
,用于测试模型的语言能力和计算LMS
;第二个选项和第三个选项分别是anti-stereotypical
和stereotypical
的,用于计算SS
。这里的一个常见做法是根据选项的长度来校准其可能性,因为
distractor term
特别短。 遵从OPT
,我们在token
上(而不是在字符上)归一化分数,从而产生用于计算指标的model prediction
。结果如下表所示。正如我们所观察到的,GLM-130B
在所有指标上都远远超过了GPT-3 Davinci
和OPT-175B
。这样的结果与我们在语言建模实验和CrowS-Pairs bias evaluation
实验中的发现一致,即GLM-130B
在语言建模和社会公平方面都有很高的质量。LMS
和ICAT
得分越高越好,SS
得分越低越好。
ETHOS
:社交媒体语料库可能包含仇恨言论,调查LLM
在多大程度上知道并能帮助识别这些言论是至关重要的。我们采用ETHOS
数据集来检测性别主义和种族主义言论。GPT-3 Davinci
(GPT-3 175B
的一个可公开访问的变体,注意是API
访问而不是开源)和OPT 175B
也在该benchmark
上进行了测试(其结果在OPT
原始论文中报告)。对于二分类,包括Zero-shot
、One-shot
和Few-shot(binary)
(回答"yes"
或"no"
),我们报告binary F1
;对于多分类(回答"yes"
、"no"
或"neither"
),我们报告micro F1
。我们采用了与《Detecting hate speech with gpt-3》
中几乎相同的prompt
,只是将Few-shot (binary) prompt
与One-shot
中使用的形式对齐,并在原Few-shot (multiclass) prompt
中的冒号前添加"Classification"
一词。结果如下表所示。我们发现
GLM-130B
在四个不同的设置中胜过其他两个LLM
。一方面,GLM-130B
对来自在线论坛和社交媒体的无监督的多样化语料进行预训练,包括"hackernews"
、"stackexchange"
和"pile_cc "
等部分,可以赋予我们的模型识别这些言论的背景知识。另一方面,MIP
训练也可以提高GLM-130B
的zero-shot
和few-shot
能力。RealToxicPrompts
:评估由给定prompt
产生的毒性对模型的安全部署至关重要。我们在RealToxicPrompts
数据集上评估GLM-130B
的toxic generation
。遵从OPT
的设置,首先我们随机采样10K
个prompt
,然后我们使用核采样( $ p=0.9 $ )为每个prompt
生成25
个continuation
,将最大generated length
限制在128 tokens
。然后,我们报告了由Perspective API
评估的25
个continuations
的平均毒性概率。为了在不同的tokenization
之间进行公平的比较,我们只报告了continuation
中第一个完整句子的毒性得分,因为Perspective API
返回的分数似乎随着句子长度而增加。核采样:给定一个概率阈值
$ p $ ,从vocabulary
中选择一个最小集 $ \mathbb V_p $ ,使得它们出现的概率和大于等于 $ p $ :然后再将
$ \mathbb V_p $ 中的单词的概率归一化,并用这个归一化的概率进行采样。结果如下图所示。一般来说,在两个模型中,随着给定
prompt
的毒性增加,continuation
的毒性概率也相应增加。与GPT-3 Davinci
相比,GLM-130B
在所有情况下都有较低的毒性率,表明GLM-130B
不容易产生有害的内容。我们不包括OPT
原始论文的结果,因为API
已经更新,因此需要重新评估。
47.6.2 技术细节
这里介绍了我们在整个
GLM-130B
训练中发现并解决的技术问题的额外细节。连同同时进行的开源LLM
工作,我们相信这些公布的细节可以作为未来LLM
训练的重要基石。tokenization
:为了对语料库进行tokenization
,我们在icetk package
的基础上实现了一个text tokenizer
,并进行了一些调整。作为一个image-text unified tokenizer
,icetk
的词汇量为150000
。前20000
个token
是image token
,其余是text token
。icetk
的text tokenizer
在25GB
的中英文双语语料库上由sentence-piece
制定和训练,其中语料库中平均分布了英文内容和中文内容。常见的
token
从No.20000
到No.20099
,由标点符号、数字、以及用于自由扩展的space
而组成。No.20100
至No.83822
为英文token
,No.83823
至No.145653
为中文token
。No.145653
之后的token
是其他special token
,包括拼接的标点符号、其他语言的piece
等。
在我们的实现过程中,我们忽略了前
20000
个image token
,利用了后130000
个用于text tokenization
的token
。我们取消了对换行符的忽略,将换行符\n
tokenize
为No. 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
)。不需要标识句子的开始,因为上一个句子的结束就是下一个句子的开始。Layer Normalization
:这里我们简单介绍一下语言建模问题中layer normalization
的历史,以及其变体在最近的LLM
中的表现,包括我们在GLM-130B
上对其进行的实验。Post-LN
:Post-LN
是与Transformer
架构共同提出的,并被置于residual block
之间。然后它被BERT
采用。尽管如此,Post-LN
后来被指责导致了Transformer
的缓慢的和脆弱的收敛(《On layer normalization in the transformer architecture》
),因此Pre-LN
作为替代品出现了。Post-LN
: $ \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-175B
、BLOOM
、以及文本到图像模型CogView
后来观察到,当模型规模达到100B
或遇到多模态数据时,Pre-LN
仍然无法处理脆弱的训练。这在GLM-130B
的初步实验中也得到了证明,Pre-LN
在早期训练阶段一直处于崩溃状态。Pre-LN
: $ \mathbf X_{l+1} = \mathbf X_l + \mathcal F(\text{LN}(\mathbf X_{l})) $ 。即LN
添加在残差块之中、 $ \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
技术,它们稳定了一个4B
的text-to-image generation model
的训练。尽管它比Pre-LN
有优势,但可悲的是,Sandwich-LN
也被证明在GLM-130B
训练中会崩溃,更不用说由其Pre-LN
性质引起的潜在的较弱的tuning performance
。
Positional Encoding
和FFN
:Positional Encoding: PE
:平凡的transformer
采用绝对位置编码(absolute position encoding
)或正弦位置编码(sinuous position encoding
),后来演变为相对位置编码(relative positional encoding
) 。相对位置编码比绝对位置编码能更好地捕获word relevance
。旋转位置嵌入(Rotary Positional Embedding: RoPE
)是以绝对位置编码的形式实现的相对位置编码,其核心思想表现为以下公式:其中:
$ \mathbf{\vec q} $ 在位置 $ m $ 、以及 $ \mathbf{\vec k} $ 在位置 $ n $ 之间的内积,与它们之间的距离 $ n-m $ 相关,这反映了位置编码的相对性(relativity
)。上式中的
$ \mathbf R $ 矩阵定义为:其中:
$ m $ 为绝对位置; $ d $ 为embedding
维度。为了使得位置编码的值随着距离的增加而衰减,我们选择:在平凡的
GLM
中提出了一种二维绝对位置编码方法,用于建模intra-span
位置信息和inter-span
位置信息。在GLM-130B
中,与平凡GLM
中使用的二维位置编码不同,我们退回了传统的一维位置编码。然而,我们最初认为,我们不能直接将二维形式应用于RoPE
(但是随后我们在RoPE
的作者博客中发现了实现二维RoPE
的instructions
,此时我们的训练已经进行了好几周了)。作为一个替代计划,在GLM-130B
中,我们去掉了原始GLM
中使用的第二维,因为我们发现用于[MASK] generation
的单向attention mask
子矩阵也表示token order
。这一观察导致我们根据以下策略将GLM-130B
的位置编码转变为一维编码:对于被
short span
破坏的序列,我们丢弃第二维的位置编码。对于末尾被
long span
破坏的序列,我们将positional id
改为一维的 $ \{0,1,\cdots,s-1\} $ ,generated token
将延续来自last context token
$ s-1 $ 的第一维位置编码。
Feed-forward Network: FFN
:最近一些改进Transformer
结构的努力是在FFN
上,包括用GLU
(在PaLM
中采用)取代它。研究表明,使用GLU
可以提高模型性能,这与我们的实验结果一致(如下表所示)。具体来说,我们使用带GeLU
激活函数的GLU
:为了保持与平凡的
FFN
相同的参数,feed-forward
尺寸 $ d_\text{ffn} $ (通常是 $ 4d_H $ ,其中 $ d_H $ 是隐层维度)被减少到 $ \frac{8}{3}d_H $ ,因为参数 $ \mathbf V $ 被额外引入。PE
和FFN
的消融研究:为了验证我们的PE
和FFN
的选择,我们在实验中通过在一个随机的50G
中英文混合语料库上对GLM_Base
(110M
)进行预训练从而测试它们。我们将绝对位置编码与最近流行的两个相对位置编码变体(RoPE
和ALiBi
)进行比较。对于FFN
,我们比较了平凡的FFN
与带有GeLU
激活的GLU
。下表的结果显示,
ALiBi
和RoPE
都改善了测试集的困惑度,而且在使用RoPE
时其改善更为显著。而使用GeGLU
可以进一步提高模型的性能。
流水线并行的分析:在流水线并行中,每个
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)
)通过不同stage
的forward
和backward
交织,减少forward activation
的内存占用,进一步优化了GPU
内存的使用。我们分析
GLM-130B
预训练中的气泡占比。假设pipeline segment
的数量为 $ p $ ,micro-batch
的数量为 $ m $ ,每个micro-batch
的forward
时间和backward
时间分别为 $ t_f $ 和 $ t_b $ 。在理想情况下,forward
和backward
耗时 $ t_\text{ideal} = m(t_f+ t_b) $ 。但在实践中,默认的流水线分发策略分别引起 $ p-1 $ 个前向传播的气泡、以及 $ p-1 $ 个反向传播的气泡,因此气泡的总耗时为 $ t_\text{bubhle} = (p-1)\times (t_f + t_b) $ ,因此气泡占用率为:对于较大数量的
micro-batch
$ m $ ,气泡占比将减少到一个可接受的水平。具体而言,GPipe
的实验表明,当 $ m\ge 4p $ ,由于反向传播中的forward recomputation
技术允许computational communication
有一定的重叠,流水线气泡时间的总百分比降低到可以忽略的水平,从而表明由流水线并行引入的气泡并没有严重消耗训练效率。一般来说,为了充分利用硬件,通常会将模型放入由多个节点组成的
model parallel groups
,并尽量使用每个节点的全部内存。在这种情况下,我们可以自由调整流水线模型并行和张量模型并行的比例。由于数据并行几乎不影响计算时间,我们假设数据并行的规模为 $ d=1 $ ,节点总数为 $ n $ ,张量模型并行的规模为 $ t $ ,流水线模型并行的规模为 $ p $ ,并满足 $ n=t\times p $ ,这种情况下的气泡占比为:从上式中可以看出,增加张量并行的规模将进一步降低气泡比例。然而,张量并行规模不能无限制地增加,这将降低计算粒度,并大大增加通信成本。因此,我们可以得出结论:张量模型并行的规模应该随着模型规模的增加而缓慢增加,但不能超过单台机器的显卡数量。在
GLM-130B
的训练中,实验表明,在DGX-A100
系统中,最佳的张量并行规模是 $ t=4 $ ,并没有扩大到 $ t=8 $ 。其他参数为 $ m=176, p=8 $ ,计算出的气泡占比仅为3.8%
,足以证明流水线模型并行的效率。Inference
加速:一个模型的普通PyTorch
实现很容易阅读和运行,但对于LLM
来说,它的速度会慢得令人难以忍受。基于NVIDIA
的FasterTransformer
(https://github.com/NVIDIA/FasterTransformer
),我们花了两个月的时间将GLM-130B
实现为C++
语言,以加快推断速度,其中包括以下主要优化:优化耗时的操作,如
GeGLU
、Layer Normalization
和SoftMax
。减少
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-176B
的Pytorch
实现快7.0 ~ 8.4
倍。加速LLM
从而获得可容忍的响应速度,这可能是LLM
普及的关键。Activation Outlier
分析:如前所述,GLM-130B
的权重可以被量化为INT4
,以大幅度减少inference
中的参数冗余。然而,我们也发现GLM-130B
的activation
(即层与层之间的隐状态)不能被适当量化,因为它们包含value outlier
,这在同时进行的文献中也有建议(《Llm. int8 (): 8-bit matrix multiplication for transformers at scale》
)。GLM-130B
的独特之处在于,其30%
的维度可能出现value outlier
(如下图所示),而其他基于GPT
的LLM
(例如OPT-175B
和BLOOM 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
)记忆一些固定的世界知识或语言知识的重要线索。因此,在量化过程中删除或忽略它们会导致显著的性能下降。权重量化:
Absmax
量化:是一种对称量化,即对于张量 $ \mathbf X $ ,将区间 $ [-\text{absmax}(\mathbf X), \text{absmax}(\mathbf X)] $ 映射到区间 $ [-(2^b-1), 2^b-1] $ ,其中:其中:
$ s_X $ 为缩放因子, $ \mathbf X_q $ 为量化结果, $ b $ 为位宽(bit width
)。Zeropoint
量化:是一种非对称量化,即对于张量 $ \mathbf X $ ,将区间 $ [\min(\mathbf X), \max(\mathbf X)] $ 映射到区间 $ [-(2^b-1), 2^b-1] $ ,其中:其中:
$ \mathbf Z_X $ 为零点,它表示原始空间的零张量被投影到量化空间的哪个点。Col/Row-wise
量化:对权重矩阵使用单个缩放因子往往会导致更多的量化错误,因为一个单个outlier
会降低所有其他元素的量化精度。一个常见的解决方法是按行或列对权重矩阵进行分组,每组单独进行量化,并有独立的缩放因子。
量化的设置:我们的目标是在不损害模型性能的情况下尽可能地节省
GPU
内存。在实践中,我们只对线性层进行量化(线性层占据了大部分的transformer
参数),而对input/output embedding
、layer normalization
和bias
项不做任何改变。在INT4
的量化精度下,两个INT4
权重被压缩成一个INT8
权重以节省GPU
的内存使用。我们采用Absmax
量化,因为我们发现它足以保持模型的性能,而且它比zeropoint
量化更加计算高效。在推断过程中,只有quantized weight
被存储在GPU
内存中;线性层的FP16
权重在运行时被逆量化(dequantized
)。不同规模的模型的量化效果:
110M
到10B
规模的GLM
模型来自GLM
的原始论文。虽然较小规模的GLM
的结构与GLM-130B
不一样,但我们认为training objective
是量化的关键因素。下表显示了不同规模的GLM
系列模型、以及BLOOM
系列模型采用不同量化方法时在LAMBADA
数据集上的性能。几乎所有的模型都在INT8
精度下保持性能。在INT4
精度下,GLM
的性能比BLOOM
的性能要好,当它规模扩大时。权重分布的分析:为了实现
INT4
权重量化,我们用直方图分析了GLM-130B
和对应的BLOOM-176B
中主要线性层的权重取值分布(如下图所示)。横轴表示权重取值,纵轴表示该值的数量(在对数尺度下)。我们可以看到,主要是BLOOM-176B
中的w2
线性层呈现偏斜的分布,这将阻碍对称量化的进行。相反,GLM-130B
的w2
形状良好,没有许多outlier
和偏斜的分布,因此为其INT4
量化铺平了道路,性能损失不大。
47.6.3 数据集和评估细节
多任务指令预训练
Multi-task Instruction Pre-training: MIP
:遵从T5
、FLAN
、T0
、Ext5
的做法,我们在GLM-130B
的MIP
训练中包括许多prompted instruction
数据集,这占了训练token
的5%
。T0
数据集的所有prompt
来自PromptSource
;DeepStruct
数据集的prompt
是新创建的。它们的构成如下表所示,由T0
和PromptSource
的自然语言理解和自然语言生成数据集、以及DeepStruct
的information extraction
数据集组成。在GLM-130B
的训练中,我们计算出每个数据集中大约有36%
的样本被看过。T0
最初拆分数据集从而用于两个部分:multi-task prompted training
、zero-shot task transfer
。我们最初计划只包括T0
的multi-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
和数据集的细节在PromptSource
的GitHub repo
中提供。Information Extraction
:基于DeepStruct
的数据集、以及一个用于信息提取任务的多任务语言模型预训练方法,我们为其部分数据集创建instructions
和prompts
(如下表所示)。我们将信息提取任务重新表述为instruction tuning
格式,以允许zero-shot generalization
到新的抽取模式。对于每个数据集的所有prompted sample
,我们设置了每个数据集最大200k
个样本的截断,因为信息提取数据集的比语言理解数据集和语言生成数据集少(指的是集合数量更少,而不是数据集内的样本数更少)。对于KELM
和PropBank
数据集,由于它们的原始规模巨大,我们从它们的prompted example
中各取500k
个样本。
在
MIP
中针对DeepStruct
的数据和prompts
:DeepStruct
中所有数据集的prompts
和instructions
是由作者手动创建的。每个数据集的介绍、任务描述和完整的prompts
都附在下面的内容中。为了允许template infilling
,我们将所有prompts
写进Jinja
模板。当一个数据集样本以我们的格式被提供时,Jinja
引擎将把它渲染成带有instructions
的prompted 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
(命名实体识别和关系提取的组合)或端到端的训练。在这项工作中,我们采用了三个经典的联合实体和关系提取数据集:
CoNLL04
、NYT
、以及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
数据集包含24
个Freebase 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
这种实体。我们根据命名实体识别数据集
CoNLL03
、OntoNotes 5.0
、GENIA
设计了两种不同类型的任务。我们还包括来自联合实体和关系数据集的命名实体识别子任务。命名实体识别:给定可能的实体类型列表(例如,地点、人、组织),从提供的文本内容中提取所有相关的实体。
实体定型(
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
作为第二宾语。我们根据语义角色标注数据集
CoNLL05
、CoNLL12
和PropBank
创建两个不同的任务。语义角色标注:传统的任务形式,即在文本中注释一个动词(即谓语),要求模型生成相关的语义角色。
语义角色填充:给定一个动词和一个潜在的语义角色,要求模型判断该角色在句子中是否存在并生成它。
谓语识别:给定一个句子的片段及其相应的语义角色,识别它与哪个动词有关。
Big-Bench-Lite
评估:最近的工作显示,LLM
有能力进行超越传统语言任务的reasoning
。作为回应,BIG-bench
最近通过从全球研究人员那里众包新型的任务来测试LLM
的新能力。出于经济上的考虑,我们在原150
个任务的BIG-bench
的一个官方子集上评估GLM-130B
,即有24
个任务的BIG-bench-lite
。这些任务可以分为两类:一类是基于带有答案选项的多选题问答任务,另一类是不带答案选项的答案直接生成任务。对于第一类,我们评估每个选项的完整内容的概率,并挑选概率最大的选项作为答案;对于第二类,我们使用贪婪解码来生成答案。在BIG-bench
中进行的所有评估都是基于[MASK]
,因为这里的答案通常是短文。在24
个BIG-bench-lite
数据集上的三个LLM
的所有结果都显示在下表和下图。我们采用了BIG-bench
的原始prompt
,并使用官方的实现来生成启动样本(priming example
)用于few-shot
评估和计算最终得分。MMLU
评估:下表中显示了GLM-130B
和BLOOM 176B
的57
个MMLU
数据集的所有结果。在前面内容中,我们报告了GLM-130B
、GPT-3 175B
和BLOOM 176B
的加权平均准确率(即每个样本的准确率平均值),遵循原始的benchmark setting
。 下面是一个具有1-shot priming
的prompted 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: (
Language Modeling
评估:LAMBADA
:我们遵循GPT-2
中的评估设置,利用stop-word filter
从而选择出得分最大的valid final word prediction
作为我们的答案。我们使用beam size = 16
的beam search
解码策略,最大generation
长度限制为5
。遵从《The lambada dataset:Word prediction requiring a broad discourse context》
的要求,我们预测的final word
是一个自然的英语单词(即可能由多个token
组成),而不是单个GLM-130B token
。最后,我们用字符串匹配来判断正确性。Pile
:Pile
是一个全面的语言建模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
长的上下文,剩余的1024
个token
以自回归方式计算BBP
。加权平均BBP
是根据每个共享数据集在Pile
训练集中的比例计算的。下表中报告了
Pile
测试集的详细指标。我们观察到,与GPT-3
相比,GLM-130B
在phil_papers
和pile_cc
上的表现明显较弱,这可能是由于GLM-130B
的双语特性、以及缺乏更多样化和高质量的私有语料库。
中文理解评估:在此,我们阐述了我们用于
CLUE
和FewCLUE
评估的prompts
。在中文数据集中,提示遇到了一些挑战,因为中文文本是由单个字符而不是单词组织的,在许多情况下导致verbalizers
的长度不等。尽管针对数据集的校准可以帮助缓解这一问题,但过于具体的技术在实施中会很复杂。我们在本文中的评估采用了一种更容易解决的方法,利用GLM-130B
的独特功能。由于GLM-130B
是一个带有英文MIP
的双语LLM
,我们采用了《Promptsource: An integrated development environment and repository for natural language prompts》
的类似任务中的英文的prompts
和verbalizers
来进行中文数据集的评估,并发现这些策略相当有效。在评估指标方面,除了DRCD
和CMRC2018
这两个问答数据集报告了EM
,其他数据集报告了准确率。
47.6.4 更广泛的影响
本文介绍了一个具有
130B
参数的开放式双语预训练语言模型。目前,大多数拥有超过100B
参数的预训练语言模型被政府和大公司所私有。其中少数的政府或大公司提供了有限的付费的inference API
。相比之下,GLM-130B
的权重和代码向任何对LLM
感兴趣的人开放。此外,我们通过speed-up implementation
和INT4
量化,大大降低了推理的硬件要求。这篇论文可以对研究界、个人开发者、小公司和社会产生更广泛的影响。对人工智能研究的影响:大多数研究机构无法承担预训练大型语言模型的巨大成本。因此,除了政府和大公司的雇员之外,大多数研究人员只能通过付费来使用有限的
inference API
。通过inference API
,研究人员只能把模型的输出作为黑盒子来分析,这限制了潜在工作的范围。通过GLM-130B
,研究人员可以分析与特定输入相对应的模型参数和内部状态,从而对LLM
的理论、能力和缺陷进行深入研究。研究人员还可以修改模型结构和权重,以验证所提出的算法,从而改进LLM
。通过
INT4
量化,GLM-130B
可以在流行的GPU
上进行推理,如4
个RTX 3090
或8
个RTX 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
的差距。
环境影响:对大型语言模型的主要关注之一是其巨大的能源使用和相关的碳排放。据估计,
GPT-3
使用了500
吨的碳排放足迹(CO2eq
)。在60
天的训练过程中,我们总共消耗了442.4MWh
的电力。考虑到当地电网的0.5810
公斤/千瓦时的碳效率,预训练释放了257.01
吨的二氧化碳。这大约是GPT-3
的碳足迹的一半,可能是由于高效的并行策略和NVIDIA
的硬件改进。这个碳排放量大约相当于18
个普通美国人一年的排放量。然而,我们相信随着GLM-130B
的发布,可以为复制100B-scale LLM
节省更多的碳排放。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论