大語言模型的直接偏好優化(DPO)對齊在PAI-QuickStart實踐

直接偏好優化(Direct Preference Optimization,DPO)算法是大語言模型對齊的經典算法之一,它巧妙地將獎勵模型(Reward Model)訓練和強化學習(RL)兩個步驟合并成了一個,使得訓練更加快速和穩定。這一算法在大模型對齊,特別是人類偏好對齊上有廣泛的應用。阿里云的人工智能平臺PAI,作為一站式的機器學習和深度學習平臺,對DPO算法提供了全面的技術支持。無論是開發者還是企業客戶,都可以通過PAI-QuickStart輕松實現大語言模型的DPO對齊微調。本文以阿里云最近推出的開源大型語言模型Qwen2(通義千問2)系列為例,介紹如何在PAI-QuickStart實現Qwen2的DPO算法對齊微調。

DPO算法簡介

算法概述

直接偏好優化(Direct Preference Optimization,DPO)算法首次由Rafailov等人首次在“Direct Preference Optimization: Your Language Model is Secretly a Reward Model”一文中提出。與RLHF等大模型對齊的強化學習算法不同,DPO算法不包括直接的獎勵模型和強化學習過程,而是通過指令的偏好數據進行模型微調,將強化學習過程直接轉換為類大模型SFT的過程,從而使得訓練更加快速和穩定。

DPO算法對于每個輸入指令,需要提供該指令的偏好數據,也就是chosen和rejected兩種輸出,比起rejected,模型需要更加偏好給出chosen的輸出。它的優化目標如下所示:

其目的是最大化模型對于輸入數據的獎勵,即使得模型對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為例,模型卡片如下圖所示:

模型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資源,請確保選擇使用的資源配額內有充足的計算資源。訓練算法支持的超參信息如下,用戶可以根據使用的數據,調整相應的超參。

點擊“訓練”按鈕,PAI-QuickStart也可開始進行訓練,用戶可以查看訓練任務狀態和訓練日志。

模型部署和調用

當模型訓練完成,可以進行模型的一鍵部署。用戶僅需提供推理服務的名稱以及部署配置使用的資源信息即可將模型部署到PAI-EAS推理服務平臺。當前模型需要使用公共資源組進行部署。

部署的推理服務支持使用ChatLLM WebUI進行實時交互,也支持以OpenAI API兼容的方式調用,具體可見以下的Python SDK的示例。

通過Python SDK使用

PAI 提供了Python SDK,支持開發者方便得使用Python在PAI完成模型的開發到上線的。通過PAI Python SDK,開發者可以輕松調用PAI-快速開始提供的模型,完成相應模型的微調訓練和部署。

部署推理服務的示例代碼如下:

from pai.model import RegisteredModel
from openai import OpenAI# 獲取PAI提供的模型
model = RegisteredModel(model_name="qwen2-7b-instruct",model_provider="pai"
)# 直接部署模型
predictor = model.deploy(service="qwen2_7b_instruct_example"
)# 構建openai client,使用的OPENAI_BASE_URL為: <ServiceEndpint> + "/v1/"
openai_client: OpenAI = predictor.openai()# 通過openai SDK調用推理服務
resp = openai_client.chat.completions.create(messages=[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "What is the meaning of life?"},],# 默認的model name為"default"model="default"
)print(resp.choices[0].message.content)# 測試完成之后,刪除推理服務predictor.delete_service()

微調訓練的示例代碼如下:

# 獲取模型的微調訓練算法
est = model.get_estimator()# 獲取PAI提供的公共讀數據和預訓練模型
training_inputs = model.get_estimator_inputs()# 使用用戶自定義數據
# training_inputs.update(
#     {
#         "train": "<訓練數據集OSS或是本地路徑>",
#         "validation": "<驗證數據集的OSS或是本地路徑>"
#     }
# )# 使用默認數據提交訓練任務
est.fit(inputs=training_inputs
)# 查看訓練產出模型的OSS路徑
print(est.model_data())

通過快速開始的模型卡片詳情頁,用戶可以通過“在DSW打開”入口,獲取一個完整的Notebooks示例,了解如何通過PAI Python SDK使用的細節。

結論

本文詳細介紹了直接偏好優化(DPO)算法及其在大型語言模型對齊中的應用,并展示了如何利用PAI-QuickStart快速實現大語言模型的DPO對齊微調。DPO算法通過巧妙結合獎勵模型訓練和強化學習,極大地提高了訓練的效率和穩定性,在大模型對齊,特別是人類偏好對齊上展現出廣泛的應用價值。本文還特別介紹了如何在PAI平臺上對阿里云最近推出的開源大型語言模型Qwen2系列進行DPO算法對齊微調的詳細步驟,旨在為開發者和企業客戶提供實際操作的指導和幫助。

