训练指南

查看源文件

概述

大模型预训练(Pretrain)是构建高性能语言模型的核心阶段,其本质是通过海量无标注数据使模型自主学习通用语言规律与知识。业界开源了许多各项指标优异的预训练模型,例如Llama、Qwen、DeepSeek系列模型,这些模型都在海量文本数据上学习"语言的概率分布",使模型掌握词汇、语法、语义等通用能力,为下游任务(如问答、写作)提供扎实基础。

本质上,预训练通过反向传播算法优化模型参数,使损失函数最小化,从而提升模型对输入数据的预测或生成能力。MindSpore Transformers 提供了统一的预训练训练流程,结合生态提供了易用的解决方案。在统一训练流程中,启动训练任务可总结出如下关键步骤:

/overview

  1. 任务前准备:确定待训练模型配置、训练数据集准备,明确数据和模型两大关键点;

  2. 修改训练配置:基于已有硬件资源、模型以及数据,根据需求配置对应配置项。配置项涵盖基本配置、进阶配置以及高级配置,不同等级的配置项,允许训练任务完成不同的目标;

  3. 启动训练任务:基于已有硬件资源以及训练配置,通过快捷指令完成在不同集群规模下启动训练任务;

  4. 训练状态监控:在任务执行后,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)为统一模型接口,向下组合 TransformerBlockMoELayerAttentionLinearEmbeddingNorm 等模块化接口,并通过 ModuleSpec 机制自由组合搭建模型。模型结构与超参通过 YAML 配置文件中 model 段显式配置(model_typearchitectures 为固定字段,其余结构超参按透传交给模型类),动态图当前不支持通过 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.pydataclass 配置体系TrainConfig 及其子配置类)对 YAML 加载时进行解析与校验。一份完整配置主要由以下顶层段组成(详见配置文件说明):

  • 模型配置model):根据预定的模型规格,修改配置文件中与模型架构相关的参数,如层数、头数、隐藏层维度等;

  • 数据配置train_dataset):指定预处理得到的数据集,配置数据集路径、数据加载方式等;

  • 训练超参trainingoptimizerlr_scheduler):根据模型训练策略,指定优化器类型、损失函数、学习率、数据批量大小、训练轮数等;

  • 并行策略parallelism):根据集群规模及模型参数,配置运用数据并行(含FSDP/HSDP)、张量并行(TP)、流水线并行(PP)、上下文并行(CP)、专家并行(EP)等技术使超大规模模型能够正常训练或进行性能调优;

  • 状态监控monitorprofiler):配置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 在动态图训练过程中会打印详尽的日志用于查看中间过程状态,并提供以下监控手段:

权重在中间保存检查点或训练完成后,模型权重将保存至 save_path 指定路径下,每次保存会在 save_path 下生成一个按 step 命名的子目录,内含 Safetensors 权重分片、续训元信息 common.json 与分片布局元数据 metadata.json。后续可以使用保存的权重进行续训等,详见权重保存与加载

训练实践

MindSpore Transformers 提供了更为细致的预训练流程及实践:

  • 快速开始:以 DeepSeek-V3 为例,2 卡执行最小规模预训练的端到端流程,详见快速开始

  • 断点续训实践:step 级断点续训,含标准续训、仅权重初始化、改 batch size 续训、分布式均衡加载等 4 个场景,详见断点续训