# 训练指南 [](https://atomgit.com/mindspore/docs/blob/master/docs/mindformers/docs/source_zh_cn/guide/training.md) ## 概述 大模型预训练(Pretrain)是构建高性能语言模型的核心阶段,其本质是通过海量无标注数据使模型自主学习通用语言规律与知识。业界开源了许多各项指标优异的预训练模型,例如Llama、Qwen、DeepSeek系列模型,这些模型都在海量文本数据上学习"语言的概率分布",使模型掌握词汇、语法、语义等通用能力,为下游任务(如问答、写作)提供扎实基础。 本质上,预训练通过反向传播算法优化模型参数,使损失函数最小化,从而提升模型对输入数据的预测或生成能力。MindSpore Transformers 提供了统一的预训练训练流程,结合生态提供了易用的解决方案。在统一训练流程中,启动训练任务可总结出如下关键步骤:  1. **任务前准备**:确定待训练模型配置、训练数据集准备,明确数据和模型两大关键点; 2. **修改训练配置**:基于已有硬件资源、模型以及数据,根据需求配置对应配置项。配置项涵盖基本配置、进阶配置以及高级配置,不同等级的配置项,允许训练任务完成不同的目标; 3. **启动训练任务**:基于已有硬件资源以及训练配置,通过快捷指令完成在不同集群规模下启动训练任务; 4. **训练状态监控**:在任务执行后,MindSpore Transformers提供各种手段观察训练状态,以供后续调试调优。 以下是MindSpore Transformers在LLM预训练任务上关键流程的具体描述。 > **动态图(PyNative)实现主线** > > 自 **r2.0.0** 起,MindSpore Transformers 以 **动态图(PyNative)实现** 作为演进主线,本文档默认面向动态图。动态图聚焦 **预训练** 训练场景;推理、服务化部署、量化等动态图尚未覆盖的能力,请查阅[静态图实现特性](../feature/static_graph_features.md)章节。 ## 训练流程 ### 1. 任务前准备 #### 确定指定规格模型 MindSpore Transformers 支持不同系列的预训练模型。动态图(PyNative)实现当前已支持 **DeepSeek-V3**(MoE + MLA + MTP),对应实现位于 `mindformers/models/*/modeling_*_pynative.py`;其余既有模型为静态图实现,详见[模型支持库](../introduction/models.md)。 动态图采用 **分层抽象 + 模块化** 的设计:以 `GPTModel`(General PreTrained Model)为统一模型接口,向下组合 `TransformerBlock`、`MoELayer`、`Attention`、`Linear`、`Embedding`、`Norm` 等模块化接口,并通过 `ModuleSpec` 机制自由组合搭建模型。模型结构与超参通过 YAML 配置文件中 `model` 段显式配置(`model_type`、`architectures` 为固定字段,其余结构超参按透传交给模型类),动态图当前不支持通过 `pretrained_model_dir` 自动合并 HuggingFace `config.json`,结构参数须在 YAML 中显式写明。动态图整体架构详见[整体架构](../introduction/overview.md)。 #### 数据集预处理 在自然语言处理任务中,数据预处理是模型训练的关键前置环节。它不仅解决原始数据中的噪声、格式不一致等问题(如特殊字符、乱码等),更能通过结构化转换(如分词、向量化)将原始文本转化为模型可理解的数值形式。虽然广义的数据预处理可能包含收集、清洗、分词等全流程操作,但本环节默认输入数据已具备基础质量(即"干净"数据),因此重点聚焦于**分词转换**这一核心目标。 动态图模式下,数据集配置位于 YAML 配置文件的 `train_dataset` 字段中,目前支持以下两种数据集加载方式,覆盖常用开源与自定义场景: - **Megatron 数据集**:支持加载符合 Megatron-LM 格式的数据集,适用于大规模语言模型的**预训练**任务。 - **MindRecord 数据集**:MindRecord 是 MindSpore 提供的高效数据存储/读取模块,支持将不同公开数据集转换为 MindRecord 格式进行训练。 具体处理方式与配置详见[数据集使用](../feature/dataset.md)。 **预训练数据处理** 针对 Megatron 数据集,MindSpore Transformers 提供了数据预处理脚本 [preprocess_indexed_dataset.py](https://atomgit.com/mindspore/mindformers/blob/master/toolkit/data_preprocess/megatron/preprocess_indexed_dataset.py),用于将 `json` 格式的原始文本语料转换成 `.bin` 或 `.idx` 文件。该方案支持多源混合: - **灵活配置**:支持同时加载多个bin数据文件,并通过采样比例参数控制不同数据源的混合权重; - **高效训练**:二进制存储格式大幅提升了IO效率,特别适合大规模预训练场景。 预处理完成后,可通过配置 `BlendedMegatronDatasetDataLoader` 加载 Megatron 格式数据集进行预训练,详见[数据集使用-Megatron数据集章节](../feature/dataset.md#megatron-数据集)。此外,MindRecord 格式数据集也支持通过 `MultiSourceDataLoader` 实现多源数据集高效加载与采样,详见[数据集使用-MindRecord数据集章节](../feature/dataset.md#mindrecord-数据集)。 ### 2. 配置文件准备 在进行一次预训练任务时,大模型参数量庞大(通常数十亿至万亿级),需依赖分布式计算资源高效训练以及对各项超参的修改,用于保证任务的正常执行及模型的最终性能指标。动态图(PyNative)训练使用一个 YAML 文件集中管理所有可配置项,由 [mindformers/pynative/config/config.py](https://atomgit.com/mindspore/mindformers/blob/master/mindformers/pynative/config/config.py) 的 **dataclass 配置体系**(`TrainConfig` 及其子配置类)对 YAML 加载时进行解析与校验。一份完整配置主要由以下顶层段组成(详见[配置文件说明](../feature/configuration.md)): - **模型配置**(`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 | ||
| 进阶配置 | 通过配置该部分,可进行训练过程的状态监测与性能调优,实现在不同集群规模下的稳定高性能训练 | 性能调优 | 训练内存优化 |
| 其他训练特性 | 梯度累积/裁剪/融合算子/混合精度 |