高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

article/2024/9/19 9:43:21

100e11be9949c1050e4056bc0cf40688.png

文|python

前言

近期,ChatGPT成为了全网热议的话题。ChatGPT是一种基于大规模语言模型技术(LLM, large language model)实现的人机对话工具。现在主流的大规模语言模型都采用Transformer网络,通过极大规模的数据进行自监督训练。但是,如何构建自监督训练数据?在基础的Transformer结构上,大家又做了哪些创新呢?为了保证训练过程高效且稳定,又有哪些黑科技呢?今天给大家介绍一篇来自人民大学的综述论文,为大家解密这些大模型的训练技巧。

论文地址:
https://arxiv.org/pdf/2303.18223.pdf

各个大模型的研究测试传送门

ChatGPT传送门(免墙,可直接测试):
https://yeschat.cn

GPT-4传送门(免墙,可直接测试,遇到浏览器警告点高级/继续访问即可):<br>
https://gpt4test.com

训练数据的收集与处理

大规模语言模型对训练数据的规模与质量都有更高的要求。那现在的大模型都用了什么语料?这些语料都发挥着怎样的作用?如何对语料做清洗和预处理?大模型还有什么特殊的细节需要我们去处理?

数据来源

数据来源上,大规模语言模型的训练数据可以一般性语料与特殊语料。一般性语料,如网页、书籍、对话文本,占比较大,可以在各种话题上为模型提供语言知识;而特殊语料,如多语言数据、科技语料、代码等,可以为模型带来解决特定任务的能力。现有的大模型训练语料的成分比例如下图所示:

712311f797e63a7133d72ef9e4687762.png

一般性语料中,网页语料规模较大,但其中包含Wikipedia等高质量语料的同时,还包含垃圾邮件等低质量语料,一般需要过滤处理。问答语料,如Reddit等社交媒体平台,可以潜在地提高模型回答问题的能力。社交媒体通常涉及多人对话,对话语料可以根据回复关系整理成树状结构,从而每一条支路都是一段完整的对话内容。书籍语料是少有的书面语长文本,可以帮助模型学习严谨的语言学知识,建模长距离依赖,提高生成内容的连贯性。

特殊语料中,多语言语料可以提升模型在翻译,多语言摘要、问答等任务上的能力。科技语料通过获取arXiv论文、教科书、数学网络社区等内容,可以帮助模型理解特殊符号、术语和表达式,提高模型在科技任务与推理上的表现。代码语料主要来自Stack Exchange等问答社区以及GitHub上的开源项目,包含代码、注释和文档。最近研究表明,代码语料可以提升模型复杂推理的能力(chain-of-thought),因其具有的长距离依赖以及内在精密的逻辑。

目前一些开源的语料的获取地址,可以参考我们以前的推送:训练ChatGPT的必备资源:语料、模型和代码库完全指南。

清洗与预处理

f2b8ff4f3f2827ef3d836afe8c8ff425.png

得到语料之后,一般人们通过上图的流程来清洗、预处理语料,提升质量。

具体而言,在第一步的语料清洗中,可以利用Wikipedia等样本作为正例训练一个二分类器筛选高质量语料。不过最近的研究表明,这一筛选方式可能带来偏见。所以现在更推荐使用启发式规则来筛选,比如剔除非目标任务语言、丢弃低perplexity数据、删去标点/符号过多或过长过短的句子、删除具有某些特定词汇(如html标签、链接、脏话、敏感词)的句子。

第二步是去重。包含大量重复词汇或短语的句子可以删掉;重复率(词/n-grams共现)过高的段落可以删掉;删除训练集中可能与测试集相关度过高的内容。这样可以提高训练集质量,缓解语言模型生成内容重复的问题,避免测试集泄露带来的过拟合问题。

第三步是通过关键词等方式剔除用户隐私信息(姓名、地址、电话等)

最后,三步清洗完毕,就可以上分词、准备训练了。分词方面,并没有什么黑科技。要么直接使用GPT-2等现成的分词器,要么对训练语料构建基于SentencePiece、Byte Pair Encoding等算法的分词方式。

