MindSpore训练DeepSeek-V3轻量版实战指南:
MindSpore训练DeepSeek-V3轻量版实战指南
一、环境准备
1.1 硬件要求
- NPU配置:8卡Ascend 910B2(推荐64GB显存)
- 内存:≥512GB
- 存储:≥1TB NVMe SSD
1.2 软件依赖
组件 | 版本要求 |
---|---|
Python | 3.10 |
MindSpore | 2.4.10 |
CANN | 8.0.RC3.beta |
固件与驱动 | 24.1.RC3 |
1.3 Docker镜像配置
# 拉取预配置镜像
docker pull swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209
# 启动容器
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/davinci[0-7] \
--device=/dev/davinci_manager \
-v /usr/local/Ascend:/usr/local/Ascend \
-v /etc/ascend_install.info:/etc/ascend_install.info \
--name "$docker_name" "$image_name" \
/bin/bash
# 进入容器
docker exec -ti deepseek_v3 bash
复制
二、数据集准备
2.1 下载数据
# 下载WikiText-2数据集
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
复制
2.2 数据预处理
# 转换为Megatron格式
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 4
复制
输出验证:
生成 wiki_4096_text_document
、wiki_4096.json
等文件即表示成功。
三、模型配置
3.1 修改配置文件
复制并修改 pretrain_deepseek3_671b.yaml
:
# model_config
model:
model_config:
hidden_size: 2048 # 原671B模型参数缩小
num_layers: 3 # 减少层数
num_heads: 8 # 注意力头数调整
intermediate_size: 6144
# moe_config
moe_config:
expert_num: 16 # 专家数量
first_k_dense_replace: 1
# parallel_config
parallel_config:
data_parallel: 2 # 数据并行
model_parallel: 2 # 模型并行
pipeline_stage: 2 # 流水线并行
expert_parallel: 2 # 专家并行
micro_batch_num: 4 # 微批次数量
# 数据集路径
train_dataset:
data_loader:
config:
data_path: ["/home/work/dataset/wiki_4096_text_document"]
复制
四、启动训练
4.1 执行训练命令
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"
复制
4.2 监控训练状态
# 查看最后一张卡的日志(流水线并行模式下loss仅在此显示)
tail -f output/msrun_log/worker_7.log
# 预期输出样例
# print_output_info: { Epoch:[ 1/ 2], step:[ **/ ***], loss: ***, per_step_time: ***ms, lr: ****, overflow cond: ***, loss_scale: ***, global_norm: [***], train_throughput_per_npu: ***
复制
五、关键注意事项
- 显存优化
- 修改
max_device_memory
值(如28GB
)避免OOM错误。 - 定期使用
npu-smi
监控显存占用。
- 分布式训练问题
- 若遇到并行通信错误,检查
parallel_speed_up_json_path
路径配置。 - 确保
hccn.conf
网络配置正确。
- 训练稳定性
- 初始100步内loss波动属正常现象。
- 推荐训练至少500步后再评估模型效果。
六、资源参考
资源类型 | 链接 |
---|---|
完整代码仓库 | MindSpore MindFormers |
推理示例 | 魔乐社区 |
技术白皮书 | 昇腾开发者文档 |
附:常见问题速查
-
Q:训练时loss显示为0
A:流水线并行下仅最后一张卡显示loss,检查worker_7.log
。 -
Q:Docker启动报设备权限错误
A:添加--privileged
参数并确认驱动挂载路径。 -
Q:分词文件下载失败
A:通过VPN或镜像站点(如ModelScope)代理下载。