相關資源鏈接

  • Qwen2介紹:

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

  • PAI 快速開始:

PAI快速開始功能的介紹/計費/權限/開通/使用_人工智能平臺 PAI(PAI)-阿里云幫助中心

  • PAI Python SDK Github:

GitHub - aliyun/pai-python-sdk: A HighLevel Python SDK helps you to train and deploy your model on PAI.

  • DPO算法Github:

GitHub - eric-mitchell/direct-preference-optimization: Reference implementation for DPO (Direct Preference Optimization)

  • DPO算法論文:

https://arxiv.org/abs/2305.18290

  • SafeRLHF:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42423.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 給數據表增加一列,一定會鎖表嗎?

在 MySQL 中&#xff0c;給數據表增加一列&#xff0c;是否會鎖表取決于使用的存儲引擎以及 MySQL 的版本。 InnoDB 存儲引擎在 MySQL 之前的行為 之前版本的 MySQL 中&#xff0c;如果你使用 ALTER TABLE 命令來增加一列&#xff0c;對于使用 InnoDB 存儲引擎的表&#xff0…

【算法】單調隊列單調棧

一、單調隊列 用來維護一段區間內的最大值或最小值&#xff0c;例如滑動窗口、區間最值等問題。 基本概念 單調隊列是一種存儲數據的隊列&#xff0c;其中元素的順序是單調遞增或單調遞減的。在算法競賽中&#xff0c;我們一般使用兩個單調隊列&#xff0c;一個維護單調遞增序…

【版面費優惠丨ACM獨立出版丨接受全文摘要投稿】2024年生物醫藥和智能技術國際學術會議(ICBIT 2024,8月23-25)

“2024年生物醫藥和智能技術國際學術會議&#xff08;ICBIT 2024&#xff09;”擬定于2024年8月23-25日于珠海召開。近年來&#xff0c;智能技術已經逐漸走入生物醫藥領域&#xff0c;并在與生物醫藥領域的融合創新中凸顯出巨大的發展潛力和社會價值。人工智能技術在生物醫藥領…

水處理基本知識

RO反滲透程序設計軟件下載 水處理基本知識 純水制備的核心工藝 核心工藝&#xff1a;純水&#xff08;超純水&#xff09;制備的主要處理工藝&#xff0c;結合前處理&#xff08;預處理&#xff09;工藝&#xff0c;輔助工藝及特殊工藝&#xff0c;組成完整的純水制備工藝。結…

優質作品集秘訣:8個技巧讓你的作品脫穎而出

制作一個高質量的投資組合不僅可以展示你的技能和創造力&#xff0c;還可以幫助你在求職和職業發展中脫穎而出。如何制作高質量的投資組合&#xff1f;今天給大家講述作品集的 8 個實用技能&#xff0c;幫助你制作出令人印象深刻的作品集&#xff01; 1、精選作品 并不是所有…

飛睿智能會議室靜止雷達人體檢測傳感器,實時監測使用狀態,有人、無人智能感應節能減

在這個科技日新月異的時代&#xff0c;每一個細微的創新都可能成為推動行業創新的關鍵力量。今天&#xff0c;讓我們聚焦于一項看似不起眼卻實則潛力無限的技術——飛睿智能靜止雷達人體檢測傳感器&#xff0c;以及它在會議室這一商務交流核心區域中的巧妙應用。想象一下&#…

前端Canvas入門——怎么用Canvas畫一些簡單的圖案

Canvas作為前端的畫圖工具&#xff0c;其實用途還是蠻廣泛的&#xff0c;但是很多前端學習課程其實都很少涉及到這塊內容。 于是乎&#xff0c;就寫下這個了。 當然啦&#xff0c;目前還在學習摸索中。 一些實戰代碼&#xff0c;僅供參考&#xff1a; <canvasid"ctx&…

EtherCAT總線冗余讓制造更安全更可靠更智能

冗余定義 什么是總線冗余功能&#xff1f;我們都知道&#xff0c;EtherCAT現場總線具有靈活的拓撲結構&#xff0c;設備間支持線型、星型、樹型的連接方式&#xff0c;其中線型結構簡單、傳輸效率高&#xff0c;大多數的現場應用中也是使用這種連接方式&#xff0c;如下圖所示…

【Qt課設】基于Qt實現的中國象棋

