大型語言模型(LLM)的出現為AI應用帶來了無數新的機遇。如果您一直想微調自己的模型,本指南將向您展示如何輕鬆地做到這一點,無需編寫任何代碼。我們將使用Axolotl和DPO等工具,逐步引導您完成整個流程。
大型語言模型(LLM)是一種強大的AI模型,它在海量文本數據(數万億字符)上進行訓練,以預測序列中的下一個詞組。這只有在過去2-3年中,隨著GPU計算的進步才成為可能,這些進步使得如此龐大的模型能夠在幾週內完成訓練。
您可能之前已經通過ChatGPT或Claude等產品與LLM互動過,並親身體驗了它們理解和生成類似人類回應的能力。
我們不能只使用GPT-4o來處理所有事情嗎?雖然在撰寫本文時,它是我們擁有的最強大的模型,但它並不總是最實用的選擇。微調一個較小的模型(參數範圍為30億到140億),可以在成本的一小部分獲得可比的結果。此外,微調允許您擁有自己的知識產權,並減少對第三方的依賴。
在深入微調之前,務必了解現有不同類型的LLM:
強化學習(RL)是一種技術,模型通過接收對其行為的反饋來學習。它被應用於指令模型或對話模型,以進一步改進其輸出的質量。通常,RL不會在基礎模型之上進行,因為它使用更低的學習率,這不足以產生顯著變化。
DPO是一種RL形式,其中模型使用同一提示/對話的優劣答案對進行訓練。通過呈現這些對,模型學習偏向好的示例並避免壞的示例。
當您想要調整模型的風格或行為時,DPO特別有用,例如:
但是,DPO不適合教模型新的知識或事實。為此,監督微調(SFT)或檢索增強生成(RAG)技術更合適。
在生產環境中,您通常會使用用戶的反饋來生成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指令模型,該模型目前在其規模類別中在OpenLLM排行榜上排名第一。使用Axolotl,您可以無需編寫任何代碼即可微調模型——只需要一個YAML配置文件。以下是我們將使用的config.yml:
<code class="language-yaml"># ... (YAML configuration remains the same) ...</code>
要運行訓練,我們將使用Runpod或Vultr等雲託管服務。以下是您需要的:
(此類型的訓練被認為是LLM的完整微調,因此非常佔用VRAM。如果您想在本地運行訓練,而不依賴於雲主機,您可以嘗試使用QLoRA,這是一種監督微調的形式。雖然理論上可以組合DPO和QLoRA,但這很少見。)
<code class="language-bash">export HF_HOME=/workspace/hf</code>
這確保原始模型下載到我們的持久卷存儲中。
創建配置文件:將我們之前創建的config.yml文件保存到/workspace/config.yml。
開始訓練:
<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。
您可以使用CLI將模型上傳到HuggingFace:
<code class="language-bash">export HF_HOME=/workspace/hf</code>
<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中文網其他相關文章!