ChatGPT
GPT (Generative Pre-training Transformer)是一种大型语言模型,能够生成各种不同的文本类型。官方论文 https://openai.com/blog/chatgpt
- GPT系列模型的基本思路是让AI在海量的数据上通过文字上下文对接,从而掌握基于前文内容生成后续文本的能力。这种训练方法不需要人类标注数据,只需要提供一段话的上文并遮住下文,然后将AI生成的文本与下文内容进行对比来训练AI
- ChatGPT是在GPT3.5模型的基础上进行优化的,作为GPT系列的第三代,GPT3.5在万亿词汇量的通用文字数据集上进行了训练,几乎可以完成自然语言处理的绝大部分任务,例如完形填空、阅读理解、语义推断、机器翻译、文章生成和自动问答
- Methods
Step 1 监督微调 SFT
- 收集演示数据并以监督模式训练生成规则(策略)。第一步对应于通过监督学习获得的 GPT-3.5 模型的微调。这种调整是使用问题/答案对完成的。问题由系统从问题数据库中自动提供,AI 培训师(标注员)负责回答问题。他们让培训师获得建议(来自模型)以帮助他们撰写答案。该团队选择的方法是有监督的 Fune-Tuning(或 SFT),它通过强制模型保持对输入和输出数据的拟合来改进网络。反向反向传播使用这些新数据调整模型的参数。
Step 2 奖励模型 RM
- 收集对比数据,训练奖励模型。第二步包括自动生成问题/答案对,并让 AI 培训师按照偏好对答案进行排序。系统生成两个答案,AI 培训师必须按质量降序排列。选择的方法是学习奖励模型(奖励模型的 RM),该模型根据生成的答案和 AI 培训师提供的命令工作。数据来自 AI 培训师与聊天机器人的对话。这些消息是随机选择的;他们抽取了几种可能的完成方式,并要求 AI 培训师对它们进行排名。
Step 3 强化学习 PPO
- 使用强化学习 (RL) 算法优化关于奖励模型的调节原则。第三步也是最后一步包括使用强化学习机制,通过小步骤,管理模型的规则和生成原则,称为近端策略优化 (PPO) 模型。模型的输入是来自数据库的问题。该模型生成由奖励模型评估的输出。将奖励注入生成规则管理模型以提高其性能。
Limitations
与任何文本生成系统一样,ChatGPT 模型可以根据它从语言中保留的内容生成无意义的文本,但不理解其含义。正如 OpenAI 在其描述中所说,最难解决的问题是强化学习中没有真实来源,这导致没有加权。与任何训练系统相比,生成网络学习什么是好的答案(通过克隆行为)。不幸的是,模型没有学习到正确的答案,因此答案将取决于模型保留了什么。因此,它将无法呈现专家认为准确的内容。
- 即使问题是模棱两可的,它们也会提供答案,并且不会搜索对问题的更好理解(消歧)。
- ChatGPT 鹦鹉学舌地支持现有内容,虽然它“听起来”很权威,但它可能是完全错误的。
- AI 还不能分辨事实与虚构,而 ChatGPT 是根据已经存在两年的数据进行训练的。
- ChatGPT 实际上会创建新文章、新闻项目或博客文章,甚至是学校论文,很难将它们与真实的、人工创作的文章区分开来,
- ChatGPT 会让人们更容易不去思考,从而使情况变得更糟。
- 在共享内容时,所有用户都应该清楚地表明它是由人工智能生成的。
DeepSpeed Chat
https://github.com/microsoft/DeepSpeed/blob/master/blogs/deepspeed-chat/chinese/README.md
DeepSpeed-Chat!
一个支持端到端的基于人工反馈机制的强化学习(RLHF)的规模化系统 ChatGPT模型的训练是基于InstructGPT论文中的RLHF
三大核心功能
DeepSpeed-Chat具有以下三大核心功能:
(i)简化 ChatGPT 类型模型的训练和强化推理体验:只需一个脚本即可实现多个训练步骤,包括使用 Huggingface 预训练的模型、使用 DeepSpeed-RLHF 系统运行 InstructGPT 训练的所有三个步骤、甚至生成你自己的类ChatGPT模型。此外,我们还提供了一个易于使用的推理API,用于用户在模型训练后测试对话式交互。
(ii)DeepSpeed-RLHF 模块:DeepSpeed-RLHF 复刻了 InstructGPT 论文中的训练模式,并确保包括a) 监督微调(SFT),b) 奖励模型微调和 c) 基于人类反馈的强化学习(RLHF)在内的三个步骤与其一一对应。此外,我们还提供了数据抽象和混合功能,以支持用户使用多个不同来源的数据源进行训练。
(iii)DeepSpeed-RLHF 系统:我们将 DeepSpeed 的训练(training engine)和推理能力(inference engine) 整合到一个统一的混合引擎(DeepSpeed Hybrid Engine or DeepSpeed-HE)中用于 RLHF 训练。DeepSpeed-HE 能够在 RLHF 中无缝地在推理和训练模式之间切换,使其能够利用来自 DeepSpeed-Inference 的各种优化,如张量并行计算和高性能CUDA算子进行语言生成,同时对训练部分还能从 ZeRO- 和 LoRA-based 内存优化策略中受益。DeepSpeed-HE 还能够自动在 RLHF 的不同阶段进行智能的内存管理和数据缓存。
DeepSpeed-RLHF 系统在大规模训练中具有无与伦比的效率,使复杂的 RLHF 训练变得快速、经济并且易于大规模推广:
高效性和经济性:DeepSpeed-HE 比现有系统快 15 倍以上,使 RLHF 训练快速且经济实惠。例如,DeepSpeed-HE 在 Azure 云上只需 9 小时即可训练一个 OPT-13B模型,只需 18 小时即可训练一个 OPT-30B模型。这两种训练分别花费不到 300 美元和 600 美元。
GPUs | OPT-6.7B | OPT-13B | OPT-30B | OPT-66B |
8x A100-40GB | 5.7 hours | 10.8 hours | 1.85 days | NA |
8x A100-80GB | 4.1 hours ($132) | 9 hours ($290) | 18 hours ($580) | 2.1 days ($1620) |
表 1. 单节点 8x A100:训练时长及预估的 Azure 费用。
卓越的扩展性:DeepSpeed-HE 能够支持训练拥有数千亿参数的模型,并在多节点多 GPU 系统上展现出卓越的扩展性。因此,即使是一个拥有 130 亿参数的模型,也只需 1.25 小时就能完成训练。而对于庞大的 拥有1750 亿参数的模型,使用 DeepSpeed-HE 进行训练也只需不到一天的时间。
GPUs | OPT-13B | OPT-30B | OPT-66B | OPT-175B |
64x A100-80G | 1.25 hours ($320) | 4 hours ($1024) | 7.5 hours ($1920) | 20 hours ($5120) |
表 2. 多节点 64x A100-80GB:训练时长及预估的 Azure 费用。
- 字符(token)
RLHF 训练流程
为了实现无缝的训练体验,我们遵循 InstructGPT 论文的方法,并在 DeepSpeed-Chat 中整合了一个端到端的训练流程,如图 1 所示。
图 1: DeepSpeed-Chat 的 RLHF 训练流程图示,包含了一些可选择的功能。
我们的流程包括三个主要步骤:
- 步骤1:监督微调(SFT) —— 使用精选的人类回答来微调预训练的语言模型以应对各种查询;
- 步骤2:奖励模型微调 —— 使用一个包含人类对同一查询的多个答案打分的数据集来训练一个独立的(通常比 SFT 小的)奖励模型(RW);
- 步骤3:RLHF 训练 —— 利用 Proximal Policy Optimization(PPO)算法,根据 RW 模型的奖励反馈进一步微调 SFT 模型。
在步骤3中,我们提供了两个额外的功能,以帮助提高模型质量:
- 指数移动平均(EMA) —— 可以选择基于 EMA 的检查点进行最终评估
- 混合训练 —— 将预训练目标(即下一个单词预测)与 PPO 目标混合,以防止在像 SQuAD2.0 这样的公开基准测试中的性能损失
这两个训练功能,EMA 和混合训练,常常被其他的开源框架所忽略,因为它们并不会妨碍训练的进行。然而,根据 InstructGPT,EMA 通常比传统的最终训练模型提供更好的响应质量,而混合训练可以帮助模型保持预训练基准解决能力。因此,我们为用户提供这些功能,以便充分获得 InstructGPT 中描述的训练体验,并争取更高的模型质量。
除了与 InstructGPT 论文高度一致外,我们还提供了一项方便的功能,以支持研究人员和从业者使用多个数据资源训练他们自己的 RLHF 模型:
- 数据抽象和混合能力:DeepSpeed-Chat 能够使用多个不同来源的数据集训练模型以获得更好的模型质量。它配备了(1)一个抽象数据集层,以统一不同数据集的格式;以及(2)数据拆分/混合功能,以便多个数据集在 3 个训练阶段中被适当地混合然后拆分。
在我们之前的章节中,你可以看到使用整个 DeepSpeed-Chat 训练模型在多轮对话中的表现。
Hybrid Engine
- training engine and inference engine
实战实验
pip install deepspeed>=0.9.0
git clone https://github.com/microsoft/DeepSpeedExamples.git
cd DeepSpeedExamples/applications/DeepSpeed-Chat/
pip install -r requirements.txt
python train.py --actor-model facebook/opt-13b --reward-model facebook/opt-350m --deployment-type single_node
$ python chatbot.py --path ../output/step3-models/1.3b/actor
[2023-08-21 06:47:15,917] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)
Enter input (type 'quit' to exit, 'clear' to clean memory):
------------------------------ Round 1 ------------------------------
Human:
Assistant: What are some ways to help a friend who is struggling with their mental health?
Enter input (type 'quit' to exit, 'clear' to clean memory): Who are you?
------------------------------ Round 2 ------------------------------
Human:
Assistant: What are some ways to help a friend who is struggling with their mental health?
Human: Who are you?
Assistant: I am a mental health professional. I can help you with some of the things you mentioned.
Enter input (type 'quit' to exit, 'clear' to clean memory): Coule you tell a funny story to me?
------------------------------ Round 3 ------------------------------
Human:
Assistant: What are some ways to help a friend who is struggling with their mental health?
Human: Who are you?
Assistant: I am a mental health professional. I can help you with some of the things you mentioned.
Human: Coule you tell a funny story to me?
Assistant: Sure! Here are some funny stories about mental health:
- A friend of mine was having a hard time dealing with her depression. She was having trouble sleeping and was having trouble focusing. She was also having trouble staying focused on her studies. She was struggling to stay on track with her studies. She was struggling to stay focused on her studies. She was struggling to stay focused on her studies. She was struggling to stay focused on her studies. She was struggling to stay focused on her studies. She was struggling to stay focused on her studies. She was struggling to stay focused on