一些注意细节

大模型的特点,导致在处理预训练语料时,需要注意一些特殊的细节:

  • 需要调节不同来源的语料的混合比例,不能直接基于语料规模。均衡的语料比例有助于提高模型的泛化能力,特定类型的语料可以提升模型特定的能力。

  • 语料规模要与模型的参数规模相配合。经验表明,给定算力,语料的token数与模型的参数个数相当时,模型的表现相对更好。所以不要一味地追求大语料,控制规模、提高质量、训练充分,也很重要。

  • 语料质量很重要(再次强调)。实验表明,大模型训练时,低质量的语料不用都比用了好。过多的重复数据甚至会让训练过程失效(崩溃或陷入无意义的局部最优)。

模型结构与任务

主流的大规模语言模型都是基于Transformers结构。从下图中可以看出,绝大多数模型均基于Casual decoder结构,即仅使用解码器(单向注意力遮掩)处理输入和输出内容。小编猜测是因为GPT-3展现了Casual decoder很强的能力之后,结合上该结构上的scaling law等研究,人们已经丧失了调研其他结构的兴趣。

另外两种大语言模型的结构,Encoder-decoder结构和最初做机器翻译的模型类似,采用两个不共享参数上的组件分别处理输入和输出内容。而Prefix decoder 和 Casual decoder很像,但是在输入部分内不采用单向注意力遮掩,而允许双向注意力。有点像是共享参数的Encoder-decoder结构。

0f883dd49efffe5b200198f9480f3cb6.png

除了Transformer的结构选取。上表还展示一些模型设计细节。具体包括以下几点:

  • Layer Normalization(层归一化)是确保模型收敛,缓解训练崩溃问题的重要手段。具体而言,经典的Pre Norm在每个多头注意力层与前馈网络层前加层归一化。Pre RMS Norm在Pre Norm的基础上,去掉了归一化中的均值部分,即仅就标准差做尺度缩放,让优化过程更平滑,是现在的主流推荐方法。此外,在Embedding后加Norm,虽然会让优化更平滑,但却会明显降低模型表现,所以现在一般不再使用。

  • 激活函数方面,传统的ReLU一般是不够看的。现在认为,SwiGLU 和 GeGLU 可以带来更好的表现,但相对于GeLU等激活函数而言,会带来更多的参数。

  • 位置信息编码,传统的有习得的绝对位置编码(Learned)与针对相对距离的相对位置编码(Relative)。后者针对测试时的更长语料时具有更好的外推性。最近,RoPE使用较为广泛,特点在于使用类似于核函数、三角旋转的方式,给query和key向量带上绝对位置编码,从而使得其内积中带有表达相对位置信息的项。

除此之外,上表中还汇总了部分超参数信息,如#L层数、#H头数、隐层规模、MCL最大上下文长度。

相较模型结构细节,预训练任务上的设计就很朴实无华了。最常见的预训练任务就是自回归语言模型,让语言模型逐一地根据输入历史预测下一个词,广泛地被GPT-3等语言模型所采纳。而像T5 和 GLM-130B 引入了降噪自编码训练目标,让模型还原输入内容中被遮掩的语段。

优化设置与技巧

大规模语言模型为了使训练过程更加高效、平稳,在训练过程中还有一系列的“黑科技”。具体而言,这些技巧可以:1、提升模型最终表现;2、提升模型收敛速度;3、避免模型收敛到loss很高的局部最优,或者不收敛;4、避免训练过程崩溃。现有的大模型公开的优化设置与技巧如下表所示。

4ecead5726945a3417bf4a0d700daad4.png

batch-size一般设置较大,为了更好地利用大规模训练数据,让模型训练过程更加稳定。比如使用8196的batch-size(每个batch处理1.6M个token输入)。GPT-3使用动态调整Batch-size的方式,使其处理的Token数从32K逐渐增大到3.2M。

