仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
近期,由中国科学院自动化研究所与中科闻歌联合推出的DeepSeek-V3/R1671B全参数微调开源方案正式发布!该项目完整公开了从模型训练到推理的全流程代码与脚本,并附带了实际训练中的经验总结与优化建议,为大模型开发者提供了一套可直接落地实战的解决方案。
1、完整训练逻辑代码:基于DeepSeek-V3论文,并结合DeepSeek-V2代码,该项目实现了包含训练核心逻辑的modeling_deepseek.py文件,确保与官方架构兼容。
2、高效并行训练策略:支持数据并行(DeepSpeedZeRO)与序列并行(SP),在32台H100服务器集群上完成671B模型的满血版模型全参数微调。
3、训练实战经验总结:提供多组实验配置对比(如不同超参数、并行策略选择下的显存占用),推荐最优训练参数,助开发者少走弯路。
二、项目意义
技术角度:通过全参数微调,DeepSeek模型能更好地训练并拟合目标任务模式和数据分布,整体训练效果优于LoRA等低资源微调方案。
应用角度:针对模型在预训练阶段已具备基础知识的领域,全参数微调能够挖掘模型在特定垂直领域(如社会计算、媒体领域等)各种下游任务的性能潜力。
Youareahelpfulassistant.用户问题\n思考过程\n\n\n最终回答
六、启动训练
该项目提供了训练代码和训练启动脚本,其中:
./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)、单卡batchsize(bs)、迭代轮次(epoch)、学习率(lr)、单卡显存(mem)、实验记录和备注(notes)。
七、模型权重转换
训练过程中建议使用至少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。
八、模型推理部署
该项目使用vLLM对全参数微调后的模型进行简单部署测试。如果使用slurm集群,可参考该项目提供的脚本并执行sbatch命令sbatch./code/scripts/vllm_deploy_slurm.sh即可提交作业。半精度(bf16/fp16)模型建议使用4台机器32卡进行部署,如需配置ray或apiserver的端口号,可自行修改sh文件。如果需要通过pdsh启动部署(假设使用node0node3四台机器),可参考以下步骤:node3)。
1、设置环境变量(node0
2、启动RayHead(node0)。
稍等片刻后,如果终端输出符合预期的响应结果,则说明从训练到部署到整个过程顺利完成!🎉
Github开源地址:
https ://github.com/ScienceOne-AI/DeepSeek-671B-SFT-Guide