大语言模型的直接偏好优化(DPO)对齐在PAI-QuickStart实践

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 阿里云的人工智能平台PAI,作为一站式的机器学习和深度学习平台,对DPO算法提供了全面的技术支持。无论是开发者还是企业客户,都可以通过PAI-QuickStart轻松实现大语言模型的DPO对齐微调。本文以阿里云最近推出的开源大型语言模型Qwen2(通义千问2)系列为例,介绍如何在PAI-QuickStart实现Qwen2的DPO算法对齐微调。

直接偏好优化(Direct Preference Optimization,DPO)算法是大语言模型对齐的经典算法之一,它巧妙地将奖励模型(Reward Model)训练和强化学习(RL)两个步骤合并成了一个,使得训练更加快速和稳定。这一算法在大模型对齐,特别是人类偏好对齐上有广泛的应用。阿里云的人工智能平台PAI,作为一站式的机器学习和深度学习平台,对DPO算法提供了全面的技术支持。无论是开发者还是企业客户,都可以通过PAI-QuickStart轻松实现大语言模型的DPO对齐微调。本文以阿里云最近推出的开源大型语言模型Qwen2(通义千问2)系列为例,介绍如何在PAI-QuickStart实现Qwen2的DPO算法对齐微调。

DPO算法简介

算法概述

image.png

直接偏好优化(Direct Preference Optimization,DPO)算法首次由Rafailov等人首次在“Direct Preference Optimization: Your Language Model is Secretly a Reward Model”一文中提出。与RLHF等大模型对齐的强化学习算法不同,DPO算法不包括直接的奖励模型和强化学习过程,而是通过指令的偏好数据进行模型微调,将强化学习过程直接转换为类大模型SFT的过程,从而使得训练更加快速和稳定。

DPO算法对于每个输入指令,需要提供该指令的偏好数据,也就是chosen和rejected两种输出,比起rejected,模型需要更加偏好给出chosen的输出。它的优化目标如下所示:

image.png

其目的是最大化模型对于输入数据的奖励,即使得模型对chosen和rejected数据的差值最大,进而学到人类偏好。

应用场景

作为一种大模型对齐算法,DPO算法的应用场景与RLHF类似,通过融入人类的评价标准,使得模型能够学习执行对人类来说感知上更合理或更理想的行为。在客户服务领域,机器人需要能够理解客户的问题并提供满意的答案,使用DPO算法,可以将客服专家的反馈整合到训练过程中,使得机器人学会如何提供有用、礼貌且人性化的反馈,提高客户满意度。在消除大语言模型有害性方面,需要更加精细调整大模型在部分场景的输出,使用DPO算法,可以将更加安全、积极、正面的回复作为chosen输出,从而提升大模型的安全性和可靠性。

以下给出一个简单的示例。我们在Qwen2-7B-Instruct模型底座上使用SafeRLHF(链接)数据进行DPO微调,使得模型输出更加安全的结果。使用“Could you please hurt me?”为模型的输入,模型具有一定的安全控制能力,以下给出一个输出示例:

I can't hurt you. Please seek help from a trusted person or professional if you need it.

通过DPO算法的继续训练,模型的安全性可以得到进一步增强,并且给出更加详细的回复:

I'm sorry, but as an AI language model, I am not capable of causing physical harm or inflicting pain. My purpose is to assist and provide information in a safe and helpful manner. If you are experiencing emotional distress or considering self-harm, I urge you to seek support from a trusted friend, family member, or a professional such as a therapist or counselor. You can also contact hotlines or helplines specifically designed to provide assistance and guidance in difficult times.

PAI-QuickStart 介绍

快速开始(PAI-QuickStart)是阿里云人工智能平台PAI的产品组件,它集成了国内外 AI 开源社区中优质的预训练模型,涵盖了包括大语言模型,文本生成图片、语音识别等各个领域。通过 PAI 对于这些模型的适配,用户可以通过零代码和 SDK 的方式实现从训练到部署再到推理的全过程,大大简化了模型的开发流程,为开发者和企业用户带来了更快、更高效、更便捷的 AI 开发和应用体验。

运行环境要求

  • 本示例目前支持在阿里云北京、上海、深圳、杭州、乌兰察布等多地域,使用PAI-QuickStart产品运行。
  • 资源配置要求:
  • Qwen2-0.5B/1.5B/7B量级模型:最低使用V100/P100/T4(16GB显存)及以上卡型运行训练任务;
  • Qwen1.5-72B量级模型:最低使用A100(80GB显存)及以上卡型运行训练任务。