一、摘 要 本報告討論了中國象棋程序設計的關鍵技術和方法。首先介紹了中國象棋的棋盤制作&#xff0c;利用Qt中的一些繪畫類的函數來進行繪制。在創作中國象棋棋子方面&#xff0c;首先&#xff0c;我們先定義一下棋子類&#xff0c;將棋子中相同的部分進行打包&#xff0c;使…

idea推送到gitee 401錯誤

在idea上推送時遇到這樣的問題&#xff0c;解決方法如下&#xff1a; 在https://的后面加上 用戶名:密碼 然后再提交就ok啦&#xff01;

三、SpringMVC

三、SpringMVC 1、SpringMVC簡介 1.1、什么是MVC MVC是一種軟件架構的思想&#xff0c;將軟件按照模型、視圖、控制器來劃分 M&#xff1a;Model&#xff0c;模型層&#xff0c;指工程中的JavaBean&#xff0c;作用是處理數據 JavaBean分為兩類&#xff1a; 一類稱為實體…

c語言實戰-極簡掃雷

C語言/c寫的C語言實戰項目掃雷 結構比較清晰&#xff0c;僅供參考&#xff1a; 核心是掃雷的遞歸算法實現 上代碼: #include <stdio.h> #include <stdlib.h> #include <time.h>#define SIZE 10 #define MINES 15char board[SIZE][SIZE]; // 游戲棋盤// 初…

Oracle的主要特點是什么?應用場景有哪些?

主要特點&#xff1a; 高可靠性&#xff1a;Oracle數據庫具有高度的可靠性&#xff0c;能夠確保數據的安全和穩定性。 高性能&#xff1a;提供高性能的數據處理和查詢能力&#xff0c;可以處理大規模的數據量。 良好的擴展性&#xff1a;支持水平和垂直的擴展&#xff0c;可以輕…

CloudWatch Logs Insights 詳解

CloudWatch Logs Insights 是 AWS 提供的強大日志分析工具,允許您快速、交互式地搜索和分析日志數據。本文將詳細介紹使用 CloudWatch Logs Insights 所需的權限、常用查詢方法,以及一些實用的查詢示例。 1. 所需權限 要使用 CloudWatch Logs Insights,用戶需要具備以下 I…

代碼隨想錄-Day55

42. 接雨水 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 輸入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 輸出&#xff1a;6 解釋&#xff1a;上面是由數組 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高…

CentOS7二進制安裝和YUM安裝mongodb,服務器無法安裝5.0以上的 mongodb 數據庫報錯 Illegal instruction

文章目錄 MongoDB 安裝二進制安裝YUM 安裝 Tips:1、MongoDB安裝問題2、MongoDB登錄3、MongoDB排序時內存大小限制和創建索引4、創建用戶5、Java yaml使用密碼連接mongodb6、MongoDB增刪改查 MongoDB 安裝 二進制安裝 [rootmysql5-7 mongodb-6.0.4]# cat start.sh #!/bin/bash…

js使用proxy代理監聽控制事件

本文為proxy代理的實例應用&#xff0c;有關代理的內容可以參考&#xff1a; js語法---理解反射Reflect對象和代理Proxy對象 監聽事件 要監聽dom元素的事件&#xff0c;我們會采用回調觸發的方式來執行操作&#xff0c; 而觸發事件的過程很明顯是一個異步操作&#xff0c;異…

Docker 使用基礎(1)—鏡像倉庫

&#x1f3ac;慕斯主頁&#xff1a;修仙—別有洞天 ??今日夜電波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━?&#x1f49f;──────── 4:20 &#x1f504; ?? ? …

Pinia在vue項目中的使用

Pinia是Vue 3官方推薦的狀態管理模式&#xff0c;由尤雨溪創建并集成到了 Vue.js 中&#xff0c;它是一個輕量級、純粹基于函數的思想實現的應用狀態管理庫。Pinia的設計理念類似于Redux&#xff0c;但它更簡單易用&#xff0c;更適合于小型到中型的單文件組件應用。 在Vue 3項…

android13 固定U盤鏈接 SD卡鏈接 TF卡鏈接 硬盤鏈接

1.前言 有些客戶使用的應用并不帶有自動監聽U盤 sd卡廣播的代碼,使用的代碼是固定的地址,這樣的話,就需要我們將系統的掛載目錄固定了。 原始路徑 /storage/3123-19FA 增加鏈接 /storage/upan_000 -> /storage/3123-19FA 2. 首先如果是應用本身監聽的話,使用的是 /…