写点什么

训推全面支持、开箱即用!DeepSeek V3 昇思 MindSpore 版本上线开源社区

作者:科技热闻
  • 2025-02-10
    浙江
  • 本文字数:5843 字

    阅读完需:约 19 分钟

摘要:昇思已支持在昇腾集群上训练和推理 DeepSeek-V3 671B


近日,基于昇腾 AI 硬件与昇思 MindSpore AI 框架版本的 DeepSeek-V3 完成开发支持并上线昇思开源社区,面向开发者提供开箱即用的预训练和推理能力,并已成功在大规模集群上预训练和部署。


应用昇思 MindSpore 大模型使能套件,依托昇思多维混合分布式能力、自动并行、Dryrun 集群内存仿真等技术,天级快速适配 DeepSeek V3 新增模型结构和分布式并行训练能力。同时,昇思 MindSpore 通过深度优化 MLA、DeepSeekMoE 等网络结构的推理,实现了高效的推理部署性能。


当前,通过获取昇思 MindSpore 版 DeepSeek V3 开源镜像,开发者可直接进行 DeepSeek-V3 的预训练和推理部署。


开源链接


昇思 MindSpore 开源社区训练代码:


https://gitee.com/mindspore/mindformers/tree/dev/research/deepseek3


魔乐社区推理代码:


https://modelers.cn/models/MindSpore-Lab/DeepSeek-V3


以下是完整的手把手教程,助力开发者开箱即用


【预训练开箱流程】


MindSpore Transformers 支持对 DeepSeek-V3 进行预训练。仓库中提供了一份预训练配置文件供参考,该配置基于 128 台 Atlas 800T A2 (64G),使用 Wikitext-2 数据集进行预训练,可参考多机教程进行使用:


https://gitee.com/mindspore/mindformers/tree/dev/research/deepseek3


便于开发者上手体验,本章节基于此配置进行修改,缩小了 DeepSeek-V3 模型参数量,使其能够在单台 Atlas 800T A2 (64G)上拉起预训练流程。


一、环境介绍


准备一台 Atlas 800T A2 (64G)训练服务器。MindSpore Transformers 的环境依赖如下:


微信截图_20250210102422.png


提供了 DeepSeek-V3 预训练专用 Docker 镜像,通过如下步骤进行使用。


1.下载 Docker 镜像


使用如下命令下载 DeepSeek-V3 预训练专用镜像:


docker pull swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209


2.基于镜像创建容器


使用如下命令新建容器:


image_name=swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209


docker_name=deepseek_v3


docker run -itd -u root \


--ipc=host --net=host \


--privileged \


--device=/dev/davinci0 \


--device=/dev/davinci1 \


--device=/dev/davinci2 \


--device=/dev/davinci3 \


--device=/dev/davinci4 \


--device=/dev/davinci5 \


--device=/dev/davinci6 \


--device=/dev/davinci7 \


--device=/dev/davinci_manager \


--device=/dev/devmm_svm \


--device=/dev/hisi_hdc \


-v /etc/localtime:/etc/localtime \


-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \


-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/bin/hccn_tool \


-v /etc/ascend_install.info:/etc/ascend_install.info \


-v /var/log/npu:/usr/slog \


-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \


-v /etc/hccn.conf:/etc/hccn.conf \


--name "$docker_name" \


"$image_name" \


/bin/bash


3.进入容器


使用如下命令进入容器,并进入代码目录:


docker exec -ti deepseek_v3 bash


cd /home/work/mindformers


二、数据集准备


以 Wikitext-2 数据集为例,参考如下步骤将数据集处理成 Megatron BIN 式文件。


1.下载数据集和分词模型文件


○数据集下载:WikiText2 数据集


https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/dataset/wikitext-2/wikitext-2-v1.zip


○分词模型下载:DeepSeek-V3 的 tokenizer.json


https://huggingface.co/deepseek-ai/DeepSeek-V3/resolve/main/tokenizer.json?download=true


2.生成 Megatron BIN 格式文件


将数据集文件 wiki.train.tokens 和分词模型文件 tokenizer.json 放置在/home/work/dataset 下


使用以下命令转换数据集文件


cd /home/work/mindformers/research/deepseek3


python wikitext_to_bin.py \


--input /home/work/dataset/wiki.train.tokens \


--output-prefix /home/work/dataset/wiki_4096 \


--vocab-file /home/work/dataset/tokenizer.json \


--seq-length 4096 \


--worker 1


三、单机配置样例


基于预训练配置文件 pretrain_deepseek3_671b.yaml 按照如下步骤操作并保存为 pretrain_deepseek3_1b.yaml。


1.修改模型配置

model config

model:


model_config:


type: DeepseekV3Config
auto_register: deepseek3_config.DeepseekV3Config
seq_length: 4096
hidden_size: 2048 # 修改为2048
num_layers: &num_layers 3 # 修改为3
num_heads: 8 # 修改为8
max_position_embeddings: 4096
intermediate_size: 6144 # 修改为6144
offset: 0 # 修改为0
……
复制代码


2.修改 MoE 配置


#moe


moe_config:


expert_num: &expert_num 16 # 修改为 16


first_k_dense_replace: 1 # 修改为 1


……


3.修改并行配置

parallel config for devices num=8

parallel_config:


data_parallel: 2 # 修改为 2


model_parallel: 2 # 修改为 2


pipeline_stage: 2 # 修改为 2


expert_parallel: 2 # 修改为 2


micro_batch_num: &micro_batch_num 4 # 修改为 4


parallel:


parallel_optimizer_config:


optimizer_weight_shard_size: 8                         # 修改为8
复制代码


……


4.修改学习率配置

lr schedule

lr_schedule:


type: ConstantWarmUpLR


warmup_steps: 20 # 修改为 20


5.修改数据集配置


配置数据集路径:

dataset

train_dataset: &train_dataset


data_loader:


type: BlendedMegatronDatasetDataLoader


config:


data_path:


   - 1
- "/home/work/dataset/wiki_4096_text_document" # 修改此项为数据集路径
……
复制代码


配置数据集并行通信配置路径:

mindspore context init config

context:


ascend_config:


 parallel_speed_up_json_path: 
复制代码


"/home/work/mindformers/research/deepseek3/parallel_speed_up.json" # 修改此项为数据集并行通信配置路径


四、拉起任务


进入代码根目录并执行以下命令拉起单台 Atlas 800T A2(64G)预训练任务:


cd /home/work/mindformers


bash scripts/msrun_launcher.sh "run_mindformer.py \


--register_path research/deepseek3 \


--config research/deepseek3/deepseek3_671b/pretrain_deepseek3_1b.yaml"


启动脚本执行完毕会在后台拉起任务,日志保存在/home/work/mindformers/output/msrun_log 下,使用以下命令查看训练日志(由于开启了流水并行 pipeline_stage: 2,loss 只显示在最后一张卡的日志 worker_7.log 中,其他日志显示 loss 为 0):


tail -f /home/work/mindformers/output/msrun_log/worker_7.log


训练 loss 的曲线图如下


图片 1.png


训练过程中的权重 checkpoint 将会保存在/home/work/mindformers/output/checkpoint 下。


【推理部署开箱流程】


采用 BF16 格式的模型权重文件,运行 DeepSeek-V3 推理服务,需要 4 台 Atlas 800I A2(64G)服务器。为缩短开发部署周期,昇思 MindSpore 此次提供了 docker 容器镜像,供开发者快速体验。其主要操作步骤如下:


●执行以下 Shell 命令,下载昇思 MindSpore DeepSeek-V3 推理容器镜像:


docker pull


swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.5.0-infer:20250209


●执行以下 Shell 命令,启动容器镜像,后续操作将均在容器内进行:


docker run -itd --privileged --name=deepseek-v3 --net=host \


--shm-size 500g \


--device=/dev/davinci0 \


--device=/dev/davinci1 \


--device=/dev/davinci2 \


