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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,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)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
26天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从理论到实践的旅程
本文旨在为读者提供一个关于机器学习领域的全面概述,涵盖了基本概念、关键技术、实际应用以及未来发展趋势。通过深入浅出的方式,引导读者理解机器学习的核心原理,并通过具体案例展示其在现实世界中的应用价值。文章不仅探讨了机器学习的理论基础,还着重介绍了几种主要的机器学习算法,并分析了它们在不同场景下的适用性。同时,本文也对机器学习面临的挑战和未来的发展方向进行了前瞻性的讨论。
25 0
|
26天前
|
机器学习/深度学习 运维 监控
智能化运维的崛起:机器学习在IT管理中的实践与挑战
本文深入探讨了智能化运维领域,特别是机器学习技术在IT管理中的应用。文章首先介绍了智能化运维的概念及其重要性,随后详细阐述了机器学习在故障预测、自动化响应和系统优化中的作用。同时,文章也指出了实施智能化运维时可能遇到的技术挑战和数据治理问题,并提出了相应的解决策略。最后,通过具体案例分析,展示了机器学习技术如何在实际运维中提高系统稳定性和效率。
|
2天前
|
机器学习/深度学习 人工智能 数据处理
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
探测外太空中的系外行星是天文学和天体物理学的重要研究领域。随着望远镜观测技术的进步和大数据的积累,科学家们已经能够观测到大量恒星的光度变化,并尝试从中识别出由行星凌日(行星经过恒星前方时遮挡部分光线)引起的微小亮度变化。然而,由于数据量巨大且信号微弱,传统方法难以高效准确地识别所有行星信号。因此,本项目旨在利用机器学习技术,特别是深度学习,从海量的天文观测数据中自动识别和分类系外行星的信号。这要求设计一套高效的数据处理流程、构建适合的机器学习模型,并实现自动化的预测和验证系统。
10 1
【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星
|
10天前
|
机器学习/深度学习 人工智能 算法
AI基础科普:机器学习入门与实践
本文全面介绍了机器学习及其在信用评分预测中的应用。首先概览了机器学习作为人工智能核心领域的重要性及其实现数字化转型的作用。接着定义了机器学习,并区分了监督、无监督和强化学习等主要类型。随后,通过一个具体的场景——利用Python与scikit-learn库构建逻辑回归模型来预测客户的信用等级,详细阐述了从数据准备、模型训练到评估的全过程。此外,还介绍了如何借助阿里云机器学习平台PAI进行云上的模型训练和部署。最后,通过总结逻辑回归算法和其在金融领域的应用,鼓励读者深入学习并实践AI技术,以适应快速发展的科技趋势。
51 2
AI基础科普:机器学习入门与实践
|
8天前
|
机器学习/深度学习 数据采集 分布式计算
构建一个高效的机器学习工作流:技术实践与优化策略
【8月更文挑战第12天】构建一个高效的机器学习工作流是一个复杂而持续的过程,需要综合考虑数据、模型、算法、平台等多个方面。通过遵循上述步骤和优化策略,可以显著提高机器学习项目的开发效率和质量,为业务带来更大的价值。未来,随着技术的不断进步和应用场景的不断拓展,我们有理由相信机器学习工作流将变得更加高效、智能和灵活。
|
9天前
|
机器学习/深度学习 数据采集 人工智能
理解并应用机器学习算法:从技术基础到实践应用
【8月更文挑战第10天】机器学习算法的应用已经深入到我们生活的方方面面,理解和掌握机器学习算法对于数据科学家、工程师乃至普通从业者来说都至关重要。通过本文的介绍,希望大家能够对机器学习有一个基本的认识,并学会如何将其应用于实际问题中。当然,机器学习是一个不断发展和演变的领域,只有不断学习和实践,才能跟上时代的步伐。
|
20天前
|
机器学习/深度学习 数据采集 人工智能
AI技术实践:利用机器学习算法预测房价
人工智能(Artificial Intelligence, AI)已经深刻地影响了我们的生活,从智能助手到自动驾驶,AI的应用无处不在。然而,AI不仅仅是一个理论概念,它的实际应用和技术实现同样重要。本文将通过详细的技术实践,带领读者从理论走向实践,详细介绍AI项目的实现过程,包括数据准备、模型选择、训练和优化等环节。
118 3
|
24天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到实践
在这篇文章中,我们将深入探讨机器学习的理论基础和实际应用。我们将从定义机器学习开始,然后讨论其工作原理,最后通过一些实际案例来展示机器学习如何被应用在现实世界中。无论你是机器学习的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和见解。
19 1
|
29天前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。
|
19天前
|
机器学习/深度学习 数据可视化 TensorFlow
探索机器学习模型的可视化:从理论到实践
【7月更文挑战第31天】本文将深入探讨如何通过可视化技术来理解和解释复杂的机器学习模型。我们将介绍多种可视化工具和方法,并通过实际代码示例展示如何应用这些技术来揭示模型的内部工作原理。文章旨在为读者提供一种直观的方式来理解、调试和优化他们的机器学习模型。
14 0

相关产品

  • 人工智能平台 PAI