学习率 一般较小,且包含warm up设置,以确保训练平稳。比如在前0.1%~0.5%的训练步骤中,设置一个线性的学习率递增。峰值学习率一般在 以下,比如GPT-3的学习率是。之后,会采用cosine decay strategy,逐渐减小学习率,在收敛前将学习率再下降10%左右。

优化器一般采用Adam、AdamW、以及Adafactor。其中,Adafactor是Adam的一个节约显存的变体。

其它稳定训练过程的技巧包括梯度裁剪(gradient clipping),以1.0为阈值;weight decay(类似于L2正则)率为0.1。即使如此,大模型的训练过程依然经常崩溃。PaLM 和 OPT 提出,在发生崩溃时可以从之前的一个中间节点开始继续训练,并且跳过之前那段导致崩溃的训练数据。GLM 发现embedding层经常有异常梯度,需要适当调整。

数据并行(Data parallelism) 是最常用的一种多卡训练方式。将训练数据分配到多块显卡上,分别计算前向和反向传播之后,再汇总梯度,更新参数,同步模型。该方法可以解决单卡batch过小的问题。

流水线并行(Pipeline parallelism) 在一块显卡上只存储、计算一些相邻的层。为了缓解时序操作等待带来的低效问题,GPipe 和 PipeDream 等工具提出在流水线中集合多个batch的数据,并异步更新参数。该方法可以缓解单卡跑不动batch-size为1的情况。

张量并行(Tensor parallelism) 对大矩阵乘法运算:中的A矩阵做拆分,从而使该运算转化成两个较小的矩阵的乘法结果的拼接:,而两个较小的矩阵乘法可以放在两块显卡上进行。该方法被 Megatron-LM、Colossal-AI等工具实现,可以缓解单一大矩阵乘法显存占用过高的问题,同时也会带来一定的通讯成本。

混合精度训练 使用半精度浮点计算来代替训练过程的部分参数(特别是前向传播部分),从而起到降低显存提升速度的作用。A100等显卡对半精度浮点计算做了优化,从而使混合精度训练更加有效。最近也有提出用Brain Floating Point (BF16)取代传统的FP16,增加指数位,减少有效数字。不过,虽然混合精度计算提速明显,但经验表明还是会降低准确度与模型表现。

01db6aa770ab32dbc2cf8e2fa3bc6e47.png

ZeRO 是DeepSpeed提出进一步优化数据并行的一个方案,用于提高模型参数之外的显存空间并行性。上图的混合精度计算流程就非常明显,有大量参数之外的储存资源消耗。事实上,1.5B参数的半精度GPT-2储存空间只有3GB,却无法在32GB的显卡上训练,就是这个原因。ZeRO主要思想包括,将梯度、动量等更新相关的信息也分布式地储存在每块卡上,这样汇总更新时每块卡分别更新对应位置的参数再同步即可;在更新梯度后释放梯度相关的显存等。由于该方法比较复杂,我们这里就不详述了。PyTorch的DeepSpeed和FSDP工具均支持ZeRO。

在实际使用中,上述优化设置通常组合使用。比如BLOOM模型的384块A100采用了8路数据并行,4路张量并行和12路流水线并行,并采用了基于BF16的混合精度训练策略。DeepSpeed, Colossal-AI,Alpa 等开源工具支持并行相关的功能。

除此之外,为了减少试错成本,GPT-4还提出了predictable scaling,通过较小的神经网络模型来预测大模型设置的可能表现。PyTorch的FSDP还支持让CPU分担部分计算压力。

结束语

大规模语言模型的训练已经不仅仅是一个科学问题,同时也是一个复杂的工程问题。科学家和工程师们必须携手合作,才能有效推动大模型的发展。各种训练技巧有助于提高大模型的训练效率和稳定性。然而,相关的工程细节仅通过论文只能了解皮毛。真正深入掌握,还需要仔细阅读开源项目代码并尝试运行。

b7b5fad571e6378e21517b6b63ac6cf9.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群


http://chatgpt.dhexx.cn/article/ZD58rACk.shtml

