MindSpore Transformers(MindFormers)是昇思 MindSpore 面向大模型打造的开发套件,深度适配昇腾 NPU 集群多维混合并行训练场景。千亿、万亿参数大模型预训练、微调任务往往持续数天乃至数周,集群设备故障、网络波动、任务抢占中断等问题时有发生。在多维并行(TP 张量并行、PP 流水线并行、FSDP 分片、CP 上下文并行)场景下,模型权重、优化器状态被切分到不同 NPU 卡,传统续训方式极易出现权重加载错乱、训练步数错位、数据集游标偏移、收敛状态丢失等问题,若从头重新训练,会造成巨大算力损耗。MindSpore Transformers 提供分布式断点续训完整能力,支持 Step 级精确恢复,完整还原模型权重、优化器参数、学习率调度、数据集迭代位置,同时支持在线 Reshard 权重重分片,兼容修改分布式策略、集群扩缩容续训场景,广泛应用于 NLP、多模态大模型预训练、微调、对齐训练等国产化集群任务。

一、分布式断点续训核心能力

针对多维并行大模型训练,MindSpore Transformers 构建标准化断点续训体系,五大核心能力保障分布式场景训练可靠恢复。

一是Step 级完整状态保存与恢复,Checkpoint 同时落盘模型分片权重、优化器状态、学习率调度器、训练元信息、数据集游标,续训时精确恢复中断时的 Step,数据集自动跳过已经训练完成样本,避免样本重复训练,保证 Loss 收敛轨迹与未中断训练保持一致,支持 ckpt、safetensors 两种存储格式。

二是多维并行原生适配,原生兼容数据并行 DP、张量并行 TP、流水线并行 PP、FSDP/HSDP 混合分片、上下文并行 CP 等任意并行组合;每个 Rank 保存自身分片权重,配合共享存储,多机集群所有节点统一读取权重目录,无需手动合并分片权重即可完成续训。

三是在线 Reshard 权重重分片,支持扩缩容续训,训练中断后,修改并行策略、增减集群卡数,框架自动对分片权重做 Reshard 转换,适配新的分布式切分策略,无需用户手动转换权重文件,大幅提升集群调度灵活性。

四是故障容错与安全保护,支持临终 Checkpoint,任务收到终止信号时优先保存现场权重;当部分 Rank 权重文件损坏、缺失,框架自动回退到上一个完好 Checkpoint 版本,避免续训直接报错终止;支持异步保存 Checkpoint,降低权重落盘对训练吞吐的性能影响。

五是精度调试联动校验,可配合 MindStudio 精度调试工具,续训后 Dump 算子中间张量,和 GPU 基线做比对,校验续训之后 Loss、梯度、张量数值一致性,排查续训引入的数值漂移、收敛异常问题。

二、分布式断点续训全流程实施流程

MindSpore Transformers 分布式断点续训遵循“并行配置‑Checkpoint 保存配置‑正常训练‑任务中断‑续训拉起‑状态校验‑继续训练”闭环流程。

第一步分布式与 Checkpoint 工程配置,编写并行策略,设置 TP、PP、FSDP 等维度;配置 Checkpoint 保存参数,设置保存间隔、最大保留权重数量,开启优化器状态保存;集群多机场景配置共享存储路径环境变量SHARED_PATHS,所有 NPU 节点均可访问同一个权重目录,分布式断点续训需要开启数据下沉sink_mode=True。

第二步启动大模型分布式训练,使用 msrun 拉起多机多卡任务,训练过程按照设定 Step 间隔自动保存分布式分片 Checkpoint,目录下同时生成元信息文件,记录训练步数、分布式策略、数据集迭代位置。

第三步任务异常中断,当发生设备故障、任务被终止,框架会尽可能留存最新 Checkpoint;若开启临终 Checkpoint,收到终止信号会优先完成权重落盘。

第四步拉起断点续训任务,复用原有训练脚本,开启resume_training=True,指定 Checkpoint 根目录;若需要修改并行策略或者集群卡数,框架触发在线 Reshard 自动权重分片转换,无需额外手动转换。

第五步续训后状态校验,任务启动后观察日志,确认恢复 Step 与中断 Step 对齐;对比续训初始 Loss,和中断前最后一步 Loss 保持接近;配合 MindStudio 采集中间张量,校验梯度、Loss 数值,确认不存在数值漂移。

第六步持续训练与迭代,校验状态无误,任务持续执行,后续继续按配置保存 Checkpoint,完成完整预训练或微调任务。整套流程避免大模型任务中断后全量重训,把故障恢复的人力成本降到最低。

