Colossal-AI开源工具箱:低成本微调DeepSeek V3+R1,打造高质量私有模型

Colossal-AI开源工具箱助你低成本微调DeepSeek V3/R1,轻松打造高质量私有模型。

原文标题:DeepSeek V3+R1满血微调工具上线!一键启动,硬件要求降10倍

原文作者:机器之心

冷月清谈:

Colossal-AI 发布了一个开源大模型后训练工具箱,可以低成本地微调 DeepSeek V3/R1 等大型语言模型。该工具箱支持多种硬件,包括英伟达 GPU 和华为昇腾 NPU,并提供了多种并行策略,可以根据硬件规模进行调整。

对于 DeepSeek V3/R1 671B 模型,该工具箱使用 LoRA 优化技术,将硬件要求降低了近 10 倍。只需准备数据集和模型权重,即可使用一键启动脚本进行微调。

此外,该工具箱还提供了完整的强化学习工具链,并以 Qwen2.5-3B-Base 模型为例验证了 GRPO 算法。用户可以根据自身需求自定义奖励函数。

Colossal-AI 旨在帮助用户基于开源模型低成本、快速地构建私有模型。

怜星夜思:

1、除了LoRA,这个工具箱还支持哪些其他的优化技术?这些技术对微调效果和效率有什么影响?
2、如果我想用自己的数据集微调DeepSeek,数据集的格式有什么要求?除了JSONL格式,还支持其他格式吗?
3、文章提到了Colossal-AI支持华为昇腾NPU,实际使用体验如何?性能和稳定性方面有什么优缺点?

原文内容

机器之心发布
机器之心编辑部

DeepSeek V3/ R1 火爆全网,基于原始模型的解决方案和 API 服务已随处可见,陷入低价和免费内卷。


如何站在巨人肩膀上,通过后训练(post-training)结合专业领域数据,低成本打造高质量私有模型,提升业务竞争力与价值?


已收获近 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


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



© THE END 

转载请联系本公众号获得授权

投稿或寻求报道:[email protected]

根据文章,数据集需要是 JSONL 格式,每行一个聊天对话列表,包含角色和内容。这个格式兼容 Huggingface chat template,可以自定义 system prompt。

说实话,实际效果还得看具体模型和数据集。LoRA 在很多情况下可以取得不错的效果,但有时候也可能导致性能下降。混合精度训练一般都能提高效率,但也需要注意数值稳定性问题。梯度检查点比较万金油,但会增加训练时间。

我不确定除了 JSONL 之外是否支持其他格式,不过可以看看 Colossal-AI 的文档或者 GitHub repo,说不定有更多信息。

性能和稳定性方面,建议参考一些实际的测试数据或者用户反馈。昇腾NPU 的硬件性能在不断提升,但软件生态和工具链的成熟度还需要时间来完善。个人觉得可以关注一下 Colossal-AI 社区,看看有没有其他用户分享在昇腾NPU 上的使用经验。

关于在昇腾NPU上的使用体验,我没有实际用过,不好评价。不过文章中提到了可以使用昇腾NPU进行 DeepSeek V3/R1 的微调,并且提供了一个 FP8 权重转换为 BF16 的脚本,看起来对昇腾NPU的支持还是比较完善的。

关于这个问题,除了LoRA,Colossal-AI 工具箱还支持梯度检查点、混合精度训练等优化技术。这些技术都可以降低显存消耗,提高训练效率。梯度检查点牺牲一部分计算速度来换取显存空间,混合精度训练则通过使用 FP16 或 BF16 来减少内存占用和计算量,从而加快训练速度。

补充一下,LoRA 主要通过冻结预训练模型的权重,并在每个 Transformer 层注入可训练的秩分解矩阵来减少训练参数,从而降低硬件需求。而混合精度和梯度检查点则侧重于计算和内存优化,它们可以与 LoRA 结合使用,进一步提升微调效率。

如果你的数据集不是 JSONL 格式,可以考虑转换成Hugging Face datasets格式,Colossal-AI兼容Hugging Face 生态,理论上也是支持的。

昇腾NPU 的生态相对来说不如英伟达的 CUDA 生态成熟,可能在一些工具和库的支持上会有一些不足。不过昇腾的优势在于国产化,对于一些特定场景可能会有政策和成本方面的优势。