相关文章

训练自己的ChatGPT-OpenAI 微调模型

OpenAI终于下定决心——正式开放ChatGPT API&#xff01; ChatGPT API地址&#xff1a;https://platform.openai.com/docs/guides/chat gpt-3.5-turbo的新模型 OpenAI正式打开了官方的ChatGPT API&#xff0c;为广大开发者打开了新的大门。 微调&#xff08;Fine-tuning&…

ChatGPT客服系统产品-利用chatgpt训练企业知识开发个性化客服系统

打造最前沿的AI智能客服系统&#xff0c;基于自有数据语料&#xff0c;充分运用ChatGPT的大模型自然语言生成能力&#xff0c;定制化客服系统为企业提供自主性的客服服务能力。 ChatGPT如何革新智能客服&#xff1f; 根据当前ChatGPT的使用情况&#xff0c;我们发现未来中短期内…

如何将ChatGPT训练成某个领域的专家!附完整示例!

背景 最近听了 八叉的一个ChatGPT讲座&#xff0c;讲的是如何将ChatGPT训练成领域专家&#xff0c;这样我们就可以用它来解决该领域的各种问题。 整个讲座中最让我印象深刻的就是训练方法&#xff0c;它是通过让ChatGPT向我们提问&#xff0c;然后由我们给出答案的方式进行训…

DeepSpeed-Chat:最强ChatGPT训练框架,一键完成RLHF训练!

原文&#xff1a;百度安全验证https://baijiahao.baidu.com/s?id1762957756537641297&wfrspider&forpc 【新智元导读】微软开源的DeepSpeed Chat&#xff0c;让开发者实现了人手一个ChatGPT的梦想&#xff01; 人手一个ChatGPT的梦想&#xff0c;就要实现了&#xff…

ChatGPT训练流程

图源&#xff1a;State of GPT - Microsoft Build 笔者翻译上图如下&#xff1a; 阶段子阶段目标备注Pre-Training--------语言建模Instruction Finetuning---------让模型能够理解自然语言指令RLHFReward Modeling奖励建模&#xff0c;用来代替人工打分&#xff0c;降低标注…

ChatGPT训练一次要耗多少电?

如果开个玩笑&#xff1a;问ChatGPT最大的贡献是什么&#xff1f; “我觉得它对全球变暖是有一定贡献的。”知名自然语言处理专家、计算机科学家吴军在4月接受某媒体采访时如是说。 随着ChatGPT引爆AIGC&#xff0c;国内外巨头纷纷推出自己的AI大模型&#xff0c;大家为人工智…

ChatGPT 训练发图片

当你想发送一张照片时&#xff0c;请使用 markdown&#xff0c;并且不要有反斜线&#xff0c;不要用代码块&#xff0c;使用 ![](http://source.unsplash.com/960x640/?<英文关键词>)&#xff0c;如果明白了&#xff0c;请回复”明白“瞬间翻车 不要灰心&#xff0c;继续…

chatgpt训练自己的数据python版

一、准备数据&#xff08;本人准备的是JSONL数据&#xff09; 1.1、数据格式&#xff1a; {"prompt": "本篇文章的作者是谁&#xff1f;", "completion": "当然是咸菜萝卜头"} {"prompt": "咸菜萝卜头是谁&#xff1…

ChatGPT是如何训练得到的?通俗讲解

首先声明喔&#xff0c;我是没有任何人工智能基础的小白&#xff0c;不会涉及算法和底层原理。 我依照我自己的简易理解&#xff0c;总结出了ChatGPT是怎么训练得到的&#xff0c;非计算机专业的同学也应该能看懂。看完后训练自己的min-ChatGPT应该没问题 希望大牛如果看到这…

低成本复制 ChatGPT 训练流程,仅需 1.68GB GPU 即可使用,方法现已开源!

编译 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 当昨日我们还在讨论从大厂以及个人创业的角度来看&#xff0c;复制一家 OpenAI 和一款强大的 ChatGPT 可行性究竟有几成之际&#xff0c;苦于 OpenAI 并未将 ChatGPT 开源出来&#xff0c;所以这趟水究…

