预训练
概述
预训练是指在大规模无标注数据上训练模型,使其能够全面捕捉语言的广泛特性。通过预训练,模型可以学习到词汇、句法和语义等层面的知识,这些知识在下游任务中通过微调得到应用,从而优化特定任务的性能。MindSpore Transformers框架的预训练目标是帮助开发者快速、便捷地构建和训练基于Transformer架构的预训练模型。
MindSpore Transformers 的预训练流程
结合实际操作,预训练的基本流程可以分解为以下步骤:
1. 数据集准备
MindSpore Transformers 预训练阶段当前已支持Megatron 格式和MindRecord格式的数据集。用户可根据任务需求完成数据准备。
2. 配置文件准备
预训练任务通过配置文件统一控制,用户可灵活调整模型训练超参数。另外可以通过分布式并行训练、内存优化特性以及其它训练特性对预训练性能进行调优。
3. 启动训练任务
MindSpore Transformers 提供一键启动脚本启动预训练任务。训练过程中可结合日志与可视化工具监控训练情况。
4. 模型保存
在中间保存检查点或训练完成后,模型权重将保存至指定路径。当前支持保存为Ckpt 格式或Safetensors 格式,后续可以使用保存的权重进行续训或微调等。
5. 故障恢复
为应对训练中断等异常情况,MindSpore Transformers 具备临终保存、自动恢复等训练高可用,并支持断点续训,提升训练稳定性。
基于 MindSpore Transformers 的预训练实践
MindSpore Transformers 目前已经支持业界主流大模型,本实践流程选择以 DeepSeek-V3-671B 展示单机训练和多机训练。
数据集准备
MindSpore Transformers 目前已经支持加载 Megatron 数据集,该数据集通常经过预处理,序列化为二进制格式(例如.bin
或.idx
文件),并配套特定索引机制,便于在分布式集群环境下高效并行加载与数据切分。
数据集下载:wikitext-103数据集
分词模型下载:分词模型tokenizer.json
数据预处理
数据集处理可参考Megatron数据集-数据预处理
生成Megatron BIN格式文件
将数据集文件
wiki.train.tokens
和分词模型文件tokenizer.json
放置在../dataset
下。使用以下命令将数据集文件转换为BIN格式文件。
cd $MINDFORMERS_HOME python research/deepseek3/wikitext_to_bin.py \ --input ../dataset/wiki.train.tokens \ --output-prefix ../dataset/wiki_4096 \ --vocab-file ../dataset/tokenizer.json \ --seq-length 4096 \ --workers 1
构建Megatron BIN数据集模块
执行如下命令构建Megatron BIN数据集模块。
pip install pybind11 cd $MINDFORMERS_HOME/mindformers/dataset/blended_datasets make
其中,
$MINDFORMERS_HOME
指 Mindspore Transformers 源代码所在的目录。
执行预训练任务
单机训练
通过指定模型路径和配置文件pretrain_deepseek3_671b.yaml以msrun的方式启动run_mindformer.py脚本,进行8卡分布式训练。
默认配置中的模型层数、隐藏维度等参数较大,适用于多机大规模分布式训练,无法直接在单机环境启动预训练,需要参考DeepSeek-V3-修改配置修改配置文件。
启动详细介绍详见拉起任务,启动命令如下:
cd $MINDFORMERS_HOME
bash scripts/msrun_launcher.sh "run_mindformer.py \
--register_path research/deepseek3 \
--config research/deepseek3/deepseek3_671b/pretrain_deepseek3_1b.yaml"
其中,
register_path
: 模型地址,即模型实现文件所在目录config
: 模型的配置文件,文件在 MindSpore Transformers 代码仓中 config 目录下
任务执行完成后,在 mindformers/output 目录下,会生成 checkpoint 文件夹,同时模型文件(.safetensors
)会保存在该文件夹下。
多机训练
如果服务器资源充足,可以参考如下方式拉起多台Atlas 800T A2(64G)训练。
在每台服务器上执行如下命令。设置master_ip
为主节点IP地址,即Rank 0
服务器的IP;node_rank
为每个节点的Rank序号,从0
到1023
。
master_ip=192.168.1.1
node_rank=0
cd $MINDFORMERS_HOME
bash scripts/msrun_launcher.sh "run_mindformer.py \
--register_path research/deepseek3 \
--config research/deepseek3/deepseek3_671b/pretrain_deepseek3_671b.yaml" \
1024 8 $master_ip 8118 $node_rank output/msrun_log False 7200
此处样例代码假设主节点为
192.168.1.1
、当前Rank序号为0
。实际执行时请将master_ip
设置为实际的主节点IP地址;将node_rank
设置为当前节点的Rank序号。
注意: 在多机分布式训练的过程中,可能会遇到一些性能问题。为了确保训练过程的高效性和稳定性,建议参考大模型性能调优指南,进行必要的性能优化和调整。
更多信息
更多关于不同模型的训练示例,请访问MindSpore Transformers已支持模型库。