目录
- 前言
- 1 phase-1: Supervised Finetuning
-
- 1.1 训练数据样例
- 1.2 训练过程
- 1.3 关键代码详解
-
- 1.3.1 基座模型结构
- 1.3.2 LoRA结构及其正向传播
- 1.3.3 phase1的指标评估
- 1.4 实例测试
- 1.5 相关拓展
-
- 1.5.1 多轮对话性能
- 1.5.2 本阶段训练更倾向过拟合
- 1.6 版块相关问题
- 2 phase-2: Reward Model Finetuning
-
- 2.1 训练数据样例
- 2.2 训练过程
- 2.3关键代码详解
-
- 2.3.1 RM具体结构
- 2.3.2 DataCollator及RM所需输入形式
- 2.3.3 RM的正向传播及成对排序损失
- 2.3.4 phase2的指标评估
- 2.4 实例测试
- 2.5 相关拓展
-
- 2.5.1 对话奖励聚合设计
- 2.6 板块相关问题
- 后续
前言
本篇为上中下三篇章的【中篇】,接续自【上篇】。主要针对三阶段训练中第一阶段、第二阶段较为重要的部分源码进行详解。
尽管官方的上手文档均是以sh文件为例进行演示,且源码中确实也提供了便捷的sh文件供直接使用,但我仍建议通过各阶段的main.py文件(applications/DeepSpeed-Chat/training/step*/main.py
)来运行训练,大致原因有二:其一是因为官方预设的sh文件调用了applications/DeepSpeed-Chat/train.py
,其中对模型选型等参数进行了严格的限制,虽然提高了代码安全性,但对于以学习为目的的探索来说失去了一定的灵活性(见下方代码块),直接通过main.py进行传参即可实现绕过限制、使用更轻量的模型进行训练;其二是因为main.py中的传参相对更接近底层,更有助于深入理解代码。
因此各阶段的解析我都将在其main.py文件的基础上进行。
# applications/DeepSpeed-Chat/train.py
parser.add_argument(
"--actor-model",
# actor模型只能选用“facebook/opt”系列的1.3b~66b
# 但即使是1.3b也仍对设备显存有一定的要求
# 对于使用较弱设备进行学习的用户不是很友好
type=lambda x: x.replace("facebook/opt-", ""),
default="1.3b",
choices=("1.3b", "6.7b", "13b", "66b"),
help="Which facebook/opt-* model to use for Actor (step 1)",
)
1 phase-1: Supervised Finetuning
1.1 训练数据样例
数据格式名称 | 说明 | 样例 |
---|---|---|
chosen_sentence | 人类偏好的完整对话,由prompt衔接偏好应答chosen得到,适用于phase1和phase2。 | “Human: Please tell me about Microsoft in a few sentence? Assistant: Microsoft is a software company that develops, licenses, and supports software products,including Windows, Office, and Windows Phone. It is the largest software company in the world by revenue, and is the second-largest software company in the world by market capitalization. Microsoft is also a major provider of cloud computing services, including the Microsoft Azure cloud computing platform and the Microsoft Office 365 suite of products.” |
模型将基于自回归语言建模任务对形如上述样例的数据进行训练,最后将得到具备更佳对话能力的模型SFT/ref(Supervised Fine-Tuning)。
更多的数据格式可见【上篇】的“1.2.1 数据格式基本概念”。
1.2 训练过程
在此简单讲述UML时序图的元素含义:
- 箭头表示信息传递:实线表示调用,虚线表示返回;
- alt表示假设分支,其后方“[]”中的内容表示“条件”;
- loop表示循环;
- 淡蓝色区域即为高亮部分。
- applications/DeepSpeed-Chat/training/step1_supervised_finetuning/main.py
发布评论