Unsloth:僅需7GB顯存就能訓(xùn)練自己的DeepSeek-R1!
隨著 LLM 應(yīng)用的廣泛普及,如何提高模型的推理效率并降低資源消耗成為了技術(shù)發(fā)展中的一大挑戰(zhàn)。Unsloth 通過引入多個強化學(xué)習(xí)(RL)算法和最新的量化技術(shù),顯著提高了 LLM 在推理和微調(diào)過程中的性能,并大幅降低了顯存消耗。
DeepSeek 的研究人員在用純強化學(xué)習(xí)(RL)訓(xùn)練 R1-Zero 時觀察到了一個“靈光一現(xiàn)”的時刻。模型學(xué)會了通過重新評估最初的思路來延長思考時間,而無需任何人工指導(dǎo)或預(yù)定義指令。
Unsloth 對整個 GRPO 過程進行了增強,使其比 Hugging Face + FA2 減少了 80% 的顯存使用。這意味著我們可以使用 7GB 顯存,通過Qwen2.5(1.5B)復(fù)現(xiàn)了 R1-Zero “靈光一現(xiàn)”的時刻。
主要細節(jié)
使用15GB顯存,Unsloth 允許我們將任何最多 15B 參數(shù)的模型(如Llama 3.1(8B)、Phi-4(14B)、Mistral(7B)或 Qwen2.5(7B))轉(zhuǎn)變?yōu)橥评砟P汀?/p>
最低要求:僅需 7GB 顯存即可在本地訓(xùn)練自己的推理模型。
Tiny-Zero 的團隊展示了如何用 Qwen2.5(1.5B)復(fù)現(xiàn) R1-Zero “靈光一現(xiàn)”的時刻——但之前需要2個A100 GPU(160GB顯存)。而現(xiàn)在,通過 Unsloth,我們只需一個 7GB 顯存的 GPU 即可實現(xiàn)同樣的效果。
請注意,這不是對 DeepSeek 的 R1 精煉模型進行微調(diào),也不是使用 R1 的精煉數(shù)據(jù)進行微調(diào),而是通過 GRPO 將標(biāo)準(zhǔn)模型轉(zhuǎn)換為一個完整的推理模型。
這種魔法可以通過 GRPO 重新創(chuàng)建,GRPO 是一種強化學(xué)習(xí)(RL)算法,能夠高效優(yōu)化響應(yīng),而不需要值函數(shù),這與依賴值函數(shù)的近端策略優(yōu)化(PPO)不同。在我們的筆記本中,我們使用 GRPO 訓(xùn)練一個模型,旨在使其自主開發(fā)自我驗證和搜索能力——創(chuàng)造一個迷你“靈光一現(xiàn)”時刻。
工作原理:
- 模型生成一組響應(yīng)。
- 每個響應(yīng)根據(jù)正確性或由某個獎勵函數(shù)創(chuàng)建的其他度量標(biāo)準(zhǔn)進行評分,而不是使用 LLM 獎勵模型。
- 計算該組的平均得分。
- 將每個響應(yīng)的得分與該組平均得分進行比較。
- 強化模型,使其傾向于選擇得分更高的響應(yīng)。
例如,假設(shè)我們希望模型解決以下問題:
1+1 等于多少? >> 思考鏈/推理過程 >> 答案是2。
2+2 等于多少?>> 思考鏈/推理過程 >> 答案是4。
最初,必須收集大量數(shù)據(jù)來填充推理過程。但 GRPO(DeepSeek 使用的算法)或其他 RL 算法可以引導(dǎo)模型自動展示推理能力并生成推理痕跡。相反,我們需要創(chuàng)建良好的獎勵函數(shù)或驗證器。例如,如果答案正確,就給它打 1 分;如果有拼寫錯誤,扣 0.1 分,依此類推!我們可以提供許多獎勵過程的函數(shù)。
GRPO 在 Unsloth 中的應(yīng)用
如果你在本地使用 GRPO 與 Unsloth,請確?!皃ip install diffusers”,因為它是一個依賴項。
等待至少 300 步才能看到獎勵的實際增長,請使用最新版本的 vLLM。為了獲得良好的結(jié)果,你需要訓(xùn)練至少 12 小時(這就是 GRPO 的工作方式),但請記住,這不是強制性的,你可以隨時停止。
建議將 GRPO 應(yīng)用于至少 1.5B 參數(shù)的模型,以便正確生成思考 token,因為較小的模型可能無法做到。如果你使用的是基礎(chǔ)模型,請確保擁有聊天模板。GRPO 的訓(xùn)練損失追蹤功能現(xiàn)在已直接內(nèi)置于 Unsloth 中,無需像 wandb 等外部工具。
除了增加 GRPO 支持外,Unsloth 隨后還支持了在線 DPO、PPO 和 RLOO!請查看下圖,比較 Unsloth 的在線 DPO 顯存消耗與標(biāo)準(zhǔn) Hugging Face + FA2 的差異。
Unsloth x vLLM
20 倍吞吐量,節(jié)省 50% 顯存。
現(xiàn)在,你可以直接在微調(diào)堆棧中使用 vLLM,這大大提高了吞吐量,并且允許你在同一時間進行微調(diào)和推理!在 1x A100 40GB 顯卡上,使用 Unsloth 的動態(tài) 4bit 量化的 Llama 3.2 3B Instruct,預(yù)期吞吐量約為 4000 tokens/s。在 16GB 的Tesla T4(免費 Colab GPU)上,你可以獲得約 300 tokens/s 的吞吐量。
Unsloth 去除了加載 vLLM 和 Unsloth 時的雙倍內(nèi)存使用,從而節(jié)省了約 5GB 的顯存(對于 Llama 3.1 8B)和 3GB 的顯存(對于 Llama 3.2 3B)。原本,Unsloth 可以在 1x 48GB GPU 上微調(diào) Llama 3.3 70B Instruct,其中 Llama 3.3 70B 的權(quán)重占用了 40GB 的顯存。如果不去除雙倍內(nèi)存使用,當(dāng)加載 Unsloth 和 vLLM 一起使用時,我們將需要至少 80GB 的顯存。
但是使用 Unsloth,我們?nèi)匀豢梢栽诓坏?48GB 顯存的情況下,同時享受微調(diào)和快速推理的好處!要使用快速推理,首先安裝 vllm,并通過 fast_inference 實例化 Unsloth:
# pip install unsloth vllm
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/Llama-3.2-3B-Instruct",
fast_inference = True,
)
model.fast_generate(["Hello!"])
什么是 GRPO?
GRPO(Group Relative Policy Optimization,群體相對策略優(yōu)化)是一種強化學(xué)習(xí)(RL)算法,旨在優(yōu)化模型的響應(yīng)質(zhì)量,而不依賴傳統(tǒng)的值函數(shù)。這種算法通過一種群體相對優(yōu)化方法,對模型的每個生成的響應(yīng)進行評分,并根據(jù)這些評分來引導(dǎo)模型的學(xué)習(xí)過程。
具體來說,GRPO 算法的主要特點如下:
- 無值函數(shù):與依賴值函數(shù)的強化學(xué)習(xí)算法(如PPO)不同,GRPO 不使用值函數(shù)來評估狀態(tài)或行為的質(zhì)量,而是通過對模型輸出的響應(yīng)進行評分,并基于這些評分來優(yōu)化模型。
- 響應(yīng)評分與群體平均:在 GRPO 中,模型生成一組可能的響應(yīng),每個響應(yīng)都會根據(jù)正確性或其他預(yù)定義的獎勵函數(shù)進行評分。然后,計算這些響應(yīng)的平均得分,并將每個響應(yīng)的得分與群體平均得分進行比較。模型會得到強化,傾向于生成得分較高的響應(yīng)。
- 自我優(yōu)化:GRPO 能夠幫助模型自主地進行推理和自我驗證。例如,模型可以在沒有人工干預(yù)的情況下,通過不斷調(diào)整思維過程來提高推理結(jié)果的準(zhǔn)確性。
- 適用于多種任務(wù):GRPO 不僅可以用于常見的分類任務(wù),也可以應(yīng)用于更復(fù)雜的任務(wù),如生成具有自我驗證和推理能力的模型(例如,解答問題時展示推理過程)。
總的來說,GRPO通過強化學(xué)習(xí)的方式,不僅優(yōu)化模型的回答,還能改善其推理過程,使模型在沒有人工反饋的情況下,能夠不斷自我改進,從而在處理復(fù)雜任務(wù)時展現(xiàn)出更強的推理能力。
本文轉(zhuǎn)載自 ??PyTorch研習(xí)社??,作者: 南七無名式
