DeepSeek-R1推理本地跑,7GB GPU體驗(yàn)啊哈時(shí)刻?GRPO內(nèi)存暴降,GitHub超2萬星
李飛飛團(tuán)隊(duì)僅用16張H100訓(xùn)了26分鐘,訓(xùn)出的模型就超越了o1-preview,震動(dòng)業(yè)內(nèi)。
可以說,DeepSeek-R1已經(jīng)讓全球AI模型走向了推理新時(shí)代。
甚至利用其訓(xùn)練方法GRPO,AI開源界開始了競(jìng)賽:看誰能用最少的成本,復(fù)現(xiàn)AI的「啊哈時(shí)刻」。
而就在剛剛,DeepSeek-R1的推理成本徹底被打下來了!
開源項(xiàng)目Unsloth AI帶來了好消息,不用云服務(wù),本地也能體驗(yàn)「Aha」 時(shí)刻:
現(xiàn)在可以在本地設(shè)備上復(fù)現(xiàn)DeepSeek-R1的推理!
只需7GB VRAM,你就能體驗(yàn)到「Aha」時(shí)刻。
Unsloth把GRPO訓(xùn)練需要的內(nèi)存減少了80%。
15GB VRAM就可以把Llama-3.1(8B)和Phi-4(14B)轉(zhuǎn)變?yōu)橥评砟P汀?/span>
沒有看錯(cuò):只需7GB VRAM的GPU,AI模型在本地就能體驗(yàn)「啊哈時(shí)刻」。
什么是AI的「啊哈時(shí)刻」?有什么作用?
熟悉AI的都知道,對(duì)人類很簡(jiǎn)單的問題,對(duì)AI可能很難。比如:
9.11和9.9相比,哪個(gè)大?
但體驗(yàn)過「Aha」時(shí)刻后,AI模型Phi-4就能完成這類問題:從無推理能力的模型,化身為DeepSeek-R1同款推理模式,帶有原始思維鏈、展示推理過程的那種!
原文鏈接:https://unsloth.ai/blog/r1-reasoning
總之,如果現(xiàn)在你已經(jīng)有輸入和輸出數(shù)據(jù)(比如問題和答案),但沒有CoT或推理過程,那就可以見證GRPO創(chuàng)造的奇跡了——
它能為你創(chuàng)建推理過程,甚至做出更多!
現(xiàn)在,這個(gè)方法已經(jīng)在AI社區(qū)爆火,討論的聲浪越來越高了。
Unsloth推出推理功能
DeepSeek的R1研究揭示了「Aha」時(shí)刻,通過群體相對(duì)策略優(yōu)化(Group Relative Policy Optimization,GRPO),在沒有人類反饋的情況下,R1-Zero自動(dòng)學(xué)會(huì)了如何分配更多的思考時(shí)間。
Unsloth對(duì)整個(gè)GRPO過程進(jìn)行了增強(qiáng),相比Hugging Face+FA2,VRAM使用減少了80%。
這意味著只需7GB VRAM,使用Qwen2.5(1.5B)就能重現(xiàn)R1-Zero的「Aha」時(shí)刻。
項(xiàng)目鏈接:https://github.com/unslothai/unsloth
對(duì)于包含其他模型的GRPO,參閱下列文檔。
文檔鏈接:https://docs.unsloth.ai/get-started/unsloth-notebooks
此次,unsloth更新主要增強(qiáng)了對(duì)DeepSeek-R1-Zero強(qiáng)化學(xué)習(xí)訓(xùn)練方法的GRPO支持,減少了對(duì)內(nèi)存的占用。
主要亮點(diǎn)如下:
- 15GB VRAM:使用unsloth,你可以將任何最多15B參數(shù)的模型(如Llama 3.1(8B)、Phi-4(14B)、Mistral(7B)或Qwen2.5(7B))轉(zhuǎn)換為推理模型。
- 最低僅需7GB VRAM,足以在本地訓(xùn)練你自己的推理模型。
- Tiny-Zero團(tuán)隊(duì)曾展示過,使用Qwen2.5(1.5B)可以實(shí)現(xiàn)「aha」時(shí)刻,但需要2個(gè)A100 GPU(160GB VRAM)。而現(xiàn)在,借助Unsloth,只需一個(gè)7GB VRAM的GPU就能實(shí)現(xiàn)相同的效果。
- 之前,GRPO僅支持完整微調(diào),但現(xiàn)在已經(jīng)能夠與QLoRA和LoRA配合使用。
- 請(qǐng)注意,這并不是微調(diào)DeepSeek-R1蒸餾模型或用R1蒸餾數(shù)據(jù)進(jìn)行調(diào)優(yōu)(Unsloth已經(jīng)支持)。實(shí)際上,此項(xiàng)目用GRPO將標(biāo)準(zhǔn)模型轉(zhuǎn)化為「滿血」的推理模型。
- GRPO的應(yīng)用場(chǎng)景:帶有獎(jiǎng)勵(lì)機(jī)制的定制化推理模型,例如法律、醫(yī)學(xué)等領(lǐng)域;其他需要顯示推理鏈或思維過程的場(chǎng)景。
GRPO帶來的「Aha」時(shí)刻
在使用純粹的強(qiáng)化學(xué)習(xí)(RL)訓(xùn)練R1-Zero時(shí),DeepSeek觀察到了神奇的「啊哈時(shí)刻」——
在沒有任何人類的指導(dǎo)或預(yù)定義的指令的情況下,模型竟開始重新評(píng)估其初始方法,學(xué)會(huì)了延長(zhǎng)思考時(shí)間。
即便只使用GRPO對(duì)Phi-4做100步的訓(xùn)練,結(jié)果也一目了然:未使用GRPO的模型沒有思考token,使用GRPO訓(xùn)練后的模型則具有思考token,而且得出了正確答案!
論文鏈接:https://arxiv.org/pdf/2412.08905
這種「啊哈時(shí)刻」表明,GRPO不僅幫助模型提升推理能力,還能讓模型在沒有外部提示的情況下,學(xué)會(huì)自我反思和調(diào)整,從而提高問題解決的質(zhì)量。
回到「9.11和9.9哪個(gè)大?」的問題,沒有GRPO訓(xùn)練前,Phi-4介紹了如何從左到右按位比較小數(shù),堅(jiān)持認(rèn)為雖然十分位上1<9,但百分位上1>0,而9.9可以寫作9.90, 所以:「9.11比9.90大」。
經(jīng)過GRPO訓(xùn)練,Phi-4已經(jīng)能正確分析回答此問題了,而且推理過程清晰,嚴(yán)絲合縫——
在推理過程中的第2步,基于十分位的比較,已經(jīng)得出了正確答案;在第3步,依然比較了9.11和9.90的百分位,但這次AI模型發(fā)現(xiàn)比較百分位并不影響在第2步得出的結(jié)果。
Phi-4在GRPO訓(xùn)練前后比較,提示為:「Which is bigger? 9.11 or 9.9?」
這就是GRPO的「魔力」。
GRPO是一種強(qiáng)化學(xué)習(xí)(RL)算法,與近端策略優(yōu)化(Proximal Policy Optimization,PPO)不同,它不依賴值函數(shù),能夠更高效地優(yōu)化模型的回答質(zhì)量。
在項(xiàng)目的Notebook中,使用GRPO訓(xùn)練模型,能夠自主發(fā)展出自我驗(yàn)證(self-verification)和搜索能力,從而創(chuàng)造出一個(gè)迷你「Aha 時(shí)刻」。
GRPO的大致流程如下:
1 模型生成多組回答
2 根據(jù)正確性或其他設(shè)定的獎(jiǎng)勵(lì)函數(shù),對(duì)回答進(jìn)行評(píng)分(不同于使用LLM作為獎(jiǎng)勵(lì)模型)
3 計(jì)算該組回答的平均得分
4 將每個(gè)回答的得分與組內(nèi)平均得分進(jìn)行比較
5 增強(qiáng)模型對(duì)高分回答的偏好
舉例來說,假設(shè)要模型解決下列問題:
What is 1+1? >> Chain of thought/working out >> The answer is 2.
What is 2+2? >> Chain of thought/working out >> The answer is 4.
最初,必須收集大量數(shù)據(jù)來填充工作/思維鏈。
但是,GRPO(DeepSeek使用的算法)以及其他RL算法可以引導(dǎo)模型自動(dòng)表現(xiàn)出推理能力,并創(chuàng)建推理軌跡。
RL不需要數(shù)據(jù),相反需要精心設(shè)計(jì)的獎(jiǎng)勵(lì)函數(shù)或驗(yàn)證器。例如,如果它得到了正確答案,就給它打1分;如果有些單詞拼寫錯(cuò)誤,就減0.1分。以此類推。
強(qiáng)強(qiáng)聯(lián)合:在Unsloth中使用GRPO
如果在本地使用GRPO進(jìn)行訓(xùn)練,請(qǐng)先安裝必要的依賴項(xiàng):pip install diffusers。
訓(xùn)練提示:耐心等待至少300步才能看到獎(jiǎng)勵(lì)分?jǐn)?shù)的明顯提升;為了確保最佳兼容性,請(qǐng)使用最新版本的vLLM。
Colab示例僅訓(xùn)練了1小時(shí),結(jié)果較一般,要獲得高質(zhì)量結(jié)果,建議訓(xùn)練至少12小時(shí)(但可以隨時(shí)停止)。
較小的模型可能無法生成思考token,建議至少使用1.5B參數(shù)的模型,正確生成「思考token」(thinking tokens)。
如果使用基礎(chǔ)模型,請(qǐng)確保加載正確的Chat模板(避免格式問題)。
Unsloth現(xiàn)已內(nèi)置GRPO訓(xùn)練損失跟蹤功能,無需再使用外部工具(如wandb)。
內(nèi)置GRPO訓(xùn)練損失跟蹤示例
更多強(qiáng)化學(xué)習(xí)訓(xùn)練方法
除了新增GRPO支持,還增加了對(duì)Online DPO(在線直接偏好優(yōu)化)、PPO(近端策略優(yōu)化)和RLOO(強(qiáng)化學(xué)習(xí)偏好優(yōu)化)的支持!
計(jì)算機(jī)工程專業(yè)的碩士生Keith Truongcao,在Unsolth中實(shí)現(xiàn)了Online DPO算法。
在TLDR數(shù)據(jù)集 ,他使用GPT 4o-mini作為判斷模型,與原始模型(下圖用綠色表示)相比,微調(diào)后的AI模型勝率都有所提升:Online DPO模型(下圖用紫色表示)的勝率顯著高于原始模型,并且比SFT模型(下圖用紅色表示)高出12%,充分證明了強(qiáng)化學(xué)習(xí)訓(xùn)練方法的有效性。
借助Unsloth的優(yōu)化,在線DPO(Direct Preference Optimization微調(diào)的顯存需求大幅降低。當(dāng)batch size為1且使用梯度累積時(shí),所需顯存僅為20GB。
相比之下,標(biāo)準(zhǔn)的Llama 3.2(10億參數(shù)模型) 需要50GB顯存,但在嘗試額外分配2GB顯存時(shí),會(huì)發(fā)生OOM(內(nèi)存溢出)錯(cuò)誤。更令人驚訝的是,即使在配備48GB顯存的A40 GPU上,標(biāo)準(zhǔn)Llama也會(huì)直接崩潰。
Unsloth的在線DPO VRAM消耗與Hugging Face+FA2的對(duì)比
更多詳情,請(qǐng)參閱Keith的下列文章,其中包括如何讓在線DPO正常工作更多細(xì)節(jié)。
原文鏈接:https://substack.com/home/post/p-154490380
另一位活躍的開源貢獻(xiàn)者Joey,在X上也詳細(xì)介紹了自己如何在Google Colab上實(shí)現(xiàn)GRPO變更的方法。
Unsloth x vLLM:更高吞吐量和更少VRAM消耗
20倍吞吐量,一半VRAM
現(xiàn)在,在微調(diào)流程中,可以直接使用vLLM,這使得模型的吞吐量大幅提升,并且可以同時(shí)進(jìn)行微調(diào)和推理。
在1x A100 40GB GPU上,使用Unsloth動(dòng)態(tài)4bit量化的Llama 3.2 3B Instruct,吞吐量大約為4000 tokens/s。
在16GB Tesla T4(免費(fèi)Colab GPU)上,吞吐量大約為300 tokens/s。
而且,因?yàn)閁nsloth還神奇地去除了vLLM和Unsloth一起加載時(shí)的雙重內(nèi)存使用,因此讓Llama 3.1 8B節(jié)省了約5GB VRAM,讓Llama 3.2 3B節(jié)約了3GB VRAM。
加載模型時(shí)不再需要額外的內(nèi)存開銷。
Unsloth可以在單張48GB GPU上微調(diào)Llama 3.3 70B Instruct,其中Llama 3.3 70B的權(quán)重占用40GB VRAM。
這是Unsloth的原創(chuàng)功能。
而如果不優(yōu)化內(nèi)存管理,同時(shí)加載Unsloth和vLLM,會(huì)導(dǎo)致VRAM雙倍占用,從而需要至少80GB VRAM才能運(yùn)行。
而且上手非???,只要兩步:
- 安裝vLLM和Unsloth:pip install unsloth vllm。
- 初始化Unsloth并啟用快速推理:
Unsloth中關(guān)于vLLM的發(fā)現(xiàn)
1. 現(xiàn)在,vLLM可以加載Unsloth Dynamic 4-比特量化。就像Unsloth的1.58比特動(dòng)態(tài)R1 GGUF一樣,發(fā)現(xiàn)將某些層動(dòng)態(tài)量化為4比特,將某些層動(dòng)態(tài)量化為16比特,在減小模型規(guī)模的同時(shí),顯著提高精確度。
2. 對(duì)于RAM、VRAM效率和最大吞吐量(如分塊預(yù)填充標(biāo)記數(shù)、最大序列數(shù)等)等設(shè)置,還可以自動(dòng)選擇多個(gè)參數(shù)。在vLLM中默認(rèn)啟用-O3并啟用前綴緩存。發(fā)現(xiàn)老GPU上的Flashinfer實(shí)際上要慢10%。FP8 KV緩存會(huì)讓速度慢10%,但吞吐量會(huì)翻倍。
3. 在vLLM中通過解析狀態(tài)字典,允許加載LoRA,而不是從磁盤加載——可以讓GRPO訓(xùn)練運(yùn)行速度提高1.5倍。在vLLM中直接編輯LoRA適配器,相關(guān)研究是否活躍。這可以大大提高速度,因?yàn)槟壳鞍姹镜乃惴ㄟ€做了不必要的GPU數(shù)據(jù)移動(dòng)。
4. vLLM會(huì)詭異地出現(xiàn)隨機(jī)VRAM峰值,尤其是在批量生成時(shí)。為此在unsloth中,添加了批量生成功能,以減少內(nèi)存峰值。
Unsloth團(tuán)隊(duì)介紹
另外值得一提的是,Unsloth目前在Github上有2萬多星,但核心團(tuán)隊(duì)Unsloth AI,只有兩兄弟。
Daniel Han,Unsloth AI的CTO,2021年畢業(yè)于悉尼科技大學(xué)。2022-2023年,在悉尼的MoonShot AI擔(dān)任開源開發(fā)者。
Michael Han,Unsloth AI的CEO,2019年畢業(yè)于新南威爾士大學(xué)(The University of New South Wales,UNSW)。在實(shí)習(xí)期間,他曾提高了多個(gè)算法實(shí)現(xiàn)的速度。