PaddleFormers驱动:最少国产算力完成DeepSeek-V3(671B)全参数微调实践

近期,我们基于PaddleFormers v1.0,在128卡昆仑芯P800上成功完成了DeepSeek-V3(671B)模型的全参数微调实验。此次实践的核心目标在于双重探索:一是验证超大规模模型在特定业务场景中的可控性与实际落地能力,为模型在未来实际业务中的应用奠定基础;二是系统性地探索全参数微调在性能优化、训练效率提升以及资源调度等关键领域的技术路径,解锁模型训练的更高效能。基于此,我们整理了在实践过程中构建的整体解决方案,与开发者共享。

项目亮点
1. 昆仑芯与飞桨框架联合支持高性能专家并行通信库DeepEP
昆仑芯与飞桨框架联合支持高性能专家并行通信库DeepEP,结合通信-计算重叠优化,有效掩盖专家并行通信延迟,提升整体通信效率。昆仑芯实现了对Normal、Low-Latency两种模式的全量支持,覆盖了节点内(Intranode)与跨节点(Internode)的通信场景。在接口设计上,飞桨采用了与GPU统一的封装标准,确保了底层硬件的透明化,真正实现了用户的零感知接入与无感使用。该技术进展为实现128卡DeepSeek-V3-671B全参数微调方案奠定了坚实基础。
2. 128卡实现DeepSeek-V3-671B全参数微调
我们采用的128卡方案,是目前已知业内最小国产算力资源的全参数微调方案。这一方案在保证训练效果的同时,显著降低了算力需求,为资源的高效利用提供了范例。为了在128卡上实现这一目标,我们采用了混合并行训练策略,整合了 Sharding并行、流水线并行、序列并行、张量并行和专家并行等先进并行训练技术,并创新性地引入了subbatch处理、优化器offload等优化方法。这一系列创新举措确保了在128卡(16台机器)环境下,能够实现对DeepSeek-V3模型的全参数微调,为大规模模型的训练提供了更为高效和稳定的解决方案。
3. 多硬件算子验证工具优化
实践过程中,我们引入了PaddleAPITest多硬件算子验证工具。这一工具的引入,确保了在GPU收敛后,模型跑通即在多硬件设备上达到理想的收敛状态。一方面,传统的新硬件适配流程从算子适配-组网适配-精度验证-错误算子定位与修复这一串行流程,升级成为了并行流程,并且将算子修复工作提前进行,大大提升了适配效率。另一方面,PaddleAPITest工具有效保证了验证结果的准确性,为模型的稳定训练提供了有力保障。
参考链接:
https://github.com/PFCCLab/PaddleAPITest

快速开始指南
1. 硬件驱动(支持昆仑芯DeepEP)
Driver Version: 5.0.21.26,确保硬件驱动满足实验要求
2. 镜像
-
拉取镜像
docker pull ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleqa:xpu-ubuntu2204-x86_64-gcc123-py310
-
启动容器
docker run --name p800-xpu --net=host -itd --privileged -w /root \ ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleqa:xpu-ubuntu2204-x86_64-gcc123-py310 \ /bin/bashdocker exec -it p800-xpu /bin/bash
3. 环境配置
-
安装飞桨框架
python -m pip install paddlepaddle-xpu -i https://www.paddlepaddle.org.cn/packages/nightly/xpu-p800
-
安装PaddleFormers
git clonehttps://github.com/PaddlePaddle/PaddleFormers.git python -m pip install -r requirements.txt python -m pip install -e.
通过上述命令,完成飞桨框架和PaddleFormers的安装与环境配置,为后续的数据处理和模型训练搭建好平台。
4. 数据准备
本次实验采用ErnieKit格式类数据集,以下是部分数据样例。
{"src": "Give three tips for staying healthy.", "tgt": "1.Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule."}{"src": "What are the three primary colors?", "tgt": "The three primary colors are red, blue, and yellow."}{"src": "Describe the structure of an atom.", "tgt": "An atom is made up of a nucleus, which contains protons and neutrons, surrounded by electrons that travel in orbits around the nucleus. The protons and neutrons have a positive charge, while the electrons have a negative charge, resulting in an overall neutral atom. The number of each particle determines the atomic number and the type of atom."}{"src": "How can we reduce air pollution?", "tgt": "There are a number of ways to reduce air pollution, such as shifting to renewable energy sources, encouraging the use of public transportation, prohibiting the burning of fossil fuels, implementing policies to reduce emissions from industrial sources, and implementing vehicle emissions standards. Additionally, individuals can do their part to reduce air pollution by reducing car use, avoiding burning materials such as wood, and changing to energy efficient appliances."}{"src": "Describe a time when you had to make a difficult decision.", "tgt": "I had to make a difficult decision when I was working as a project manager at a construction company. I was in charge of a project that needed to be completed by a certain date in order to meet the client’s expectations. However, due to unexpected delays, we were not able to meet the deadline and so I had to make a difficult decision. I decided to extend the deadline, but I had to stretch the team’s resources even further and increase the budget. Although it was a risky decision, I ultimately decided to go ahead with it to ensure that the project was completed on time and that the client’s expectations were met. The project was eventually successfully completed and this was seen as a testament to my leadership and decision-making abilities."}{"src": "Identify the odd one out.Twitter, Instagram, Telegram", "tgt": "Telegram"}
5. 训练配置
-
上下文长度-配置文件

