README.md

mindio_tft

简介

MindCluster MindIO Training Fault Tolerance(MindIO TFT)包括临终保存CheckPoint、进程级在线恢复、进程级别重调度等功能。MindIO TFT面向Megatron-LM分布式训练场景,提供了ZeRO-1级别大模型并行容错能力,通过监控运行时训练集群各卡状态,由故障发生类型选择合适的修复策略,实现模型参数、优化器状态快速恢复,将MTTR(Mean Time To Recover)时延由小时降低至分钟级,从故障类别角度提供以下能力:

  • MindCluster MindIO Try To Persist(MindIO TTP)功能,主要针对大模型训练过程中故障恢复加速,MindIO TTP特性通过在训练过程中发生故障后,校验中间状态数据的完整性与一致性,生成一次临终CheckPoint数据,恢复训练时能够通过该CheckPoint数据恢复,减少故障造成的训练迭代损失。
  • MindCluster MindIO Uncorrectable Memory Error(MindIO UCE)功能,主要针对大模型训练过程中片上内存UCE故障检测,提供了训练框架Step级重计算能力,不需要重启进程在线修复,同时能保证续训迭代损失,UCE失败后进入TTP流程。
  • MindCluster MindIO Air Refuelling(MindIO ARF)功能,主要针对大模型训练过程中发生异常故障,不用停止训练重新拉起整个集群,只需以节点为单位进行重启或替换,对于部分故障仅需原地重启单进程,完成模型参数、优化器修复并继续训练。
  • MindIO TFT搭配MindCluster使用,此外还支持网络故障快速恢复、亚健康故障热切换、在线压测/借轨回切。

软件架构

architecture

  • Controller模块:负责分布式任务的协同,内部维护状态机,状态机支持不同场景的流程控制;实时收集各个训练进程的训练状态,当训练发生异常后,结合异常类型,触发状态机运作,将状态机对应的Action发送到Processor模块执行。
  • Processor模块:负责与训练框架交互,获取训练进程的训练状态,向Controller汇报,同时负责执行Controller模块下发的对应Action动作。
  • Adaptor模块:负责完成训练框架对MindIO TTP、MindIO UCE、MindIO ARF特性的适配。目前MindIO TFT已完成对MindSpeed-LLM训练框架的适配。对于其他训练框架,需用户参考并自行适配

约束限制

众多大模型框架都支持ZeRO(Zero Redundancy Optimizer,零冗余优化器)以减少对显存的使用,当前MindIO TFT仅支持开启ZeRO-1,支持DP(Data Parallelism,数据并行) Size为偶数,同时使用不同的功能对DP Size有不同的限制:

  • MindIO TTP功能
    • 为了保证故障发生后,有完整的优化器状态数据,要求DP Size能被副本数整除。
    • 开启MoE(Mixture of Experts,混合专家结构)前要求稠密层DP Size大于1;开启MoE后要求稠密层和稀疏层DP Size都大于1。
    • 针对分布式优化器,MindIO TFT在ZeRO-1功能的基础上,通过以算代传,在DP Group上重新切分优化器ZeRO-1范围,实现了优化器数据副本。
  • MindIO UCE / MindIO ARF功能
    • 若要实现从当前Step恢复训练,对DP Size限制与MindIO TTP功能一致。
    • 对于显存有限,不做副本的情况,即DP Size = 1,此时若发生UCE或者节点故障,支持在线从周期性CheckPoint中加载模型权重和优化器参数恢复训练,损失当前Step到上次周期性CheckPoint的Step之间的训练成本。

编译

mindio_tft编译不依赖MindCluster.

  1. 下载代码
git clone https://gitcode.com/Ascend/mind-cluster.git

cd mind-cluster/component/mindio/tft
  1. 编译执行

支持直接执行如下脚本编译

bash build/build.sh

Usage: build.sh [ -h | --help ] [ -t | --type <build_type> ] [ -b | --builddir <build_path> ] [ -f | --flags <cmake_flags> ]
build_type: [debug, release, asan, tsan]
cmake_flags: customized flags passed to cmake (these arguments must appear after all other arguments)

Examples:
 1 ./build.sh -t debug -b ./build/debug
 2 ./build.sh -t asan
 3 ./build.sh -t release -b ./build -f <cmake_flags>
 4 ./build.sh -t release

不填入参数情况下,默认执行build.sh -t release
  1. ut运行

支持直接执行如下脚本编译并运行ut

bash test/run_dt.sh

安装使用

mindio_tft将所有特性集成到whl包中供用户使用,whl包格式为 mindio_ttp-{version}-py3-none-linux_{arch}.whl

其中,versin表示mindio_tft版本;arch表示linux架构,如x86或aarch64

whl包编译

可以直接执行如下命令进行编译,在output目录下生成whl包

bash build/build.sh -t release

whl包依赖

whl包只能安装到npu环境上,且依赖于NPU固件驱动和CANN包,具体版本依赖详见下面的软件硬件配套说明

请在环境上提前安装NPU固件驱动和CANN包(环境安装参考链接)

安装完成后需要配置CANN环境变量(参考安装Toolkit开发套件包的第三步配置环境变量)

whl包安装

whl包的默认安装根路径为 /path/to/python3/site-packages/mindio_ttp

参考安装命令如下

pip3 install mindio_ttp-{version}-py3-none-linux_{arch}.whl --force-reinstall --no-index

安装完成后目录结构如下

${INSTALL_PATH}/
    |-- mindio_tft
        |-- VERSION
        |-- controller_ttp
        |-- framework_ttp
        |-- mindspore_api
        |-- utils
        |-- __init__.py

default ${INSTALL_PATH} is /path/to/python3/site-packages/mindio_ttp

接口说明

MindIO TFT提供给开发者如下接口:

《API接口参考》

环境变量说明

MindIO TFT涉及如下环境变量:

《环境变量》

安全声明

安全声明

许可证

mindio_tft使用Apache License,详见LICENSE文件。