--device=/dev/davinci3 \


--device=/dev/davinci4 \


--device=/dev/davinci5 \


--device=/dev/davinci6 \


--device=/dev/davinci7 \


--device=/dev/davinci_manager \


--device=/dev/hisi_hdc \


--device /dev/devmm_svm \


-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \


-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \


-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \


-v /usr/local/sbin:/usr/local/sbin \


-v /etc/hccn.conf:/etc/hccn.conf \


deepseek_v3_mindspore2.5.0-infer:20250209 \


bash


●执行以下 Shell 命令,将用于下载存储 DeepSeek-V3 权重文件的路径(开箱示例中为./model_path),添加至白名单:


export HUB_WHITE_LIST_PATHS=./model_path


●使用以下 Python 脚本,从魔乐社区下载昇思 MindSpore 版本的 DeepSeek-V3 权重文件至指定路径。完整的权重文件约 1.4TB,请确保指定路径下有充足的可用磁盘空间:


from openmind_hub import snapshot_download


snapshot_download(


repo_,


local_dir="./model_path",


local_dir_use_symlink=False


)


●将./model_path/examples/predict_deepseek3_671B.yaml 文件中的 load_checkpoint 参数配置为权重文件夹绝对路径,并将 tokenizer_file 参数和 vocab_file 参数配置为 tokenizer.json 文件绝对路径。


●在第 1 台至第 4 台服务器上,分别执行以下 Shell 命令,通过 msrun_launcher.sh 启动单次推理测试脚本 run_deepseekv3_predict.py,完成后将显示“生抽和老抽的区别是什么? ”的问题回复。其中,master_ip 需修改设置为第 1 台服务器的实际 IP 地址。

第 1 台服务器(Node 0)

export PYTHONPATH=/root/mindformers/:$PYTHONPATH


export HCCL_OP_EXPANSION_MODE=AIV


export MS_ENABLE_LCCL=off


master_ip=192.168.1.1


cd model_path/DeepSeek-V3/examples


bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 0


output/msrun_log False 300

第 2 台服务器(Node 1)

export PYTHONPATH=/root/mindformers/:$PYTHONPATH


export HCCL_OP_EXPANSION_MODE=AIV


export MS_ENABLE_LCCL=off


master_ip=192.168.1.1


cd model_path/DeepSeek-V3/examples


bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 1


output/msrun_log False 300

第 3 台服务器(Node 2)

export PYTHONPATH=/root/mindformers/:$PYTHONPATH


export HCCL_OP_EXPANSION_MODE=AIVexport MS_ENABLE_LCCL=off


master_ip=192.168.1.1


cd model_path/DeepSeek-V3/examples


bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 2 output/msrun_log False 300

第 4 台服务器(Node 3)

export PYTHONPATH=/root/mindformers/:$PYTHONPATH


export HCCL_OP_EXPANSION_MODE=AIV


export MS_ENABLE_LCCL=off


master_ip=192.168.1.1


cd model_path/DeepSeek-V3/examples


bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 3


output/msrun_log False 300


●此外,还可参考魔乐社区 MindSpore-Lab/DeepSeek-V3 模型仓的 ReadMe 指引,进行推理服务化部署,然后通过访问与 OpenAI 兼容的 RESTful 服务端口,体验多轮对话服务。


1.MindSpore 支持 DeepSeek V3 增量模块的快速开发


DeepSeek V3 的关键网络结构的支持:


●MTP:在 MTP 模块中,MindSpore 通过 shard()接口对 MPT 入口处的激活融合结构配置了序列并行,消除不必要的通讯重排。通过 set_pipeline_stage()接口实现了 embedding 矩阵在 first_stage 和 last_stage 间的参数共享,即由 first_stage 负责维护 embedding 的参数更新,训练前向时发送给 last_stage,训练反向时从 last_stage 回收梯度。


●AuxFree Balance:MindSpore 的 MoE 模块中已支持全局的 Expert 负载统计, AuxFree Balance 机制的实现是在 callback 中新增了根据全局专家负载而更新专家偏置的逻辑,从而达到在每个 train step 结束后做一次负载均衡调整的目的。


●MoE Sigmoid 激活:在 Router score 后的激活函数部分新增了可配置项,用户可以通过 yaml 文件灵活选择 softmax 或 sigmoid 作为激活函数,支持开发者灵活选择。


2.MindSpore 对于 DeepSeek V3 推理网络的实现和优化


MindSpore 针对 DeepSeek V3 的网络结构特点,高效地实现和优化了更高效的推理网络,最大化地压缩算子下发耗时和提升网络推理性能。


●MLA:将 FC、MatMul 等超过 10 个小算子,融合成单个 InferAttention-MLA 算子,然后将其与已有的 PageAttention 算子,组合实现 MLA 模块功能。同时,在 InferAttention-MLA 算子内,设计了 Key-Value 张量存储复用机制,减少存储资源占用。


图片 2.png


图 1 MLA 推理网络实现原理


●DeepSeekMoE:MindSpore 优化精简了 MoE 的推理代码实现,并新增实现 MoeUnpermuteToken、MoeInitRouting 等多个融合大算子,用于组合实现 DeepSeek-V3 的 MoE 单元,降低了单个 MoE 单元的推理时延。


图片 3.png


图 2 DeepSeekMoE 推理网络实现原理


●图编译:MindSpore 推理使用了图编译进行加速,通过对整图进行 Pattern 匹配,无需修改模型脚本,即可实现整图的通用融合。以 DeepSeekV3 为例,在图编译过程中实现了 Add+RmsNorm、SplitWithSize+SiLU+Mul 等众多 Pattern 的自动融合。


图片 4.png


图 3 图编译原理


3.MindSpore 框架特性助力 DeepSeek V3 训练性能提升


DeepSeek V3 的训推适配过程中,通过 MindSpore 的 MoE 模块优化、Dryrun 仿真等技术,在优化 MoE 的训练流程的同时,还实现了更高效的多维混合并行。


●MoE 模块优化:在 MoE 模块中可支持多种主流结构可配置,如共享专家、路由专家个数、激活函数选择等,极大地提升了模型的灵活性。在 MoE 并行方面支持 TP-extend-EP、路由序列并行、MoE 计算通讯掩盖、分组 AllToAll 通讯等多种并行模式和并行优化,用户可在配置中更灵活地使用相关并行加速能力。


●Dryrun 集群内存仿真与自动负载均衡:MindSpore 的 Dryrun 工具可以根据训练任务模拟出集群中每卡的内存占用情况,从而在不实际占用集群的情况下,为训练的分布式并行策略调优提供快捷反馈。自动负载均衡工具 SAPP 为 DeepSeek V3 通过精确建模内存和计算负载,在内存约束条件下,求解最优的流水线并行的各 Stage 层数与重计算量,分钟级开销内自动获得最优流水线配置。


下一步,昇思 MindSpore 开源社区将上线 DeepSeek V3 微调样例与 R1 版本镜像,为开发者提供开箱即用的模型。未来,昇思开源社区将依托丰富的技术能力,持续优化 DeepSeek V3 系列模型的性能,加速模型从训练到生产部署端到端的创新效率,为开源开发者进行大模型创新提供了高效易用的基础软件与技术生态,促进千行万业智能化转型升级。


在使用模型中,有任何疑问和建议,均可通过社区进行反馈。


昇思 MindSpore 开源社区 DeepSeek V3 使用问题讨论 issue:


https://gitee.com/mindspore/mindformers/issues/IBL0X5?from=project-issue


昇腾社区昇思论坛 DeepSeek V3 使用问题讨论帖:


https://www.hiascend.com/forum/thread-02112174450796469017-1-1.html

用户头像

科技热闻

关注

还未添加个人签名 2021-05-31 加入

还未添加个人简介

评论

发布
暂无评论
训推全面支持、开箱即用!DeepSeek V3昇思MindSpore版本上线开源社区_科技热闻_InfoQ写作社区