保姆級教程:零代碼基礎也能微調Qwen3,并本地部署
我將在本文介紹如何通過 unsloth 框架以 LoRA 的方法微調 Qwen3-14B 模型。
圖片
到目前還有很多小伙伴還不明白什么時候應該微調?那么請看下圖:
圖片
接下來我們再看一下本文使用的 LoRA 微調方法的優勢:
圖片
LoRA(Low-Rank Adaptation of Large Language Models,大型語言模型的低秩自適應)是一種流行的輕量級訓練技術,可以顯著減少可訓練參數的數量。它的工作原理是將少量的新權重插入模型中,并且只訓練這些權重。這使得使用 LoRA 進行訓練的速度更快、內存效率更高,并且生成的模型權重更小(只有幾百 MB),更易于存儲和共享。LoRA 還可以與 DreamBooth 等其他訓練技術結合使用,以加速訓練。
我們將在本文介紹如何微調使模型成為一個"雙重人格"的助手,既能進行普通閑聊,又能在需要時切換到更嚴謹的思考模式來解決復雜問題,特別是數學問題。簡而言之,微調后的模型獲得的能力:
1. 雙模式操作能力:
- 普通對話模式: 適用于日常聊天場景。
- 思考模式( Thinking Mode ): 用于解決需要推理的問題。
2. 數學推理能力: 能夠解決數學問題并展示詳細的推理過程,如示例中的"解方程(x + 2)^2 = 0"。
3. 對話能力保持: 同時保持了自然對話的能力,能夠進行流暢的多輪對話。
首先我們在谷歌 Colab 上選擇算力,推薦使用 T4 GPU 或者 A100 GPU:
圖片
現在我們可以加載 14 B模型:
圖片
我們現在添加 LoRA 適配器,因此我們只需要更新 1% 到 10% 的參數!
圖片
準備數據
Qwen3 既有推理模式,也有非推理模式。因此,我們應該使用兩個數據集:
- Open Math Reasoning 數據集,該數據集曾用于贏得 AIMO(AI Mathematical Olympiad,AI 數學奧林匹克 - 進步獎 2)挑戰賽!我們從使用 DeepSeek R1 的可驗證推理軌跡中抽取了 10%,其準確率超過 95%。
- 我們還利用了 Maxime Labonne 的 FineTome-100k 數據集(ShareGPT 格式)。但我們還需要將其轉換為 HuggingFace 的常規多輪對話格式。
圖片
我們現在將推理數據集轉換為對話格式:
圖片
接下來,我們將非推理數據集也轉換為對話格式。
首先,我們必須使用 Unsloth 的 standardize_sharegpt 函數來修復數據集的格式。
圖片
圖片
非推理數據集要長得多。假設我們希望模型保留一些推理能力,但我們特別想要一個聊天模型。
讓我們定義一個純聊天數據的比例。目標是定義兩種數據集的某種混合。讓我們選擇 25% 的推理數據和 75% 的聊天數據:
圖片
最后合并數據集:
圖片
訓練模型
現在讓我們使用 Huggingface TRL 的 SFTTrainer!我們執行 60 步來加快速度,但你可以設置 num_train_epochs=1 進行完整運行,并關閉 max_steps=None。
圖片
圖片
讓我們開始訓練模型吧!要恢復訓練,請設置 trainer.train(resume_from_checkpoint = True)
圖片
圖片
推理
讓我們通過 Unsloth 原生推理來運行模型!根據 Qwen-3 團隊的說法,
- 推理的推薦設置是:temperature = 0.6、top_p = 0.95、top_k = 20。
- 對于基于普通聊天的推理,temperature = 0.7、top_p = 0.8、top_k = 20。
圖片
保存、加載微調模型
要將最終模型保存為 LoRA 適配器,請使用 Huggingface 的 push_to_hub 進行在線保存,或使用 save_pretrained 進行本地保存。
[注意] 這僅保存 LoRA 適配器,而不是完整模型。后面我來介紹如何保存為 16 位或 GGUF 格式。
圖片
現在,如果你想加載我們剛剛保存用于推理的 LoRA 適配器,請將 False 設置為 True:
圖片
保存為 VLLM 的 float16
選擇 merged_16bit 保存 float16,或選擇 merged_4bit 保存 int4。使用 push_to_hub_merged 上傳到你個人的 Hugging Face 賬戶!
圖片
GGUF / llama.cpp 轉換
使用 save_pretrained_gguf 進行本地保存,使用 push_to_hub_gguf 上傳到 HF。
- q8_0 - 快速轉換。資源占用較高,但通常可以接受。
- q4_k_m - 推薦。使用 Q6_K 處理 attention.wv 和 feed_forward.w2 張量的一半,否則使用 Q4_K。
- q5_k_m - 推薦。使用 Q6_K 處理 attention.wv 和 feed_forward.w2 張量的一半,否則使用 Q5_K。
圖片
本地部署
接下來就是將 GGUF 文件下載到本地,以便本地部署運行。