InstructGPT高效实践——【DeepSpeed

目录0.3 版块相关问题 后续
前言
早些时候微软发布了遵从训练逻辑的训练框架-Chat,旨在通过良好的生态降低类模型昂贵的训练成本,为了能更直接地理解有关技术原理,我对其中实现训练相关的代码进行了详细剖析,考虑到目前还没有太多相关文章对此进行过深入介绍,因此我将在本博客中探讨这个框架的实现细节,以帮助有需要的人能更好地理解和使用它 。另外,我也非常欢迎大家在评论区分享出自己对这个框架的看法以及使用经验,或是提出对本文的建议 。
框架源码地址:
如果你只是想要知道如何使用自定义的数据集快速上手-Chat训练,该系列内容对你来说可能过于繁杂,那么完全可以期待一下我后续将要更新的快速上手引导(已经在新建文件夹了哈哈) 。
如果你只对具体的训练细节感兴趣,该篇主要讲述的数据集内容可能不是你所想要了解的,请直接跳至【中篇】进行阅读 。
本文将根据-Chat的数据集设计以及三个训练阶段(可分别简称、、)共四个部分,将主要内容大体划分为四个版块、三个篇章,而每个版块都会以动态的时序图视角展示一套完整的工作流,然后深入详解其中与所述理论相关的代码实现,最后还将针对相关阶段涉及的一些具体问题加以阐述,以此完成对一个阶段源码的解析 。在阅读过程中如果发现某些环节使你产生困惑,不妨跳转至【版块相关问题】,或许可以从中获得启发,如果你无法通过该部分找到所需答案,请随时留下你的评论,以便进行共同交流 。
此外,本文的重点在于源码解析,其中所涉及的背景知识、原理等将不再做过多推导式叙述 。倘若你有原理基础,那么这篇文章肯定能够让你对各种相关原理如具体的RM结构、RM的训练方式、PPO迭代的具体顺序等实现细节拥有更加深刻的理解,并获得一定的实践启发;但假如你刚开始了解这项技术,也不必担心,我会使用尽可能简练的描述、尽可能直球的例子来对相应的部分进行说明 。
本篇为上中下三篇章中的【上篇】,主要针对的数据集管理进行介绍 。提供了良好的数据流管道对数据集进行了规范化处理和标准化操作,用户在了解其中的细节后可以更加高效地实现模型训练 。
0 基本概念与数据集设计
现有的训练框架多数都是基于论文中所介绍的来实现,但一些更具体的细节,比如数据集的处理、奖励取值设计等,论文中没有进一步阐述,故而不同框架在某些细节的实现上会存在些许差异,因此在开始尝试使用-Chat前我认为还是有必要了解一些框架内部既定的“范式”,这对后续理解某些具体细节将会有所帮助 。
0.1 提出的训练三段式
提出了大型问答模型的训练范式,分别为有监督微调训练、基于人类偏好的奖励模型训练、基于人类偏好的强化学习训练,最终模型将因此具备“根据用户输入,生成符合人类偏好答复”的能力 。
阶段相关模型赋能
具备基本生成能力的基座模型(通常为)
有监督微调模型(SFT)
使用“-”数据(通俗含义上的“问答对”)对基座进行训练,基座将获得“根据指令生成出对应响应”的能力 。
奖励模型(RM)
使用具有偏好评价的“-”数据(问答对)以及排序目标对预选模型进行训练,将得到具备“为指令数据做出人类偏好分值评估”能力的奖励模型 。
SFT、Actor、RM、
使用“”数据(通俗含义上的“问句”),以第1、第2阶段训练得到的模型作为基线进行强化学习训练,最终得到具备“根据用户输入,生成符合人类偏好答复”能力的Actor模型 。