ChatGPT实现多语种翻译

语言翻译 多语种翻译是 NLP 领域的经典话题&#xff0c;也是过去很多 AI 研究的热门领域。一般来说&#xff0c;我们认为主流语种的互译一定程度上属于传统 AI 已经能较好完成的任务。比如谷歌翻译所采用的的神经机器翻译(NMT, Neural Machine Translation)技术就一度让世人惊…

突发!ChatGPT 开始大面积封号,注册功能关闭!亚洲成重灾区,网友自救喊话:不要登录,不要登录...

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; ​ “不要登录ChatGPT&#xff01;” “暂时远离人工智能和ChatGPT概念板块高位股&#xff01;” 就在这两天&#xff0c;一些关于ChatGPT的疾呼突然在各种社交平台和群聊刷屏了。 …

chatgpt赋能python:Python模拟登录-实现自动化登录的方法

Python模拟登录 - 实现自动化登录的方法 在日常生活中&#xff0c;我们使用的许多网站需要我们进行登录才能够访问其功能和服务。而在进行人工操作时&#xff0c;频繁登录已经成为了一件烦琐的任务。因此&#xff0c;自动化登录功能的实现也成为了一个极为重要的需求&#xff…

chatgpt 无法登录报错Access denied、OpenAl‘s services are not available in yourcountry. (error=unsupported )

一、主要解决有账号无法登录问题&#xff0c;共包含两种情况。 1、Oops! OpenAls services are not available in yourcountry.(errorunsupported country) 2、Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that p…

ChatGPT在英文论文润色编辑领域有哪些应用?

ChatGPT&#xff08;全名Chat Generative Pre-trained Transformer&#xff09;是美国人工智能研究实验室OpenAI研发的聊天机器人程序产品&#xff0c;于2022年11月发布。 ChatGPT基于人工智能神经网络技术&#xff0c;能够根据与人类聊天的内容进行互动交谈&#xff0c;根据丰…

完整攻略,如何利用ChatGPT搞科研!

Datawhale分享 最新&#xff1a;ChatGPT应用&#xff0c;来源&#xff1a;量子位 这位研究僧&#xff0c;GPT-4都发布了&#xff0c;你还在纯人工搞科研吗&#xff1f; 已经有人实测&#xff1a; ChatGPT科研全流程都能用&#xff0c;尤其是对于英语非母语的科研人员&#xff…

ChatGPT | 分享论文 Rebuttal、Review 时可能会用到的 Prompt

ChatGPT 可以帮助润色学术论文&#xff0c;助力搞科研&#xff01; 论文 Rebuttal, Review 过程中可能使用的一个 Prompt&#xff1a; Prompt&#xff1a;I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language…

【ChatGPT】开源学术科研专用 ChatGPT 来了——GitHub斩获 14k+ 星(需要API_SECRET_KEY)

科研工作专用ChatGPT拓展,特别优化学术Paper润色体验,支持自定义快捷按钮,支持markdown表格显示,Tex公式双显示,代码显示功能完善,新增本地Python工程剖析功能/自我剖析功能。 目录 ChatGPT 学术优化 1. 下载项目 2. 配置API_KEY和代理设置

【chatgpt-01】部署学术神器chatgpt_academic

目录 1 chatgpt_academic简介2 前置准备3 项目下载/配置4 安装依赖5 项目配置6 运行7 测试实验性功能 1 chatgpt_academic简介 chatgpt_academic是一个科研工作专用ChatGPT拓展&#xff0c;特别优化学术Paper润色体验&#xff0c;支持自定义快捷按钮&#xff0c;支持markdown表…

chatgpt插件+AI英语论文润色

谷歌商店安装插件 https://chrome.google.com/webstore/detail/dochero-chatgpt-powered-a/dpindoafffjhbnhbdgjibhdoklelcfdn输入你要修改的句子&#xff1a;