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