首頁 >科技週邊 >IT業界 >使用直接偏好優化(DPO)對開源LLM進行微調開源LLM

使用直接偏好優化(DPO)對開源LLM進行微調開源LLM

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2025-02-08 09:24:10548瀏覽

Fine-Tuning an Open-Source LLM with Axolotl Using Direct Preference Optimization (DPO)

大型語言模型(LLM)的出現為AI應用帶來了無數新的機遇。如果您一直想微調自己的模型,本指南將向您展示如何輕鬆地做到這一點,無需編寫任何代碼。我們將使用Axolotl和DPO等工具,逐步引導您完成整個流程。

什麼是大型語言模型(LLM)?

大型語言模型(LLM)是一種強大的AI模型,它在海量文本數據(數万億字符)上進行訓練,以預測序列中的下一個詞組。這只有在過去2-3年中,隨著GPU計算的進步才成為可能,這些進步使得如此龐大的模型能夠在幾週內完成訓練。

您可能之前已經通過ChatGPT或Claude等產品與LLM互動過,並親身體驗了它們理解和生成類似人類回應的能力。

為什麼要微調LLM?

我們不能只使用GPT-4o來處理所有事情嗎?雖然在撰寫本文時,它是我們擁有的最強大的模型,但它並不總是最實用的選擇。微調一個較小的模型(參數範圍為30億到140億),可以在成本的一小部分獲得可比的結果。此外,微調允許您擁有自己的知識產權,並減少對第三方的依賴。

理解基礎模型、指令模型和對話模型

在深入微調之前,務必了解現有不同類型的LLM:

  • 基礎模型:這些模型在大量非結構化文本(如書籍或互聯網數據)上進行預訓練。雖然它們具有對語言的內在理解,但它們並未針對推理進行優化,並且會產生不連貫的輸出。基礎模型的開發是為了作為開發更專業模型的起點。
  • 指令模型:指令模型建立在基礎模型之上,使用結構化數據(如提示-響應對)進行微調。它們旨在遵循特定指令或回答問題。
  • 對話模型:也建立在基礎模型之上,但與指令模型不同,對話模型在對話數據上進行訓練,使它們能夠進行來回對話。

什麼是強化學習和DPO?

強化學習(RL)是一種技術,模型通過接收對其行為的反饋來學習。它被應用於指令模型或對話模型,以進一步改進其輸出的質量。通常,RL不會在基礎模型之上進行,因為它使用更低的學習率,這不足以產生顯著變化。

DPO是一種RL形式,其中模型使用同一提示/對話的優劣答案對進行訓練。通過呈現這些對,模型學習偏向好的示例並避免壞的示例。

何時使用DPO

當您想要調整模型的風格或行為時,DPO特別有用,例如:

  • 風格調整:修改響應的長度、細節級別或模型表達的置信度。
  • 安全措施:訓練模型拒絕回答可能不安全或不合適的提示。

但是,DPO不適合教模型新的知識或事實。為此,監督微調(SFT)或檢索增強生成(RAG)技術更合適。

創建DPO數據集

在生產環境中,您通常會使用用戶的反饋來生成DPO數據集,例如:

  • 用戶反饋:在響應上實現點贊/點踩機制。
  • 比較選擇:向用戶呈現兩個不同的輸出,並要求他們選擇更好的一個。

如果您缺乏用戶數據,您也可以通過利用更大、更強大的LLM來創建合成數據集。例如,您可以使用較小的模型生成錯誤答案,然後使用GPT-4o對其進行糾正。

為簡單起見,我們將使用HuggingFace的現成數據集:olivermolenschot/alpaca_messages_dpo_test。如果您檢查數據集,您會注意到它包含帶有已選擇和已拒絕答案的提示——這些是好壞示例。這些數據是使用GPT-3.5-turbo和GPT-4合成創建的。

您通常至少需要500到1000對數據才能有效地進行訓練而不會過擬合。最大的DPO數據集包含多達15,000-20,000對數據。

使用Axolotl微調Qwen2.5 3B指令模型

我們將使用Axolotl來微調Qwen2.5 3B指令模型,該模型目前在其規模類別中在OpenLLM排行榜上排名第一。使用Axolotl,您可以無需編寫任何代碼即可微調模型——只需要一個YAML配置文件。以下是我們將使用的config.yml:

<code class="language-yaml"># ... (YAML configuration remains the same) ...</code>

設置雲環境

要運行訓練,我們將使用Runpod或Vultr等雲託管服務。以下是您需要的:

  • Docker鏡像:克隆Axolotl團隊提供的winglian/axolotl-cloud:main Docker鏡像。
  • 硬件要求:80GB VRAM GPU(如1×A100 PCIe節點)對於這種規模的模型綽綽有餘。
  • 存儲:200GB的捲存儲將容納我們所需的所有文件。
  • CUDA版本:您的CUDA版本至少應為12.1。

(此類型的訓練被認為是LLM的完整微調,因此非常佔用VRAM。如果您想在本地運行訓練,而不依賴於雲主機,您可以嘗試使用QLoRA,這是一種監督微調的形式。雖然理論上可以組合DPO和QLoRA,但這很少見。)

開始訓練的步驟

  1. 設置HuggingFace緩存目錄:
<code class="language-bash">export HF_HOME=/workspace/hf</code>

這確保原始模型下載到我們的持久卷存儲中。

  1. 創建配置文件:將我們之前創建的config.yml文件保存到/workspace/config.yml。

  2. 開始訓練:

<code class="language-bash">python -m axolotl.cli.train /workspace/config.yml</code>

瞧!您的訓練應該開始了。在Axolotl下載模型和訓練數據後,您應該會看到類似於此的輸出:

<code class="language-yaml"># ... (YAML configuration remains the same) ...</code>

由於這是一個只有264行的較小的數據集,因此訓練應該只需幾分鐘即可完成。微調後的模型將保存到/workspace/dpo-output。

將模型上傳到HuggingFace

您可以使用CLI將模型上傳到HuggingFace:

  1. 安裝HuggingFace Hub CLI:
<code class="language-bash">export HF_HOME=/workspace/hf</code>
  1. 上傳模型:
<code class="language-bash">python -m axolotl.cli.train /workspace/config.yml</code>

將yourname/yourrepo替換為您實際的HuggingFace用戶名和存儲庫名稱。

評估微調後的模型

對於評估,建議使用Text Generation Inference (TGI)等工具來託管原始模型和微調後的模型。然後,使用溫度設置為0(以確保確定性輸出)對兩個模型進行推理,並手動比較兩個模型的響應。

這種實踐方法比僅僅依賴訓練評估損失指標提供了更好的見解,因為損失指標可能無法捕捉LLM中語言生成的細微之處。

結論

使用DPO微調LLM允許您自定義模型以更好地滿足應用程序的需求,同時保持成本可控。通過遵循本文中概述的步驟,您可以利用開源工具和數據集的力量來創建符合您特定要求的模型。無論您是想調整響應的風格還是實施安全措施,DPO都提供了一種改進LLM的實用方法。

祝您微調愉快!

以上是使用直接偏好優化(DPO)對開源LLM進行微調開源LLM的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn