一、DPO的大模型的技术点
直接偏好优化(Direct Preference Optimization,DPO)是当前将大型语言模型(LLM)与人类偏好对齐的热门方法之一。借助 LoRA 和 QLoRA 等参数高效微调技术,我们可以在单GPU卡上对拥有80 亿参数的模型(如 Llama 3.1 8B 和 Qwen2.5 7B)进行 DPO 训练,当然训练序列可能较短。但如果更大的模型,比如72B,就需要使用多GPU卡。
技术点
举个例子,假设我们想在一台拥有 8 块 H100 GPU(总共 640 GB 显存)的机器上,对一个 700 亿参数的模型进行 DPO 训练。我们需要考虑以下几点:
-
策略模型(Policy Model):我们要训练的模型,占用约 140 GB 的显存。
-
参考模型(Reference Model):DPO 需要一个参考模型,通常与策略模型结构相同,也占用约 140 GB 的显存。
这样,仅模型参数就已经用掉了 280 GB 的显存,大约是总显存的 43.75%。再加上优化器状态,比如使用 AdamW 优化器,每个参数会有两个额外的状态变量。如果这些状态变量以 16 位精度存储,会占用额外的 280 GB 显存。算下来,我们已经用了 560 GB 的显存,只剩下 80 GB 了。这些剩余的显存还要用于存储激活值和梯度。如果不采取特殊的方法,单靠一台机器恐怕无法训练。
二、微调并行化
我们可以使用 PyTorch 的 Fully Sharded Data Parallel(FSDP)技术,配合像 LoRA 和 QLoRA 这样的参数高效微调方法。FDSP类似于DeepSpeed的ZeRO3技术。
FSDP 是一种分布式训练技术,它可以将模型的参数、优化器状态和梯度分片,并分布到多个设备上(比如 GPU)。在前向和反向传播过程中,只有需要的参数片会被加载到内存中,计算完成后就会释放。这大大降低了内存需求。
当然在更大模型的训练的时候,可以使用 DeepSpeed 。DeepSpeed 那样需要大量的内存来存储全精度的模型参数。
在测试中,我两种方法都尝试了。我的环境是两个H100的VM:
我先展示使用accelerate的方法。
需要指出的是,出于节省显存的目的,我设置的参考模型是通过LoRA adapter加载的,参考模型的基础模型和策略模型是一个。
启动训练:
#accelerate launch --config_file config_fsdp.yaml fsdp+QLoRA.py
三、 DPO 训练输出的各个字段解释
在 DPO 训练中,模型会被提供一组对话,每组包含相同的“提示(prompt)”或“问题(question)”,以及对应的“被选(chosen)”和“被拒(rejected)”回复。模型需要学习区分这些回复,倾向于生成高质量的“被选”回复。
DPO 训练数据解析
训练数据,包括:
-
来源(source):Airoboros
-
被选回复(chosen):包含多轮对话
-
被拒回复(rejected):包含多轮对话
-
提示(prompt):一段描述性的文字
-
问题(question):与提示相同的文字
有时候数据中,“prompt” 和 “question” 可能是相同的,这在某些训练设置中可能用作对话的起始点。
接下来,我结合训练数据,大致介绍DPO训练的过程和结果。
DPO(直接偏好优化)的核心思想
1.DP的核心目标
-
目标: 在不显式训练奖励模型的情况下,直接利用人类偏好数据对模型进行优化。
-
参考模型的引入: 为了防止模型在优化过程中偏离原有的语言能力,DPO 引入了参考模型(通常是初始模型的副本,参数固定不变),作为正则化项。
2. 训练数据
-
提示(Prompt): 用户输入,例如:“请解释水的三态变化。”
-
被选回复(Chosen Reply): 人类评估为高质量、符合预期的回复。
-
被拒回复(Rejected Reply): 人类评估为质量较低、不符合预期的回复。
3. 训练过程
步骤 1:计算对数概率
对于当前模型(参数为 θ):
- 被选回复的对数概率:
log_p_model_chosen = log( π_θ( chosen_reply | prompt ) )
- 被拒回复的对数概率:
log_p_model_rejected = log( π_θ( rejected_reply | prompt ) )
对于参考模型(参数固定):
- 被选回复的对数概率:
log_p_ref_chosen = log( π_ref( chosen_reply | prompt ) )
- 被拒回复的对数概率:
log_p_ref_rejected = log( π_ref( rejected_reply | prompt ) )
步骤 2:计算偏好差值
- 被选回复的偏好差值:
delta_chosen = log_p_model_chosen - log_p_ref_chosen`
- 被拒回复的偏好差值:
delta_rejected = log_p_model_rejected - log_p_ref_rejected
步骤 3:构建损失函数
- 损失函数的形式:
L(θ) = -log( exp( delta_chosen / β ) / [ exp( delta_chosen / β ) + exp( delta_rejected / β ) ] )
其中,β 是控制温度的超参数。
- 目标: 最小化损失函数 ( L(θ) ),使得模型更倾向于生成被选回复,而不是被拒回复。
4. 示例
以您的例子为例:
-
Prompt(提示): “请解释水的三态变化。”
-
Chosen Reply(被选回复):
“水有三种状态:固态、液态和气态。温度的变化会导致水在这些状态之间转化,例如冰融化成水,水蒸发成水蒸气。”
-
Rejected Reply(被拒回复):
“水是一种液体,在自然界中很常见。”
步骤:
1. 计算对数概率
-
log_p_model_chosen = -5
-
log_p_model_rejected = -7
-
log_p_ref_chosen = -6
-
log_p_ref_rejected = -6
-
假设性的数值(用于说明):
2. 计算偏好差值
-
delta_chosen = -5 - (-6) = 1
-
delta_rejected = -7 - (-6) = -1
3. 计算损失函数(β = 1)
- 计算分子:
exp( delta_chosen / β ) = exp(1) ≈ 2.718
- 计算分母:
exp( delta_chosen / β ) + exp( delta_rejected / β ) = exp(1) + exp(-1) ≈ 2.718 + 0.368 ≈ 3.086`
- 计算损失:
L(θ) = -log( 2.718 / 3.086 ) ≈ -log(0.880) ≈ 0.127`
- 损失较小,表示模型对被选回复的偏好已高于被拒回复。
4. 优化模型参数
- 通过反向传播,最小化损失 ( L(θ) ),进一步提高模型对被选回复的偏好。
5. 参考模型的作用
-
正则化效果: 防止模型过度偏离初始语言模型,保证生成文本的质量和多样性。
-
稳定训练过程: 提供一个固定的对照,使模型的更新更加平稳,避免发生梯度爆炸或消失。
6. 总结
-
DPO 训练过程: 模型利用
prompt
、chosen
、rejected
和参考模型,直接优化自身,使其生成的回复更符合人类偏好。 -
参考模型不可或缺: 它在损失函数中提供了正则化项,确保模型在学习人类偏好的同时,保持原有的语言能力和知识。
代码:
https://github.com/xinyuwei-david/david-share.git下的:
Deep-Learning/DPO-DeepSpeed-FSDP
如何系统学习掌握AI大模型?
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源
,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享
!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码
,免费领取【保证100%免费
】