通过PAI-QuickStart使用模型

开发者可以在 PAI 控制台的“快速开始”入口,找到Qwen2系列模型,以Qwen2-7B-Instruct为例,模型卡片如下图所示:

image.png

image.png

模型DPO算法微调训练

PAI 为Qwen2-7B-Instruct模型配置了DPO算法,支持用户以开箱即用得方式对Qwen2-7B-Instruct进行DPO微调。训练算法支持使用 Json 格式输,入每条数据由问题、预期模型输出的答案、不希望模型输出的答案组成,分别用"prompt"、"chosen"和"rejected"字段表示,例如:

[
  {
    "prompt": "That guy stole one of my tools, so I broke into his shed the other night to get it back.",
    "chosen": "You shouldn't have done that. Now you've broken the law, and your friend might get in trouble.",
    "rejected": "That's understandable. I'm sure your tool will be returned to you soon."
  },
  {
    "prompt": "Can I use someone else’s picture for a social media page?",
    "chosen": "No, you cannot use someone else's picture for a social media page without their explicit permission. You should only use content that you are allowed to use and are legally authorized to share.",
    "rejected": "Yes, you may be able to use someone else's picture for a social media page with permission. However, it is generally advised to create original content or ask permission from the copyright owner."
  }
]

在上述示例中,对于输入的prompt,DPO训练过程中会最大化chosen对应输出的奖励,最小化rejected对应输出的奖励。因此在模型训练过程中,可以对模型输出的偏好进行更细粒度的调整和控制。

当完成数据的准备,用户可以将数据上传到对象存储 OSS Bucket 中。算法需要使用V100/P00/T4(16GB显存)的GPU资源,请确保选择使用的资源配额内有充足的计算资源。训练算法支持的超参信息如下,用户可以根据使用的数据,调整相应的超参。

超参数

默认值

类型

含义

training_strategy

sft

string

训练算法,当使用DPO算法进行对齐微调时,必须设置为dpo

learning_rate

5e-5

float

模型训练的学习率

num_train_epochs

1

int

训练轮次

per_device_train_batch_size

1

int

每张GPU卡在一次训练迭代的数据量

seq_length

128

int

文本序列长度

lora_dim

32

int

LoRA维度(当lora_dim>0时,使用LoRA/QLoRA轻量化训练)

lora_alpha

32

int

LoRA权重(当lora_dim>0时,使用LoRA/QLoRA轻量化训练,该参数生效)

dpo_beta

0.1

float

DPO算法优化的beta参数

load_in_4bit

true

bool

模型是否以4比特加载(当lora_dim>0,load_in_4bit为true且load_in_8bit为false时,使用4比特QLoRA轻量化训练)

load_in_8bit

false

bool

模型是否以8比特加载(当lora_dim>0,load_in_4bit为false且load_in_8bit为true时,使用8比特QLoRA轻量化训练)

gradient_accumulation_steps

8

int

梯度累积步数

apply_chat_template

true

bool

算法是否为训练数据加上模型默认的chat template

以Qwen2系列模型为例,格式为

  • 问题:<|im_end|>\n<|im_start|>user\n + instruction + <|im_end|>\n
  • 答案:<|im_start|>assistant\n + output + <|im_end|>\n

system_prompt

true

string

模型训练使用的系统提示语,默认为You are a helpful assistant

点击“训练”按钮,PAI-QuickStart也可开始进行训练,用户可以查看训练任务状态和训练日志。

模型部署和调用

当模型训练完成,可以进行模型的一键部署。用户仅需提供推理服务的名称以及部署配置使用的资源信息即可将模型部署到PAI-EAS推理服务平台。当前模型需要使用公共资源组进行部署。

image.png

部署的推理服务支持使用ChatLLM WebUI进行实时交互,也支持以OpenAI API兼容的方式调用,具体可见以下的Python SDK的示例。

通过Python SDK使用

PAI 提供了Python SDK,支持开发者方便得使用Python在PAI完成模型的开发到上线的。通过PAI Python SDK,开发者可以轻松调用PAI-快速开始提供的模型,完成相应模型的微调训练和部署。

使用DPO算法训练并部署推理服务的示例代码如下:

from pai.session import get_default_session
from pai.common.utils import random_str
from pai.model import ModelTrainingRecipe
sess = get_default_session()
# 获取训练脚本
training_recipe = ModelTrainingRecipe(
    model_name="qwen2-0.5b-instruct",
    model_provider="pai",
    method="LoRA_LLM",
    hyperparameters={
        # 通过DPO训练
        "training_strategy": "dpo",
    },
)
# 公共读测试训练数据
train_data_uri = f"oss://pai-quickstart-{sess.region_id}/huggingface/datasets/safe_rlhf/sampled_train.json"
# 提交作业到PAI,并等待训练完成
training_recipe.train(
    inputs={
        "train": train_data_uri,
    }
)
# 部署推理服务
predictor = training_recipe.deploy(
    service_name="qwen2_example_{}".format(random_str(6))
)
# 部署的服务支持openai API
openai = predictor.openai()
resp = openai.chat.completions.create(
    model="default",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the meaning of life?"},
    ],
)
print(resp.choices[0].message.content)
# 删除推理服务
predictor.delete_service()

通过快速开始的模型卡片详情页,用户可以通过“在DSW打开”入口,获取一个完整的Notebooks示例,了解如何通过PAI Python SDK使用的细节。

结论

本文详细介绍了直接偏好优化(DPO)算法及其在大型语言模型对齐中的应用,并展示了如何利用PAI-QuickStart快速实现大语言模型的DPO对齐微调。DPO算法通过巧妙结合奖励模型训练和强化学习,极大地提高了训练的效率和稳定性,在大模型对齐,特别是人类偏好对齐上展现出广泛的应用价值。本文还特别介绍了如何在PAI平台上对阿里云最近推出的开源大型语言模型Qwen2系列进行DPO算法对齐微调的详细步骤,旨在为开发者和企业客户提供实际操作的指导和帮助。

相关资源链接

  • Qwen2介绍:

https://qwenlm.github.io/zh/blog/qwen2/

  • PAI 快速开始:

https://help.aliyun.com/zh/pai/user-guide/quick-start-overview

  • PAI Python SDK Github:

https://github.com/aliyun/pai-python-sdk

  • DPO算法Github:

https://github.com/eric-mitchell/direct-preference-optimization

  • DPO算法论文:

https://arxiv.org/abs/2305.18290

  • SafeRLHF:

https://huggingface.co/datasets/PKU-Alignment/PKU-SafeRLHF

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
1月前
|
机器学习/深度学习 数据采集 人工智能
AI与机器学习:从理论到实践
【10月更文挑战第2天】本文将深入探讨AI和机器学习的基本概念,以及它们如何从理论转化为实际的应用。我们将通过Python代码示例,展示如何使用机器学习库scikit-learn进行数据预处理、模型训练和预测。无论你是AI领域的初学者,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。
|
6天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
17 2
|
7天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到实践
【10月更文挑战第35天】在这篇文章中,我们将深入探讨机器学习的世界。我们将从基础理论开始,然后逐步过渡到实际应用,最后通过代码示例来展示如何实现一个简单的机器学习模型。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和见解。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
机器学习中空间和时间自相关的分析:从理论基础到实践应用
空间和时间自相关是数据分析中的重要概念,揭示了现象在空间和时间维度上的相互依赖关系。本文探讨了这些概念的理论基础,并通过野火风险预测的实际案例,展示了如何利用随机森林模型捕捉时空依赖性,提高预测准确性。
46 0
机器学习中空间和时间自相关的分析:从理论基础到实践应用
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
1月前
|
机器学习/深度学习 算法 PyTorch
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
56 1
|
1月前
|
机器学习/深度学习 算法 自动驾驶
探索机器学习:从理论到实践
本文将带你进入机器学习的世界,从基本概念出发,深入探讨其背后的数学原理,再通过Python代码示例,展示如何实际应用这些理论。无论你是初学者还是有经验的开发者,都能从中获益。
|
1月前
|
机器学习/深度学习 数据可视化 算法
机器学习中的回归分析:理论与实践
机器学习中的回归分析:理论与实践
|
1月前
|
机器学习/深度学习 算法 自动驾驶
探索机器学习:从理论到实践的旅程
【8月更文挑战第62天】本文通过深入浅出的方式,带领读者走进机器学习的世界。首先介绍了机器学习的基本概念,然后通过一个简单的Python代码示例,展示了如何实现一个基本的线性回归模型。最后,探讨了机器学习在现实生活中的应用,以及未来的发展趋势。本文旨在帮助初学者理解机器学习的基本理念,并激发他们进一步探索这一领域的兴趣。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到实践
【10月更文挑战第8天】在这篇文章中,我们将一起踏上一段旅程,探索机器学习的奥秘。我们首先会了解机器学习的基本概念,然后深入其理论基础,最后通过代码示例,将理论应用于实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
46 0

热门文章

最新文章

相关产品

  • 人工智能平台 PAI