DeepSeek V3+R1滿血微調工具上線!一鍵啟動,硬體要求降10倍

机器之心發表於2025-02-19

DeepSeek V3/ R1 火爆全網,基於原始模型的解決方案和 API 服務已隨處可見,陷入低價和免費內卷。

如何站在巨人肩膀上,透過後訓練(post-training)結合專業領域資料,低成本打造高質量私有模型,提升業務競爭力與價值?

已收穫近 4 萬 GitHub Star 的 Colossal-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

DeepSeek V3/R1 滿血版引數高達 6710 億,如何低成本進行低成本微調呢?僅需以下幾個步驟,即可快速完成。

資料集準備

該指令碼接收 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 --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

有關每個引數的更多詳細資訊,可以執行 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

相關文章