Robust LLM Training Infrastructure at ByteDance

作者/机构: Borui Wan, Gaohong Liu, Zuquan Song, Jun Wang, Yun Zhang, Guangming Sheng, Shuguang Wang, Houmin Wei, Chenyuan Wang, Weiqiang Lou, Xi Yang, Mofan Zhang, Kaihua Jiang, Cheng Ren, Xiaoyun Zhi, Menghan Yu, Zhe Nan, Zhuolin Zheng, Baoquan Zhong, Qinlong Wang, Huan Yu, Jinxin Chi, Wang Zhang, Yuhan Li, Zixian Du, Sida Zhao, Yongqiang Zhang, Jingzhe Tang, Zherui Liu, Chuan Wu, Yanghua Peng, Haibin Lin, Wencong Xiao, Xin Liu, Liang Xiang (香港大学, 字节跳动)

A1 主要贡献

本文介绍了ByteRobust,一个为大规模语言模型(LLM)的稳健和稳定训练量身定制的大规模GPU基础设施管理系统。当前LLM的训练规模已达数万个GPU,伴随而来的是故障(如CUDA错误、NaN值、作业挂起等)的普遍发生,这对训练稳定性构成了重大挑战。现有故障处理方法依赖于故障停止后的日志分析和压力测试,恢复过程(重新调度资源、重载TB级检查点)会产生数小时甚至数天的开销,严重影响有效训练时间比率(ETTR)。

核心问题与挑战:
1. 隐式故障难以定位:许多错误如作业挂起、性能抖动、静默数据损坏(SDC)等没有明确的故障信号,传统基于超时的检测方法浪费了大量GPU算力。
2. 超大规模训练的复杂性:在数万GPU的规模下,即使定位到故障机器,也没有足够的备用机器来替换所有资源,使得故障机器的定位和隔离成为关键路径。
3. 用户代码的持续演进:长达数月的LLM预训练过程中,为了追求极致性能,需要不断集成性能优化或算法调整,这种代码的频繁迭代和重启引入了额外的复杂性,并且演进中的代码本身也可能成为新的错误来源。

研究目标与创新点:
为应对上述挑战,ByteRobust旨在实现高效的事件诊断和处理,最大限度地减少非生产性时间。其核心设计理念和贡献如下:

  1. 优先快速隔离,而非精确定位:ByteRobust倾向于快速故障隔离而非详尽的定位。它结合了轻量级实时检测和分层停机诊断,以最小开销快速筛选出故障机器。当这些方法不足时,ByteRobust应用数据驱动的运行时堆栈跟踪聚类,在定义的故障域(如并行组)内隔离可疑机器,并对其进行过度驱逐(over-evicting),而不是追逐确切的根本原因。

  2. 将人为错误纳入设计:认识到人为错误是不可避免的故障来源,ByteRobust的自动化容错框架将机器故障检测和诊断与代码回滚相结合,以实现快速验证和恢复。此外,通过一种惰性更新方法,利用故障的必然性和高频率,将用户代码的更改与确定性故障的处理合并。

  3. 在快速恢复期间控制可变性

    • 对于不改变机器分配的更改,使用原地热更新(in-place hot-update)机制来保留运行时环境并简化诊断。
    • 为确保受控和快速的恢复,ByteRobust利用预先配置并通过自检的温备机(warm standbys),避免了完整的作业重新调度。
    • 其检查点模块通过将备份分布在并行组之外,消除了对远程获取的依赖,从而与故障域相匹配,实现了快速重启。

ByteRobust已在一个拥有超过20万个GPU的生产GPU平台上部署,并通过其自动化容错训练框架,在三个月内识别了38,236个显式故障和5,948个隐式故障。在一个为期三个月、使用9,600个GPU的训练任务中,ByteRobust实现了97%的ETTR,展现了其在训练鲁棒性方面的先进水平。

A3 背景知识与关键观察

2.1 LLM训练的特点

2.2 训练事件观察

2.3 实现高ETTR的挑战

A2 方法细节

3. ByteRobust 概览

ByteRobust架构。ByteRobust旨在通过自动诊断和处理各种训练事件,同时最小化非生产性时间,以实现高ETTR。如图4所示,ByteRobust由控制平面和数据平面两个核心组件构成。控制平面在训练作业外部运行,负责协调鲁棒的事件处理策略,包括异常检测、故障定位和触发恢复动作。数据平面驻留在每个训练pod内部,集成了监控、诊断、检查点管理和堆栈跟踪捕获等模块,为实时可观察性、中断时的即时诊断、快速检查点回滚和按需聚合分析提供支持。


图4. ByteRobust的架构。

4. 自动化容错

自动化容错框架。自动化容错对于扩展LLM训练至关重要,它通过最少的人工干预来检测、定位和解决事件,从而显著减少非生产性时间。考虑到GPU周期是训练集群中最昂贵的资源,快速、粗粒度的故障隔离通常比昂贵、细粒度的根本原因定位在诊断覆盖范围和效率之间取得了更好的权衡。为此,我们提出了一个自动化容错框架(图5),该框架结合了用于即时检测常见错误的实时检查、用于深入分析复杂故障的停机诊断、用于从瞬时故障中恢复的原地重试、用于从有缺陷的用户代码中恢复的代码回滚,以及用于解决如SDC等极端情况的回放测试。


图5. ByteRobust的自动化容错机制。

4.1 主动实时检查

4.2 分层停机检查

Algorithm 1: Dual-Phase Replay

图6. 运行算法1识别SDC机器的示例,其中 $n = 4, m = 6$。$H_i$ 表示水平分组阶段的组 $i$,而 $V_j$ 表示垂直分组阶段的组 $j$。

4.3 案例研究

5. 数据驱动的过度驱逐

5.1 聚合分析


图7. 用于定位后向通信挂起的堆栈聚合。并行配置:TP=2, PP=4, DP=4。

5.2 案例研究

6. 受控且快速的恢复

6.1 原地热更新

6.2 温备机

6.3 感知过度驱逐的检查点


图8. 使用ZeRO风格并行进行检查点和备份操作调度的示例。


图9. 具有过度驱逐感知的检查点备份。3D并行配置:TP=2, PP=4, DP=2。

7. 实现

A4 实验环境

A4 实验结果

8.1 生产环境中的鲁棒性

8.2 故障恢复效率

A7 补充细节

9. 经验与局限性

10. 相关工作

A5 结论

本文介绍了ByteRobust,一个部署在字节跳动GPU集群中的LLM训练管理系统。基于大规模LLM训练的丰富经验,ByteRobust将故障特征、诊断能力和LLM特定功能整合到一个全面的系统设计中。它采用了一个自动化容错框架,能有效地区分故障类型,并使用运行时状态分析和数据驱动方法来检测和隔离故障机器。我们引入了高效的故障切换机制,包括聚合式热更新、温备机和故障感知检查点,从而最大限度地减少了停机时间。我们的见解旨在激发进一步的研究,并增强LLM训练系统的可靠性。