使用 MindSpore 训练 DeepSeek-V3 模型

MindeSpore 已经适配 DeepSeek-V3 的训练推理啦,下面是使用 MindSpore 对DeepSeek-V3做训练的过程。

一、环境确认

这里呢我使用的是 8张 910B2 的显卡:

其中 MindSpore Transformers 的环境依赖如下:

PythonMindSporeCANN固件与驱动
3.102.4.108.0.RC3.betaq24.1.RC3

也可以使用为 DeepSeek-V3 预训练专门配置的 Docker 镜像,在容器中已经拉取了 deepseek-V3 仓库的代码


# 下载镜像
docker pull swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209

# 创建环境变量 
export image_name=swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209
export 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

# 进入容器
docker exec -ti deepseek_v3 bash

二、数据集准备

预训练需要用到两个数据集,分别是 wikiText2 和 分词模型

# 下载 WikiText2数据集
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/dataset/wikitext-2/wikitext-2-v1.zip
# 解压数据集
unzip ./wikitext-2-v1.zip

# 下载分词模型(需要科学的上网)
wget https://huggingface.co/deepseek-ai/DeepSeek-V3/resolve/main/tokenizer.json 

# 上传数据集文件 wiki.train.tokens 和分词模型文件tokenizer.json 到服务器的 /root 目录下
scp -P <端口号> wikitext-2/wiki.train.tokens root@<ip地址>:/root
scp -P <端口号> tokenizer.json  root@<ip地址>:/root

# 从宿主机器复制 数据集文件 wiki.train.tokens 和分词模型文件tokenizer.json 到容器的 /home/work/dataset 目录下

# 容器内创建文件夹
mkdir dataset

# 宿主机器上执行 docker cp
docker cp tokenizer.json deepseek_v3:/home/work/dataset
docker cp wiki.train.tokens deepseek_v3:/home/work/dataset

在预训练前,我们首先需要处理一下数据集,转换为 Megatron bin 文件

# 在容器中执行
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 \
--workers 2

在这里插入图片描述

三、配置文件修改

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

cd /home/work/mindformers/research/deepseek3/deepseek3_671b
cp pretrain_deepseek3_671b.yaml pretrain_deepseek3_1b.yaml 
3.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
3.2 修改模型配置
#moe
moe_config:
  expert_num: &expert_num 16                      # 修改为16
  first_k_dense_replace: 1                        # 修改为1
3.3 修改并行配置
# parallel config for devices num=8
parallel_config:  
	data_parallel: &dp 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
3.4 修改学习率配置
# lr schedule
   lr_schedule:
     type: ConstantWarmUpLR
     warmup_steps: 20
3.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

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

开源链接

昇思MindSpore开源社区训练代码
魔乐社区推理代码
开箱即用教程

注: 不同的终端中 \ 符号可能会影响命令的执行,如果相关命令报错可以尝试去掉 \ 进行尝试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值