全参数微调DeepSeek满血版工程开源!

2025.03.11

近日,由中国科学院自动化研究所与中科闻歌联合推出的 DeepSeek-V3/R1 671B 全参数微调开源方案正式发布!这个方案完整开放了从模型训练到推理部署的全链路工程代码,同步公开实践验证过的技术经验与调优策略,为开发者提供可直接部署的工业化级大模型训练框架。


01 项目核心特点


1、完整训练逻辑代码:基于DeepSeek-V3论文,并结合DeepSeek-V2代码,该项目实现了包含训练核心逻辑的modeling_deepseek.py文件,确保与官方架构兼容。


2、高效并行训练策略:支持数据并行(DeepSpeed ZeRO)与序列并行(SP),在32台H100服务器集群上完成671B模型的满血版模型全参数微调。


3、训练实战经验总结:提供多组实验配置对比(如不同超参数、并行策略选择下的显存占用),推荐最优训练参数,助开发者少走弯路。


02 技术价值解析


技术角度:通过全参数微调,DeepSeek 模型能更好地训练并拟合目标任务模式和数据分布,整体训练效果优于 LoRA 等低资源微调方案。


应用角度:针对模型在预训练阶段已具备基础知识的领域,全参数微调能够挖掘模型在特定垂直领域(如社会计算、媒体领域等)各种下游任务的性能潜力。


03 快速上手指南


1. 硬件配置


北京超级云计算中心基于H100 GPU集群为该项目构建了高性能计算底座,其技术服务团队通过深度调优实现了计算环境的适配性优化。单台服务器配置如下表,集群共有 32 台相同配置的机器,共享 100TB 存储空间,挂载路径为 /nfs。机器操作系统为 Ubuntu 22.04,机器之间使用 IB 网络进行通信,GPU 之间通过 NVLink 通信,CUDA 版本为 12.6。



2. 环境配置


本项目基于 xtuner 框架进行扩展和改进,使其支持 Deepseek V3/R1(即 DeepseekV3ForCausalLM 模型架构)的全参数微调,支持数据并行(DeepSpeed ZeRO based DP)和序列并行(Sequence Parallel, SP)。安装 Python 环境,可根据项目中 requirements.txt 安装依赖包,并将 ./code/xtuner 与 DeepseekV3ForCausalLM 训练相关的核心代码覆盖原始 xtuner package 的对应代码即可。




3 .数据准备

该项目基于 OpenAI 标准数据格式进行扩展以兼容 reasoning 数据,每条原始训练数据格式如下。如果有思考过程,则 assistant 角色的 reasoning_content 字段非空。



为了简化处理逻辑,该项目将 reasoning_content 和 content 按照 Deepseek 的训练格式合并到 content 字段中。此外,为了兼容多轮对话的训练逻辑,还为 assistant 角色的每轮添加了 loss 字段,仅对值为 true 的 content 内容计算 loss。



为了更清晰地展示数据存储格式,该项目提供了一份转换后的数据样例件 ./data/train_example.json 以供参考。在实际训练时,程序会根据 Deepseek V3/R1 的训练模版自动转换为如下格式,这里仅供展示:



4 .启动训练

该项目提供了训练代码和训练启动脚本,其中:

./code/scripts/sft_deepseek.py:sft训练所需的配置文件,包括超参数设置、model和tokenizer配置、训练策略等,模型训练相关的配置均在此文件修改。

./code/scripts/sft_deepseek.sh:sft训练启动脚本,该脚本为单个节点的执行文件,因此需要通过 slurm 或 pdsh 在每台机器执行。对于每台机器,训练启动命令的唯一不同为 NODE_RANK 值,如果共 32 台机器,则该编号分别从 0 到 31。

以下是该项目提供的几组实验的结论,包括在不同并行策略等配置下模型训练的可行性。训练数据 ~100k,训练上下文长度为 32k。表中报告了每次实验使用的机器数量(nodes)、序列并行度(sp)、数据并行方式(dp)、单卡 batch size(bs)、迭代轮次(epoch)、学习率(lr)、单卡显存(mem)、实验记录和备注(notes)。



以下是训练过程中的一个截图,从 DeepSeek V3 对该项目使用的 reasoning 数据进行全参数微调时,起始 loss 通常在 3.5 左右,经过 1 epoch 训练后,loss 收敛到 1.2 左右。



5 .模型权重转换

训练过程中建议使用至少 100TB 的 SSD 大容量存储,因为单个 pth 中间结果大约占 7.4TB 硬盘空间。训练完成后,需要将 pth 转换为主流推理框架(如vllm等)较好兼容的 huggingface 格式。在单台机器节点执行 bash ./code/scripts/convert_pth_to_hf.sh 即可完成模型权重格式转换,可根据实际情况修改脚本中的 pth 路径和权重保存路径。

需要注意的是,由于本过程对 CPU 内存有较大需求,因此可以通过虚拟内存进行扩展,防止 Out-of-memory。Swap(交换分区) 是 Linux 的虚拟内存,作用是当物理内存(RAM)不够用时,把部分数据存入磁盘,释放 RAM。



6 .模型推理部署

该项目使用 vLLM 对全参数微调后的模型进行简单部署测试。如果使用 slurm 集群,可参考该项目提供的脚本并执行 sbatch 命令 sbatch ./code/scripts/vllm_deploy_slurm.sh 即可提交作业。半精度(bf16/fp16)模型建议使用4台机器32卡进行部署,如需配置 ray 或 api server 的端口号,可自行修改 sh 文件。如果需要通过 pdsh 启动部署(假设使用 node0~node3 四台机器),可参考以下步骤: 

1、设置环境变量(node0~node3)。



2、启动 Ray Head(node0)。





3、启动 Ray Worker(node1~node3)。



4、启动 vLLM(node0)。



启动完成后,可通过 curl 命令测试接口是否正常启动:



稍等片刻后,如果终端输出符合预期的响应结果,则说明从训练到部署到整个过程顺利完成!🎉


Github开源地址:

https://github.com/ScienceOne-AI/DeepSeek-671B-SFT-Guide



构建云上科研工作环境

让计算更简单,让生活更美好

免费试算