当前位置:首页 > 国际 > 正文

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

  • 国际
  • 2025-02-13 15:09:45
  • 132

摘要:昇思已支持在昇腾集群上训练和推理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的环境依赖如下:

[MD:Title]

提供了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的曲线图如下

[MD:Title]

训练过程中的权重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支持DeepSeekV3增量模块的快速开发

DeepSeekV3的关键网络结构的支持:

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

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

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

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

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

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

[MD:Title]
图1 MLA推理网络实现原理

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

[MD:Title]
图2 DeepSeekMoE推理网络实现原理

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

[MD:Title]
图3 图编译原理

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

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系列模型的性能,加速模型从训练到生产部署端到端的创新效率,为开源开发者进行大模型创新提供了高效易用的基础软件与技术生态,促进千行万业智能化转型升级。

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

有话要说...