DeepSeek滿血微調秘籍開源!站在巨人肩膀打造私有模型,一手教程在此

小明 發自 凹非寺

量子位 | 公眾號 QbitAI
DeepSeek爆火甚至引發API低價內卷……
但是別忘了開源模型的最大好處是提供了“巨人的肩膀”啊!
微調DeepSeek-V3/R1,低成本打造高質量私有模型、提高業務競爭力,或許才是當下行業內更迫切的需求。
就在剛剛,已收穫近4萬GitHub StarColossal-AI釋出開源大模型後訓練工具箱,它包含:
  • DeepSeek-V3/R1滿血671B LoRA低成本SFT微調;
  • 完整的強化學習工具鏈PPO、GRPO、DPO、SimPO等;
  • 無縫適配DeepSeek系列蒸餾模型在內的HuggingFace開源模型;
  • 相容支援英偉達GPU華為昇騰NPU等多種硬體;
  • 支援混合精度訓練,gradient checkpoint等訓練加速降低成本;
  • 靈活的訓練配置介面,支援自定義獎勵函式、損失函式等;
  • 提供靈活的並行策略配置介面,包括資料並行、模型並行、專家並行、ZeRO和Offload等,以適應不同硬體規模。
開源地址:https://github.com/hpcaitech/ColossalAI

低成本監督微調滿血版DeepSeek-V3/R1-671B

6710億引數規模的DeepSeek-V3/R1低成本微調,僅需以下幾步,即可快速完成。

資料集準備

該指令碼接收JSONL格式的檔案作為輸入資料集,例如:
https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_sft_data.jsonl。
資料集的每一行應為一個聊天對話列表。例如:
[{“role”: “user”, “content”: “你好,最近怎麼樣?”}, {“role”: “assistant”, “content”: “我很好。今天有什麼可以幫你的嗎?”}]
[{“role”: “user”, “content”: “火燒赤壁 曹操為何不撥打119求救?”}, {“role”: “assistant”, “content”: “因為在三國時期,還沒有電話和現代的消防系統,所以曹操無法撥打119求救。”}]
該資料格式,相容Huggingface chat template,支援自定義system prompt,因此可靈活按需配置。

模型權重準備

為保證更好的微調效果,使用BF16權重進行微調。
如果已下載了FP8的DeepSeek-V3/R1權重,可以使用DeepSeek官方指令碼https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/fp8_cast_bf16.py透過GPU將權重轉換為BF16。
對於使用國產華為昇騰算力,可以下載https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/LLM/DeepSeek/DeepSeek-V2/NPU_inference/fp8_cast_bf16.py指令碼轉換權重。

使用方法

在準備好資料集和模型權重後,可使用Colossal-AI 提供的一鍵啟動指令碼https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/lora_finetune.py。
該指令碼與常見SFT指令碼類似,且完全相容HuggingFace PEFT,啟動命令:
colossalai run —hostfile path-to-host-file —nproc_per_node 8 lora_finetune.py —pretrained path-to-DeepSeek-R1-bf16 —dataset path-to-dataset.jsonl —plugin moe —lr 2e-5 —max_length 256 -g —ep 8 —pp 3 —batch_size 24 —lora_rank 8 —lora_alpha 16 —num_epochs 2 —warmup_steps 8 —tensorboard_dir logs —save_dir DeepSeek-R1-bf16-lora
有關每個引數的更多詳細資訊,可以執行python lora_finetune.py—help檢視。該指令碼可透過tensorboard記錄學習率、loss、grad norm資訊,方便對訓練進行監控。

使用LoRA最佳化硬體資源消耗

透過使用LoRA等最佳化,示例命令已將SFT DeepSeek-V3/R1-671B最低硬體要求降低近10倍,可使用32個Ascend 910B NPU 64GB(使用 ep=8,pp=4)或24個H100/H800 GPU(使用 ep=8,pp=3)。如果你透過—zero_cpu_offload啟用CPU offload,硬體要求可以進一步降低,但會損失一定的訓練速度。
如下圖驗證,在SFT DeepSeek V3/R1 671B時,Loss 可以順利降低。
對於資金充裕的開發團隊,也可以使用上述指令碼,將並行度高效擴充套件至數百及數千卡,快速完成DeepSeek-V3/R1-671B全參微調或並行加速。
對於預算有限,又想借助強化學習構建自己的類DeepSeek-R1模型, Colossal-AI也提供瞭解決方案,並利用小模型對演算法進行了驗證。

透過強化學習微調蒸餾版DeepSeek

Colossal-AI團隊驗證並實現了DeepSeek論文中的GRPO演算法及verifiable reward,使用Qwen2.5-3B-Base模型進行了實驗。其中,獎勵的設計如下:
  1. 獎勵=0,如果格式是正確的;
  2. 獎勵=1, 如果格式是正確的但是結果是錯誤的;
  3. 獎勵=10,如果格式與結果都是正確的。
Colossal-AI團隊以Qwen2.5-3B-Base模型為例,提供了用於驗證GRPO的對話模板及設定

https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/conversation_template/Qwen_Qwen2.5-3B.json

),透過配置以下bash 檔案,即可一鍵啟動:

https://github.com/hpcaitech/ColossalAI/blob/main/applications/ColossalChat/examples/training_scripts/train_grpo.sh

同時,在GRPO章節,Colossal-AI團隊還提供了驗證過程中的部分發現及各種引數的詳細描述,可供參考。
程式碼中設計了可靈活配置獎勵函式的模板,因此,使用者可根據自己的具體情況設計自己的獎勵函式體系。
由下圖可以看到,即使是3B的模型,平均獎勵與模型回覆長度隨著時間逐步增長。
隨著訓練的進行,我們可以看到一些有意思的例子。例如隨著訓練迭代,模型開始了自我糾正

Colossal-AI:最佳後訓練工具箱

Colossal-AI在深耕大模型預訓練降本增效的基礎上,致力於進一步成為開發者開箱即用的最佳後訓練工具,幫助使用者基於開源模型,低成本快速構建私有模型。
開源地址:https://github.com/hpcaitech/ColossalAI
—  —
一鍵關注 👇 點亮星標
科技前沿進展每日見
一鍵三連「點贊」「轉發」「小心心」
歡迎在評論區留下你的想法!

相關文章