[大模型补课]模型及训练方法

前情提要: [大模型补课]当代AI的基石数据集 [大模型补课]当代语言模型的评价体系 这是大模型补课的第三篇文章,主要关注模型及其训练方法。做算法的人往往最喜欢看模型相关的东西,这期包含的内容也确实很有趣,不需要技术背景也能看懂。 Encoder vs Decoder 在模型层面,我认为大模型时代最重要的一个变化就是从前几年的Encoder为主变成了Decoder Only占据绝对的主流。相对应的,自然语言生成问题取代了自然语言理解问题成为了主流,并且是在用生成这种范式统一了理解问题。 transformer编码器和transformer解码器的主要区别在于它们如何处理输入和输出序列。 {: .align-center style=“width:80%”} 最开始的时候Transformer的Encoder和Decoder是成对出现的 {: .align-caption style=“text-align:center;font-size:smaller”} Transformer编码器处理输入序列(例如句子),并将其转换为一组隐藏表示,以捕获序列的含义。编码器由一堆相同的层组成,每个层对输入序列应用自注意力机制和前馈神经网络。 另一方面,Transformer解码器基于编码器产生的隐藏表示生成输出序列。它也由类似的层堆叠组成,但每个层还关注编码器产生的隐藏表示,以包含输入序列的信息。解码器还使用自注意力机制以自回归方式生成输出序列,这意味着它逐个标记地生成,条件是它已经生成的标记。 总之,虽然transformer架构中的编码器和解码器都使用自注意力机制和前馈神经网络,但编码器处理输入序列,解码器通过关注编码器产生的隐藏表示来生成输出序列。 当下火爆的大语言模型几乎都使用的是decoder only的结构。在知乎有一个问题为什么现在的LLM都是Decoder only的架构?,非常推荐大家阅读。GPT4发布之后,其处理context的能力从3.5的4k一下跃升到32k,不知道openai是不是又加入了encoder。 涌现、Scaling Law和科学炼丹 模型的规模增大无疑是最近AI进步的重要推动力。目前像GPT3.5这样的语言模型包含了1750亿个参数,相比于人脑中的神经连接其实还小了差不多一个数量级。模型的大小和其能力的关系实际是一个非常有指导意义的值得研究的问题。 涌现(emergent abilities)是在2022年中的论文Emergent Abilities of Large Language Models 提出的概念,是指在大模型中出现的而在小模型里没有出现的能力,用咱们熟悉的话说就是"量变引起质变",而且这种现象是不可预测的。这种不可预测性给模型的开发带来了很大的麻烦,因为训练一个100B以上的模型成本是非常高昂的。这篇论文里列举了好几个任务里涌现的案例。 Emergence is when quantitative changes in a system result in qualitative changes in behavior. –Nobel prize-winning physicist Philip Anderson {: .align-center style=“width:80%”} Few-shot任务里体现出来的涌现现象 {: .align-caption style=“text-align:center;font-size:smaller”} 实际上,早在几年前人们就训练过巨大的模型,但那时候并没有出现现在这么强的模型。例如可能是世界上最喜欢大模型的公司Nvidia,在2022年训练过一个530B的超大模型MT-NLG,但可能知道这个模型的人都很少。Deepmind的论文Training Compute-Optimal Large Language Models讨论了这个问题,并给出了结论:之前的模型都训练不充分,把数据量提上去小模型也会有大能力。还给出了一套算力消耗一定的情况下合理分配模型规模和训练数据多少的方法论。 {: .align-center style=“width:80%”} 典型的大模型参数量及训练数据量,Chinchilla参数少得多但性能更强 {: ....

March 25, 2023 · 2 min · Yuanhao

[大模型补课]模型训练关键工具包

前情提要: [大模型补课]当代AI的基石数据集 [大模型补课]当代语言模型的评价体系 [大模型补课]模型及训练方法 这是大模型补课的第四篇文章,主要关注模型背后的训练工具。 并行:大模型训练的必要手段 如果你使用过多张GPU训练模型,那应该对并行不陌生。最基本并行方式有以下两种 DataParallel数据并行(DP)。这也是最常用并行方法,在pytorch里有DP和DDP两种原生方式,使用起来都很方便。这种并行方式最好理解,模型在每个worker上都有完整的一份,只是给他们喂的数据不同。在每个worker算完后,需要一个同步过程,来综合大家的梯度信息,再更新模型。数据并行主要解决训练速度的问题,可以在单位时间内学习更多的样本。 ModelParallel模型并行(MP)。模型并行指的是把模型分拆到多个GPU上,主要解决模型太大而无法放到一个GPU上的问题。以目前爆火的大规模语言模型为例,一个175B的GPT模型,整个载入的话需要 $$175*10^9$$ 个参数,每个参数用4个字节,则需要700G的存储空间,目前没有听说过哪个GPU可以放得下,只能把一个模型放到好几张卡上。模型的拆法也有多种,可以把不同层放不同卡,这种称为垂直拆分;也可以在同一层也拆开,这种被称为水平拆分。 以下再介绍几个模型并行的细分方法。 TensorParallel张量并行(TP)。每个张量被分成多个块,因此不是整个张量驻留在单个 GPU 上,而是每个张量片段驻留在其指定的 GPU 上。在处理期间,每个片段在不同的 GPU 上分别并行处理,结果在步骤结束时进行同步。这就是所谓的水平并行,因为拆分发生在水平层面上。 PipelineParallel流水线并行(PP)。模型在多个 GPU 上垂直(层级)拆分,因此仅将模型的一个或几个层放置在单个 GPU 上。每个 GPU 并行处理管道的不同阶段,并处理一小批数据。流水线并行的主要问题是因为前后依赖而带来的GPU等待(下图中的Bubble区域),这个问题通常用更小批量的数据来缓解。 现代化的并行训练方法以上几种并行方法的有机组合,也就是传说中的三维并行(DP+TP+PP)。 有关并行的介绍,推荐阅读Huggingface的这篇文档。 Megatron-LM 提到模型并行,不得不提的软件包是英伟达的Megatron-LM。但实际在这个开源大模型日新月异的今天,需要使用这个库的人也是很少的。这里根据论文介绍一下他的原理,还是挺有趣的。 目前的语言模型领域,Transformers结构已经是绝对的主流,在这种结构里,主要有两种building block,一个是多层感知机MLP,另一个是自注意机制。 全连接层可以理解为矩阵乘法 $$Y=XA$$ ,其中 $$A$$ 是参数。第一种并行法是把这个参数按行来分割,而把输入按列分割,假设分成两个小矩阵 $$X=[X_1, X_2],A=[\begin{matrix}A_1\A_2\end{matrix}]$$ 这样 $$Y=X_1A_1+X_2A_2$$ ,如果全连接后面跟一个非线性激活函数,例如GeLU,那么会遇到下面的问题 $$GeLU(XA)\ne GeLU(X_1A_1+X_2A_2)$$ 所以只能把A按照列分为 $$[A_1, A_2]$$ ,这样可以得到 $$Gelu([Y_1,Y_2])=[GeLU(XA_1), GeLU(XA_2)]$$ 整个过程可以用下图表示 自注意力机制的并行方法是MLP的扩展,具体的说就是把多个注意力头分到不同的GPU去执行。 上面只是一些模型并行(准确的说是张量并行)的基本思路。并行的时候除了考虑减少单个显卡显存的使用,还要权衡额外产生的通信负担,是个很有意思的领域。我也了解不多,感兴趣的读者可以自己再读一些资料。 在Megatron论文里,他们合并使用了数据并行和张量并行,从而实现快速训练大模型的目标。 We efficiently trained transformer based models up to 8.3 bil- lion parameter on 512 NVIDIA V100 GPUs with 8-way model parallelism and achieved up to 15....

March 25, 2023 · 2 min · Yuanhao

大规模语言模型的评价方法

上一篇文章介绍了大模型是用什么数据训练的,这一篇文章重点来看大模型的评价方法。Chatgpt这轮出圈很大原因是对话这种评价方式非常直观,普通大众就可以从对话质量看出来现在的模型比之前的"人工智障"要强很多。但真正开发大模型肯定不能用这种方式,不仅效率低、价格高,还存在不小的主观因素。这篇文章就来总结一下大模型的评价方式。 还是先来看LLaMA论文里使用的评价指标。LLaMA里一共使用了**20种数据集(或任务)**来评估和对比模型。这些任务可以分为两大设定:零样本任务和少样本任务,涵盖以下几个大类 常识推断 闭卷问答 阅读理解 数学推理 代码生成 大规模多任务语言理解 下面一一来看。 常识推断 这个任务用了8个数据集,分别是BoolQ、PIQA、SIQA、HellaSwag、WinoGrande、ARC easy, ARC challenge和OpenBookQA。不同数据集有不同的形式,包括填空、威诺格拉德模式挑战(英语:Winograd Schema Challenge,缩写WSC)、多选问答。这些数据集在评价中都属于零样本,就是让模型通过预训练来直接回答问题。 一个威诺格拉德模式的例子为:“ 市议会拒绝给示威者颁发许可,因为他们[担心/宣扬]暴力。 ” 当这句陈述中使用“担心”一词时,前面的“他们”指的是市议会。而当使用“宣扬”一词时,“他们”所指的则变成了示威者。人类通过常识可以很简单地看出两种情况下“他们”所指分别为何,但对于机器而言这个问题则十分困难。 {: .align-center style=“width:80%”} 不同模型常识推断结果比较。​这种常识问题现在的模型基本都能对个​六成以上。 {: .align-caption style=“text-align:center;font-size:smaller”} 闭卷问答 这个任务包括两个数据集Natural Questions和TriviaQA。所谓闭卷,是相对于数据集原来的设定来说的。已Natural Questions为例,原来的设定是模型可以访问相关维基百科文本,然后根据百科内容回答问题。然而在评价大语言模型的时候,就不给看这个维基页面了。闭卷问答包括zero shot和few shot两种设定。zero shot很好理解,跟上面的常识推断很像,下面是论文附录里few shot的例子,实际上就是列几个问答对作为context。我目前还不太懂这种无关问答对对模型回答问题有什么帮助。 Context → Answer these questions: Q: Who sang who wants to be a millionaire in high society? A: Frank Sinatra Q: Who wrote the book the origin of species? A: Target -> Charles Darwin 阅读理解 阅读理解和前面提到的开卷问答有一点像。只是常见的阅读理解数据集用于支撑问题回答的背景材料比较短(相比于NQ里的维基页面)。在LLaMA论文里,使用的是RACE数据集,这个数据集对于做过阅读理解的朋友一定不陌生,是为初高中中文学生设计的英语阅读理解题。...

March 1, 2023 · 1 min · Yuanhao

大规模语言模型的基石数据集

最近AI大火,作为一名稍微有点赶不上趟的NLP工程师,感觉有很多课需要补。恰好昨天Meta发了新的大模型论文,浏览了一下发现很适合作为补课的切入点。 今天这部分是关于预训练使用的数据集,是重中之重,说数据是当代AI的基石一点也不为过。GPT3用的数据其实没有公开,Meta这次论文里提到的应该算是开源模型里一个最全的版本。他们使用的数据如下表所示,我们一一来看一下。 Dataset Sampling prop. Epochs Disk size CommonCrawl 67.0% 1.10 3.3 TB C4 15.0% 1.06 783 GB Github 4.5% 0.64 328 GB Wikipedia 4.5% 2.45 83 GB Books 4.5% 2.23 85 GB ArXiv 2.5% 1.06 92 GB StackExchange 2.0% 1.03 78 GB CommonCrawl 占比最大的数据集,他们的网站是https://commoncrawl.org/。我感觉这真是一个伟大的项目,7年时间爬了超多的互联网网页,涵盖了40种语言。 CommonCrawl网站截图 {: .align-caption style=“text-align:center;font-size:smaller”} 根据他们博客的最新数据,2023年二月版的数据包含了400TB的数据(纯文本的数据是9个多tb),三十多亿个网页。 The crawl archive for January/February 2023 is now available! The data was crawled January 26 – February 9 and contains 3....

February 26, 2023 · 3 min · Yuanhao