基于 MindSpore 训练大语言模型 - 从零开始的实践指南
训练日志将保存在 output/logs 目录下。模型 checkpoint 会定期保存在 output/ckpts 目录。训练初期 loss 波动较大属于正常现象,建议训练超过1000步再评估效果。如遇到命令行换行符问题,可尝试去除反斜杠后在单行执行。确保系统内存充足,推荐预留50%以上空闲内存。存储 >= 1TB NVMe SSD。预训练语料库(WikiText-2)固件与驱动版本 24.1.
·
一、硬件环境与依赖配置
本教程基于昇腾计算平台进行训练,具体硬件配置如下:
8卡 Ascend 910B2 NPU
内存 >= 512GB
存储 >= 1TB NVMe SSD
软件环境要求:
Python 3.10
MindSpore 2.4.10
CANN 8.0.RC3.beta
固件与驱动版本 24.1.RC3
为简化环境配置,我们提供了预配置好的 Docker 镜像:
拉取训练镜像
docker pull swr.cn-central-221.ovaijisuan.com/mindformers/llm_mindspore:latest复制
配置环境变量
export IMAGE=swr.cn-central-221.ovaijisuan.com/mindformers/llm_mindspore:latest export CONTAINER=llm_training复制
启动容器
docker run -itd -u root \ --ipc=host --net=host \ --privileged \ --device=/dev/davinci[0-7] \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/Ascend:/usr/local/Ascend \ -v /etc/ascend_install.info:/etc/ascend_install.info \ --name $CONTAINER \ $IMAGE复制
二、数据准备
训练需要两个核心组件:
-
预训练语料库(WikiText-2)
-
Tokenizer 分词模型
创建工作目录
mkdir -p /workspace/data cd /workspace/data复制
下载并处理数据集
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复制
数据预处理
python tools/preprocess.py \--input data/wiki.train.tokens \--output data/wiki_4096 \--tokenizer tokenizer.json \--seq-length 4096 \--workers 4复制
三、模型配置
我们基于 1B 参数量的配置进行训练,核心配置包括:
1. 模型架构配置
model_config: hidden_size: 2048 num_layers: 3 num_heads: 8 intermediate_size: 6144复制
2. 混合专家系统(MoE)配置
moe_config: expert_num: 16 first_k_dense_replace: 1复制
3. 分布式训练配置
parallel_config: data_parallel: 2 model_parallel: 2 pipeline_stage: 2 expert_parallel: 2 micro_batch_num: 4复制
四、启动训练
执行以下命令开始训练:
cd /workspace bash scripts/train.sh \ --config configs/llm_1b.yaml \ --data_path data/wiki_4096复制
训练日志将保存在 output/logs 目录下。由于启用了流水线并行,loss 值仅会在最后一张卡(worker-7)的日志中显示:
tail -f output/logs/worker_7.log复制
模型 checkpoint 会定期保存在 output/ckpts 目录。
五、注意事项
-
确保系统内存充足,推荐预留50%以上空闲内存
-
定期检查显存占用情况,避免 OOM
-
如遇到命令行换行符问题,可尝试去除反斜杠后在单行执行
-
训练初期 loss 波动较大属于正常现象,建议训练超过1000步再评估效果
六、参考资源
更多推荐


所有评论(0)