使用 Unsloth 高效微調 LLAMA-3.1:優化數據、速度和成本
使用 Unsloth 的高效微調技術優化您的 LLAMA-3.1 模型。了解如何利用 LoRA 和 QLoRA 實現更快的訓練、更低的 VRAM 需求和更出色的模型性能。探索超參數對您微調模型的影響。體驗 Unsloth 的聊天界面,與您的自定義 LLM 進行無縫交互。
2025年2月14日

利用 LLAMA-3.1 的微調功能發揮其強大的能力,這是最簡單的方式來適應您的特定需求。探索如何使用 Unsloth 的尖端技術,包括 LoRa 和 QLoRa,高效地訓練您自己的 LLAMA-3.1 模型,並只需最少的 GPU 資源即可取得卓越的結果。本部落格文章提供了一步一步的指南,幫助您最大限度地發揮您的數據潛力,並創建一個符合您獨特需求的定制語言模型。
訓練的不同階段:預訓練、有監督微調和偏好對齊
有監督微調技術:完全微調、LoRA和QLoRA
設置LoRA採用者:秩、LoRA Alpha和LoRA Dropout
數據準備:提示模板和序列結束標記
使用SFT Trainer訓練模型
推理和串流
保存、加載和微調模型
Unsloth的新聊天UI
訓練的不同階段:預訓練、有監督微調和偏好對齊
訓練的不同階段:預訓練、有監督微調和偏好對齊
大型語言模型的訓練通常有三個不同的階段:
-
預訓練: 在這個階段,模型會被訓練在大量的原始文本數據上,學習如何預測下一個token或單詞。結果是一個基礎模型,已經獲得了大量的一般知識,但還不太適用於特定任務。
-
監督微調: 為了使基礎模型更有用,第二個階段是監督微調。在這個階段,模型會被訓練在問答對或指令-答案對上。輸入是一個問題或指令,輸出是所需的回應或答案。這個階段使模型學習到任務特定的知識和能力。
-
偏好對齊: 可選的第三個階段是偏好對齊,在這裡模型被訓練去學習用戶偏好的回應,或者對齊到某些原則。這通常使用強化學習從人類反饋(RLHF)或辯論政策優化(DPO)等技術完成。
這個視頻的目標是集中在監督微調階段,特別是如何使用Unsloth庫來微調Llama 3.1模型。視頻將涵蓋不同的微調技術,如完全微調、LoRA和QLoRA,並討論它們在性能和內存需求方面的權衡。
有監督微調技術:完全微調、LoRA和QLoRA
有監督微調技術:完全微調、LoRA和QLoRA
監督微調有三個流行的選擇:
-
完全微調: 在這種方法中,您會取原始模型並用指令微調數據集更新權重。這將提供最佳性能,但VRAM需求會很高。
-
LoRA (低秩適應): 不直接更新權重,而是向模型添加外部適配器。這些外部適配器的參數數量可以控制。這些適配器的權重更新以16位精度進行,然後合併回原始模型權重。這種方法提供快速訓練,但由於16位操作仍然昂貴。
-
QLoRA (量化LoRA): 這類似於LoRA,但權重更新以4位精度進行,模型權重也保持在4位。這需要更少的VRAM,但性能可能不如LoRA或完全微調。
Unsloth支持LoRA和QLoRA進行微調。LoRA適配器的秩、LoRA alpha和LoRA dropout是控制參數數量和適配器對最終模型權重貢獻的重要超參數。
設置LoRA採用者:秩、LoRA Alpha和LoRA Dropout
設置LoRA採用者:秩、LoRA Alpha和LoRA Dropout
設置LoRA適配器需要考慮幾個關鍵參數:
-
秩: LoRA適配器的秩控制在微調期間將被更新的參數數量。較低的秩意味著較少的參數,可減少VRAM需求,但可能也限制模型的適應能力。相反,較高的秩允許更大的靈活性,但需要更多的VRAM。
-
LoRA Alpha: 這個參數控制LoRA適配器對最終模型權重的貢獻。較高的LoRA Alpha值意味著LoRA適配器將有更強的影響力,而較低的值意味著它們將有較弱的影響力。
-
LoRA Dropout: 這個參數控制訓練期間應用於LoRA適配器的dropout率。增加dropout率可以幫助防止過擬合,但也可能降低模型的性能。
通過調整這些參數,您可以為您的特定用例找到VRAM需求、訓練速度和模型性能之間的平衡。
數據準備:提示模板和序列結束標記
數據準備:提示模板和序列結束標記
為了準備微調數據,我們需要設置提示模板並指定序列結束標記。
提示模板很關鍵,因為它定義了模型將被訓練的輸入數據格式。對於Llama 3.1系列,我們將使用Alpaca提示模板,其中包括一個指令和一個提供更多上下文的輸入。模型預期生成一個適當的回應。
# Alpaca提示模板
prompt_template = "Below is an instruction that describes a task paired with an input that provides further context. Respond with a relevant output.\n\nInstruction: {instruction}\nInput: {input}\nOutput:"
此外,我們需要指定序列結束標記,以防止模型無限期地生成文本。這是一個重要的步驟,許多人在使用量化版本的模型與LamaCPP時都遇到過問題。
# 設置序列結束標記
end_token = "</s>"
通過設置提示模板和序列結束標記,我們確保數據格式正確,這是實現良好結果的關鍵步驟。
使用SFT Trainer訓練模型
使用SFT Trainer訓練模型
為了訓練模型,我們將使用來自TRL包的SFT(監督微調)訓練器,該包由Hugging Face創建和維護。
首先,我們向SFT訓練器提供模型、分詞器和數據集。在這種情況下,我們使用數據集的text
列,因為我們已經設置了提示模板來使用這個字段。
我們還設置了最大序列長度,應該基於訓練數據中的示例。請記住,較高的序列長度將增加VRAM需求。
接下來,我們配置訓練參數,如設備(在本例中為Google Colab上的T4 GPU,約15GB VRAM)和訓練步數。
最後,我們運行訓練器,您可以觀察到損失的下降,這是訓練進度的良好指標。
訓練花了約8分鐘,峰值保留內存約為8GB,約為T4 GPU 53%的可用VRAM。這展示了Unsloth方法的效率,允許使用相對較低的VRAM進行微調。
推理和串流
推理和串流
為了進行推理,我們可以使用FastLanguageModel
類的for_inference
類或方法。我們需要提供訓練好的模型和Alpaca格式的輸入提示。我們還可以設置生成的最大token數。
# 進行推理
input_prompt = alpaca_prompt(instruction, input)
output = model.for_inference(input_prompt, max_new_tokens=256)
print(output)
要啟用流式傳輸,我們可以創建一個Streamer
對象並將其傳遞給for_inference
方法。這將逐個token顯示響應。
# 啟用流式傳輸
streamer = Streamer()
output = model.for_inference(input_prompt, max_new_tokens=256, streamer=streamer)
有了這些,您現在可以對微調後的模型進行推理,並啟用流式傳輸以獲得更加互動的體驗。
保存、加載和微調模型
保存、加載和微調模型
要保存微調後的模型和分詞器,您可以使用模型和分詞器上的save_pretrained()
函數:
model.save_pretrained("path/to/save/model")
tokenizer.save_pretrained("path/to/save/tokenizer")
這將把模型權重和分詞器保存到指定的目錄中,以一組JSON文件的形式。
要加載保存的模型和分詞器,您可以使用相同的FastLanguageModel
類,並提供本地目錄:
model = FastLanguageModel.from_pretrained("path/to/save/model")
tokenizer = FastLanguageModel.from_pretrained("path/to/save/tokenizer")
這將從保存的文件中加載模型和分詞器。
Unsloth的另一個很棒的功能是能夠以不同的格式保存模型,如16位浮點精度的VLLM或直接以GGUF格式的LamaCPP。這允許輕鬆部署和與各種平台和框架集成。
Unsloth還引入了一個基於Gradio的新UI,允許您運行使用Unsloth訓練的模型並參與互動聊天會話。您可以克隆Unsloth Studio存儲庫並運行提供的Colab筆記本來體驗這個功能。
Unsloth的新聊天UI
Unsloth的新聊天UI
Unsloth引入了一個基於Radish庫的新聊天UI,允許您輕鬆與使用Unsloth訓練的語言模型互動。這個聊天UI提供了一個用戶友好的界面,用於與模型聊天並探索其功能。
要使用聊天UI,您可以克隆Unsloth studio存儲庫並運行提供的Google Colab筆記本。這將設置必要的環境並啟動聊天UI,您可以在此開始與語言模型對話。
聊天UI支持流式響應等功能,允許您在生成時看到模型的輸出。這對於觀察模型的思維過程和生成響應的方式很有用。
此外,Unsloth的聊天UI使您能夠保存和加載微調的模型,方便您繼續使用定制的語言模型。您還可以以各種格式導出模型,如16位浮點精度的VLLM或GGUF格式的LamaCPP,提供靈活性以使用和部署您的模型。
總的來說,Unsloth的新聊天UI是一個有價值的工具,用於與使用Unsloth框架訓練的語言模型進行互動和探索其功能。
常問問題
常問問題