-
启动脚本

6. 启动命令
mpirun bash run_full_32k.sh

实验效果
1. 性能指标

2. 收敛效果
-
32K长度的上下文场景下,100个step,loss收敛效果。

-
4K长度的上下文场景下,100个step ,loss收敛效果。


实验总结与关键注意事项
1. 大规模参数训练中的显存问题与解决方案
在大规模参数的深度学习模型训练场景下,优化器状态占用的显存极其庞大。在计算资源有限或单卡显存不足的情况下,优化器状态通常难以完全存入加速卡显存。针对这一问题,采用Offload技术成为必要之举。通过以内存空间换取显存容量,即把部分优化器状态从显存转移到内存中,从而为训练任务的持续运行提供坚实保障,避免因显存不足而导致训练中断。
2. 长序列输入训练中的显存挑战与应对策略
当模型面临长序列输入时,前向计算过程中激活值峰值会伴随token数量的增加而急速攀升,这种情况极易致使显存被耗尽,进而中断训练。为此,引入Subbatch方法是行之有效的举措。该方法借助分段计算的方式,将长序列输入分割成多个子批次进行计算,虽然增加了计算的时间成本,但有效节省了显存空间,有力确保了训练流程得以稳步推进。
3. MoE模型训练中的负载均衡与优化技巧
在采用MoE(Mixture of Experts)架构的模型训练中,专家间负载不均衡的情况极易引发OOM(Out Of Memory,内存耗尽)错误。故而,合理引入Sequence-Wise Auxiliary Loss和Auxiliary-Loss-Free,对于优化模型训练过程而言十分关键。以下是本次实验过程中提炼总结出的关键注意事项:
-
Gate计算隔离:在模型计算过程中,必须确保e_score_correction_bias参数仅应用于门控权重计算,严格避免其传递至后续的FFN(Feed-Forward Network,前馈神经网络)模块,以此保证模块间的计算独立性与准确性,防止因参数传递错误导致的模型性能下降。
-
AuxLoss计算适配:在应用SP(Sequence Parallelism,序列并行)或Subbatch等并行策略时,需格外留意seq_len(序列长度)的实际取值。只有确保取值准确,才能保障损失计算的正确性,避免因数据错漏引发的训练偏差,确保模型能够按照预期的方向进行优化。
-
配置调整优化:Hugging Face提供的部分配置参数(如aux_loss_alpha),因其具有通用性可能与具体训练场景存在适配问题。因此,需要结合实际训练需求对这些参数进行针对性调优,通过不断地尝试和调整,以充分发挥模型性能,提升训练效果,使模型能够更好地适应特定的业务场景和数据特点。
本次基于PaddleFormers,针对DeepSeek-V3模型展开的全参数微调与性能优化实践,不仅在技术创新方面取得了显著成果,积累了宝贵的实践经验,也为未来大规模模型训练技术的发展提供了有力的参考和借鉴。期待这些成果能够为行业带来积极的推动作用,促进深度学习技术在更多领域的应用与落地。本次实践中,昆仑芯以其卓越的性能和创新的技术,为DeepSeek-V3模型的全参数微调提供了坚实的硬件支撑。我们相信,在未来的AI技术发展中,飞桨深度学习框架与昆仑芯将继续发挥其独特优势,赋能更多人工智能应用场景,推动AI技术的普及与落地。

关注【飞桨PaddlePaddle】公众号
获取更多技术内容~
更多推荐




所有评论(0)