三、断点续训核心代码实操

下面为 MindSpore Transformers 分布式断点续训示例代码,包含多维并行配置、Checkpoint 保存、断点续训拉起、续训后精度校验逻辑,可直接用于昇腾 NPU 集群开发。

import os
import mindspore as ms
from mindspore import context
from mindformers import AutoModel, AutoDataset, Trainer
from mindformers.tools import CheckpointMonitor
from mindstudio_precision import PrecisionDebugger

# 设置共享存储路径,多机集群断点续训必须配置
os.environ["SHARED_PATHS"] = "/mnt/shared_storage"
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")
ms.set_seed(42)

def init_resume_debug():
    """续训后精度调试,校验续训数值无漂移"""
    config = {
        "common_dump_settings": {
            "dump_mode": 0,
            "enable_debug": True,
            "dump_path": "./resume_dump",
            "iteration": "0|1‑10"

        },
        "overflow_detect": {
            "enable": True,
            "error_stop": False
        },
        "precision_compare": {
            "baseline_device": "gpu",
            "compare_metrics": ["cosine", "mse", "rel_err"]
        }
    }
    debugger = PrecisionDebugger(config=config)
    return debugger

if __name__ == "__main__":
    # 多维混合并行配置
    parallel_config = {
        "data_parallel":4,
        "tensor_parallel":2,
        "pipeline_parallel":1
    }
    ms.set_auto_parallel_context(**parallel_config)

    # 加载模型、数据集
    model = AutoModel.from_pretrained("llama2_7b")
    train_dataset = AutoDataset.from_pretrained("wikitext_pretrain")

    # Checkpoint监控回调:控制权重保存行为
    ckpt_cb = CheckpointMonitor(
        prefix="llama2_7b",
        save_checkpoint_steps=500,
        keep_checkpoint_max=3,
        no_save_optim=False,       # 保存优化器状态,断点续训必需
        save_path="./output/ckpt"
    )

    # Trainer配置,开启断点续训
    trainer = Trainer(
        model=model,
        args={
            "sink_mode": True,                # 分布式续训要求开启数据下沉
            "resume_training": True,          # 开启断点续训
            "load_checkpoint": "./output/ckpt",
            "ignore_data_skip": False         # 不忽略数据跳过,恢复数据集游标
        },
        train_dataset=train_dataset,
        callbacks=[ckpt_cb]
    )

    # 执行训练,中断后再次运行脚本自动续训
    trainer.train()

    # 续训后执行数值校验,验证续训无精度漂移
    debug_tool = init_resume_debug()
    debugger = debug_tool
    debugger.start()
    for batch in train_dataset.create_tuple_iterator():
        loss = model(*batch)
        debugger.step()
        break
    debugger.stop()
    result = debugger.compare_result()
    print("====断点续训数值校验报告====")
    print(f"Loss相对误差:{result['loss_rel_err']:.4f}")
    print(f"张量最小余弦相似度:{result['min_cosine']:.4f}")

配套断点续训 json 配置文件,管控并行策略、Checkpoint、续训参数,集群部署直接加载使用:

{
  "parallel_config":{
    "data_parallel":4,
    "tensor_parallel":2,
    "pipeline_parallel":1
  },
  "checkpoint":{
    "enable_save":true,
    "save_path":"./output/ckpt",
    "save_checkpoint_steps":500,
    "keep_checkpoint_max":3,
    "no_save_optim":false
  },
  "resume":{
    "resume_training":true,
    "load_checkpoint":"./output/ckpt",
    "sink_mode":true,
    "ignore_data_skip":false
  }
}

四、调试价值与应用总结

大模型多维并行分布式训练,权重被切分到多张 NPU 设备,传统续训方案容易出现优化器丢失、数据集重复采样、并行切分不匹配、续训后 Loss 突变等问题。如果缺少可靠断点续训,一旦任务中断,需要从头重启训练,消耗大量集群算力与时间成本。

MindSpore Transformers 分布式断点续训实现并行配置‑Checkpoint 保存‑训练执行‑中断‑续训拉起‑状态校验完整闭环。支持多维混合并行、在线 Reshard 扩缩容续训,完整恢复模型、优化器、数据集迭代状态;配合 MindStudio 工具可校验续训之后数值一致性,识别续训带来的收敛漂移,将故障恢复调试周期由数天缩短至小时级。

该能力广泛适用于十亿至万亿参数大模型预训练、SFT 微调、RLHF 对齐训练,适配单机多卡、多机万卡昇腾集群,提升大规模训练任务长稳可靠性,保障国产化大模型训练高效落地。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