互联网 频道

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

  摘要:昇思已支持在昇腾集群上训练和推理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()接口对MTP入口处的激活融合结构配置了序列并行,消除不必要的通讯重排。通过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

特别提醒:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
0
相关文章