训练指南
概述
大模型预训练(Pretrain)是构建高性能语言模型的核心阶段,其本质是通过海量无标注数据使模型自主学习通用语言规律与知识。业界开源了许多各项指标优异的预训练模型,例如Llama、Qwen、DeepSeek系列模型,这些模型都在海量文本数据上学习"语言的概率分布",使模型掌握词汇、语法、语义等通用能力,为下游任务(如问答、写作)提供扎实基础。
本质上,预训练通过反向传播算法优化模型参数,使损失函数最小化,从而提升模型对输入数据的预测或生成能力。MindSpore Transformers 提供了统一的预训练训练流程,结合生态提供了易用的解决方案。在统一训练流程中,启动训练任务可总结出如下关键步骤:

任务前准备:确定待训练模型配置、训练数据集准备,明确数据和模型两大关键点;
修改训练配置:基于已有硬件资源、模型以及数据,根据需求配置对应配置项。配置项涵盖基本配置、进阶配置以及高级配置,不同等级的配置项,允许训练任务完成不同的目标;
启动训练任务:基于已有硬件资源以及训练配置,通过快捷指令完成在不同集群规模下启动训练任务;
训练状态监控:在任务执行后,MindSpore Transformers提供各种手段观察训练状态,以供后续调试调优。
以下是MindSpore Transformers在LLM预训练任务上关键流程的具体描述。
动态图(PyNative)实现主线
自 r2.0.0 起,MindSpore Transformers 以 动态图(PyNative)实现 作为演进主线,本文档默认面向动态图。动态图聚焦 预训练 训练场景;推理、服务化部署、量化等动态图尚未覆盖的能力,请查阅静态图实现特性章节。
训练流程
1. 任务前准备
确定指定规格模型
MindSpore Transformers 支持不同系列的预训练模型。动态图(PyNative)实现当前已支持 DeepSeek-V3(MoE + MLA + MTP),对应实现位于 mindformers/models/*/modeling_*_pynative.py;其余既有模型为静态图实现,详见模型支持库。
动态图采用 分层抽象 + 模块化 的设计:以 GPTModel(General PreTrained Model)为统一模型接口,向下组合 TransformerBlock、MoELayer、Attention、Linear、Embedding、Norm 等模块化接口,并通过 ModuleSpec 机制自由组合搭建模型。模型结构与超参通过 YAML 配置文件中 model 段显式配置(model_type、architectures 为固定字段,其余结构超参按透传交给模型类),动态图当前不支持通过 pretrained_model_dir 自动合并 HuggingFace config.json,结构参数须在 YAML 中显式写明。动态图整体架构详见整体架构。
数据集预处理
在自然语言处理任务中,数据预处理是模型训练的关键前置环节。它不仅解决原始数据中的噪声、格式不一致等问题(如特殊字符、乱码等),更能通过结构化转换(如分词、向量化)将原始文本转化为模型可理解的数值形式。虽然广义的数据预处理可能包含收集、清洗、分词等全流程操作,但本环节默认输入数据已具备基础质量(即"干净"数据),因此重点聚焦于分词转换这一核心目标。
动态图模式下,数据集配置位于 YAML 配置文件的 train_dataset 字段中,目前支持以下两种数据集加载方式,覆盖常用开源与自定义场景:
Megatron 数据集:支持加载符合 Megatron-LM 格式的数据集,适用于大规模语言模型的预训练任务。
MindRecord 数据集:MindRecord 是 MindSpore 提供的高效数据存储/读取模块,支持将不同公开数据集转换为 MindRecord 格式进行训练。
具体处理方式与配置详见数据集使用。
预训练数据处理
针对 Megatron 数据集,MindSpore Transformers 提供了数据预处理脚本 preprocess_indexed_dataset.py,用于将 json 格式的原始文本语料转换成 .bin 或 .idx 文件。该方案支持多源混合:
灵活配置:支持同时加载多个bin数据文件,并通过采样比例参数控制不同数据源的混合权重;
高效训练:二进制存储格式大幅提升了IO效率,特别适合大规模预训练场景。
预处理完成后,可通过配置 BlendedMegatronDatasetDataLoader 加载 Megatron 格式数据集进行预训练,详见数据集使用-Megatron数据集章节。此外,MindRecord 格式数据集也支持通过 MultiSourceDataLoader 实现多源数据集高效加载与采样,详见数据集使用-MindRecord数据集章节。
2. 配置文件准备
在进行一次预训练任务时,大模型参数量庞大(通常数十亿至万亿级),需依赖分布式计算资源高效训练以及对各项超参的修改,用于保证任务的正常执行及模型的最终性能指标。动态图(PyNative)训练使用一个 YAML 文件集中管理所有可配置项,由 mindformers/pynative/config/config.py 的 dataclass 配置体系(TrainConfig 及其子配置类)对 YAML 加载时进行解析与校验。一份完整配置主要由以下顶层段组成(详见配置文件说明):
模型配置(
model):根据预定的模型规格,修改配置文件中与模型架构相关的参数,如层数、头数、隐藏层维度等;数据配置(
train_dataset):指定预处理得到的数据集,配置数据集路径、数据加载方式等;训练超参(
training、optimizer、lr_scheduler):根据模型训练策略,指定优化器类型、损失函数、学习率、数据批量大小、训练轮数等;并行策略(
parallelism):根据集群规模及模型参数,配置运用数据并行(含FSDP/HSDP)、张量并行(TP)、流水线并行(PP)、上下文并行(CP)、专家并行(EP)等技术使超大规模模型能够正常训练或进行性能调优;状态监控(
monitor、profiler):配置loss打印步数间隔、配置profiling采集性能数据;精度调试任务中配置打印/可视化关键数值用来定位精度问题,例如local norm、local loss、优化器状态等;高可用相关(
checkpoint):配置权重保存步数、断点续训权重、均衡加载等高可用特性,保障在训练过程中能够平稳运行。
根据配置类型与预训练场景的不同,MindSpore Transformers 将可配置参数进行分层,并说明各层配置的适用场景与预期目标。详细信息如下:
| 配置类型 | 类型说明 | 配置项 | 配置指导 |
|---|---|---|---|
| 基础配置 | 通过配置该部分配置,能够基于当前模型结构下,拉起一个简单的训练任务 | 数据集 | 数据集使用 |
| 并行配置 |
并行配置项说明 分布式并行训练指南 |
||
| 训练超参 |
训练超参数与优化器 其它训练特性(梯度累积/裁剪/融合算子/混合精度) |
||
| 高级配置 | 通过配置该部分,可感知训练状态并保障多次训练任务的连贯执行 | 权重保存 |
权重保存与加载(Safetensors) Callbacks配置CheckpointMonitor |
| 断点续训 | 断点续训示例 | ||
| 在线监控 | 训练指标监控与 Profiling | ||
| 进阶配置 | 通过配置该部分,可进行训练过程的状态监测与性能调优,实现在不同集群规模下的稳定高性能训练 | 性能调优 | 训练内存优化 |
| 其他训练特性 | 梯度累积/裁剪/融合算子/混合精度 |
除以上配置项外,训练任务的所有配置项由配置文件统一控制,可根据配置项说明灵活调整设置。
动态图与静态图配置差异提示
动态图配置项主要集中在上述 14 个顶层段,与静态图 YAML 字段不完全一致,请勿直接复用静态图配置;
动态图仅用 Safetensors 格式保存与加载权重,不涉及 ckpt 与 Safetensors 之间的格式转换;
model段中的超参须显式定义,不支持自动合并 HuggingFace 社区中的config.json文件。
3. 启动训练任务
MindSpore Transformers动态图训练支持单机多卡、多机多卡分布式训练,集群规模支持从单机8卡至万卡的超大规模分布式训练。动态图训练统一通过 run_mindformer.py 拉起,须通过 --mode 1 显式指定使用 PYNATIVE_MODE。
单卡启动:使用
run_mindformer.py拉起任务,可通过环境变量ASCEND_RT_VISIBLE_DEVICES选择具体某张卡:ASCEND_RT_VISIBLE_DEVICES用于控制当前进程可见的 NPU 物理卡,取值为卡号或卡号列表。例如=0表示只让进程看到 0 号物理卡;若想使用 3 号卡则写=3;多卡时可写成=0,1,2,3这样的列表形式。若不显式指定,默认使用所有卡。# 指定使用 7 号卡执行单卡训练 export ASCEND_RT_VISIBLE_DEVICES=7 python run_mindformer.py --config /path/to/your.yaml --mode 1
单机多卡/多机多卡启动:通过
scripts/msrun_launcher.sh脚本基于 msrun 工具拉起分布式任务:# 单机8卡 bash scripts/msrun_launcher.sh "run_mindformer.py --config /path/to/your.yaml --mode 1" 8
具体启动方式(含多机多卡、自定义脚本启动、启动期排障等)参照启动任务文档。最小可运行端到端示例(DeepSeek-V3 2卡预训练)参照快速开始。
4. 训练状态监控
当预训练周期较长(数周至数月)时,需要实时监控关键指标并动态调整,以保障最终训练得到的模型能够达到预期的效果。此时,需要关注的状态项主要有:
性能指标:每秒训练token数/样本数(吞吐量)、NPU利用率(算力利用率)、每step耗时;
精度指标:损失函数值、梯度范数(防爆炸/消失)、MaxLogits 数值健康监测;
检查点检查:定期保存模型中间状态(如每N步),防止训练中断导致数据丢失。
针对不同的监控值,MindSpore Transformers 在动态图训练过程中会打印详尽的日志用于查看中间过程状态,并提供以下监控手段:
训练指标监控:通过
monitor段配置 grad/param 范数、Loss 监控、MoE 监控等,对应配置详见配置文件说明-monitor章节;性能分析:通过
profiler段开启 profiling 数据采集(算子耗时、内存、调用栈等),对应配置详见配置文件说明-profiler章节;
权重在中间保存检查点或训练完成后,模型权重将保存至 save_path 指定路径下,每次保存会在 save_path 下生成一个按 step 命名的子目录,内含 Safetensors 权重分片、续训元信息 common.json 与分片布局元数据 metadata.json。后续可以使用保存的权重进行续训等,详见权重保存与加载。
训练实践
MindSpore Transformers 提供了更为细致的预训练流程及实践: