DeepSeek V3+R1滿(mǎn)血微調(diào)工具上線(xiàn)!一鍵啟動(dòng),硬件要求降10倍
DeepSeek V3/ R1 火爆全網(wǎng),基于原始模型的解決方案和 API 服務(wù)已隨處可見(jiàn),陷入低價(jià)和免費(fèi)內(nèi)卷。
如何站在巨人肩膀上,通過(guò)后訓(xùn)練(post-training)結(jié)合專(zhuān)業(yè)領(lǐng)域數(shù)據(jù),低成本打造高質(zhì)量私有模型,提升業(yè)務(wù)競(jìng)爭(zhēng)力與價(jià)值?
已收獲近 4 萬(wàn) GitHub Star 的 Colossal-AI,發(fā)布開(kāi)源大模型后訓(xùn)練工具箱,包含:
- DeepSeek V3/ R1 滿(mǎn)血 671B LoRA 低成本 SFT 微調(diào);
- 完整的強(qiáng)化學(xué)習(xí)工具鏈 PPO,GRPO,DPO,SimPO 等;
- 無(wú)縫適配 DeepSeek 系列蒸餾模型在內(nèi)的 HuggingFace 開(kāi)源模型;
- 兼容支持英偉達(dá) GPU、華為昇騰 NPU 等多種硬件;
- 支持混合精度訓(xùn)練,gradient checkpoint 等訓(xùn)練加速降低成本;
- 靈活的訓(xùn)練配置接口,支持自定義獎(jiǎng)勵(lì)函數(shù)、損失函數(shù)等;
- 提供靈活的并行策略配置接口,包括數(shù)據(jù)并行、模型并行、專(zhuān)家并行、ZeRO 和 Offload 等,以適應(yīng)不同硬件規(guī)模。
開(kāi)源地址:https://github.com/hpcaitech/ColossalAI
低成本監(jiān)督微調(diào)滿(mǎn)血版 DeepSeek V3/R1 671B
DeepSeek V3/R1 滿(mǎn)血版參數(shù)高達(dá) 6710 億,如何低成本進(jìn)行低成本微調(diào)呢??jī)H需以下幾個(gè)步驟,即可快速完成。
數(shù)據(jù)集準(zhǔn)備
該腳本接收 JSONL 格式的文件作為輸入數(shù)據(jù)集,例如 https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_sft_data.jsonl。數(shù)據(jù)集的每一行應(yīng)為一個(gè)聊天對(duì)話(huà)列表。例如:
[{"role": "user", "content": "你好,最近怎么樣?"}, {"role": "assistant", "content": "我很好。今天有什么可以幫你的嗎?"}]
[{"role": "user", "content": "火燒赤壁 曹操為何不撥打 119 求救?"}, {"role": "assistant", "content": "因?yàn)樵谌龂?guó)時(shí)期,還沒(méi)有電話(huà)和現(xiàn)代的消防系統(tǒng),所以曹操無(wú)法撥打 119 求救。"}]
該數(shù)據(jù)格式,兼容 Huggingface chat template,支持自定義 system prompt,因此可靈活按需配置。
模型權(quán)重準(zhǔn)備
為保證更好的微調(diào)效果,使用 BF16 權(quán)重進(jìn)行微調(diào)。
如果已下載了 FP8 的 DeepSeek V3/R1 權(quán)重,可以使用 DeepSeek 官方腳本 https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/fp8_cast_bf16.py 通過(guò) GPU 將權(quán)重轉(zhuǎn)換為 BF16。
對(duì)于使用國(guó)產(chǎn)華為昇騰算力,可以下載 https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/LLM/DeepSeek/DeepSeek-V2/NPU_inference/fp8_cast_bf16.py 腳本轉(zhuǎn)換權(quán)重。
使用方法
在準(zhǔn)備好數(shù)據(jù)集和模型權(quán)重后,可使用 Colossal-AI 提供的一鍵啟動(dòng)腳本 https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_finetune.py
該腳本與常見(jiàn) SFT 腳本類(lèi)似,且完全兼容 HuggingFace PEFT,啟動(dòng)命令:
colossalai run --hostfile path-to-host-file --nprocpernode 8 lorafinetune.py --pretrained path-to-DeepSeek-R1-bf16 --dataset path-to-dataset.jsonl --plugin moe --lr 2e-5 --maxlength 256 -g --ep 8 --pp 3 --batchsize 24 --lorarank 8 --loraalpha 16 --numepochs 2 --warmupsteps 8 --tensorboarddir logs --save_dir DeepSeek-R1-bf16-lora
有關(guān)每個(gè)參數(shù)的更多詳細(xì)信息,可以運(yùn)行 python lora_finetune.py --help 查看。該腳本可通過(guò) tensorboard 記錄學(xué)習(xí)率、loss、grad norm 信息,方便對(duì)訓(xùn)練進(jìn)行監(jiān)控。
使用 LoRA 優(yōu)化硬件資源消耗
通過(guò)使用 LoRA 等優(yōu)化,示例命令已將 SFT DeepSeek V3/R1 671B 最低硬件要求降低近 10 倍,可使用 32 個(gè) Ascend 910B NPU 64GB(使用 ep=8,pp=4)或 24 個(gè) H100/H800 GPU(使用 ep=8,pp=3)。如果你通過(guò) --zero_cpu_offload 啟用 CPU offload,硬件要求可以進(jìn)一步降低,但會(huì)損失一定的訓(xùn)練速度。
如下圖驗(yàn)證,在 SFT DeepSeek V3/R1 671B 時(shí),Loss 可以順利降低:
對(duì)于資金充裕的開(kāi)發(fā)團(tuán)隊(duì),也可以使用上述腳本,將并行度高效擴(kuò)展至數(shù)百及數(shù)千卡,快速完成 DeepSeek V3/R1 671B 全參微調(diào)或并行加速。
對(duì)于預(yù)算有限,又想借助強(qiáng)化學(xué)習(xí)構(gòu)建自己的類(lèi) DeepSeek R1 模型, Colossal-AI 也提供了解決方案,并利用小模型對(duì)算法進(jìn)行了驗(yàn)證。
通過(guò)強(qiáng)化學(xué)習(xí)微調(diào)蒸餾版 DeepSeek
Colossal-AI 團(tuán)隊(duì)驗(yàn)證并實(shí)現(xiàn)了 DeepSeek 論文中的 GRPO 算法及 verifiable reward,使用 Qwen2.5-3B-Base 模型進(jìn)行了實(shí)驗(yàn)。其中,獎(jiǎng)勵(lì)的設(shè)計(jì)如下:
1. 獎(jiǎng)勵(lì) = 0,如果格式是正確的;
2. 獎(jiǎng)勵(lì) = 1, 如果格式是正確的但是結(jié)果是錯(cuò)誤的;
3. 獎(jiǎng)勵(lì) = 10,如果格式與結(jié)果都是正確的。
Colossal-AI 團(tuán)隊(duì)以 Qwen2.5-3B-Base 模型為例,提供了用于驗(yàn)證 GRPO 的對(duì)話(huà)模板及設(shè)定(https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/conversation_template/Qwen_Qwen2.5-3B.json),通過(guò)配置以下 bash 文件,即可一鍵啟動(dòng):
https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/train_grpo.sh
同時(shí),在 GRPO 章節(jié),Colossal-AI 團(tuán)隊(duì)還提供了驗(yàn)證過(guò)程中的部分發(fā)現(xiàn)及各種參數(shù)的詳細(xì)描述,可供參考。
代碼中設(shè)計(jì)了可靈活配置獎(jiǎng)勵(lì)函數(shù)的模板,因此,用戶(hù)可根據(jù)自己的具體情況設(shè)計(jì)自己的獎(jiǎng)勵(lì)函數(shù)體系。
由下圖可以看到,即使是 3B 的模型,平均獎(jiǎng)勵(lì)與模型回復(fù)長(zhǎng)度隨著時(shí)間逐步增長(zhǎng)。
隨著訓(xùn)練的進(jìn)行,我們可以看到一些有意思的例子。例如隨著訓(xùn)練迭代,模型開(kāi)始了自我糾正:
Colossal-AI:最佳后訓(xùn)練工具箱
Colossal-AI 在深耕大模型預(yù)訓(xùn)練降本增效的基礎(chǔ)上,致力于進(jìn)一步成為開(kāi)發(fā)者開(kāi)箱即用的最佳后訓(xùn)練工具,幫助用戶(hù)基于開(kāi)源模型,低成本快速構(gòu)建私有模型。
開(kāi)源地址:https://github.com/hpcaitech/ColossalAI