Robust LLM Training Infrastructure at ByteDance

发表时间: 2025-09 · arXiv:2509.16293

原文: https://arxiv.org/abs/2509.16293

作者/机构: 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 (香港大学, 字节跳动)

速读

一句话结论 本文提出了一个专为万卡规模大语言模型训练设计的GPU基础设施管理系统ByteRobust,通过优先快速隔离故障和受控快速恢复机制,在一个包含9600个GPU的三个月训练任务中实现了97%的有效训练时间比率(ETTR)。

要解决什么问题 现有分布式训练严重依赖故障后的日志分析和离线压力测试,在万卡规模下遭遇效率瓶颈。首先,隐式故障难以定位。作业挂起、性能抖动及GPU硬件引起的静默数据损坏(SDC)通常无明确错误日志,传统系统依赖长达数十分钟的超时机制(如NCCL超时)才能察觉,浪费海量算力。其次,分布式集体通信会放大排查难度,单个损坏梯度会污染全局参数更新,掩盖真实故障源。此外,长达数月的预训练中,工程师需频繁进行代码迭代(如内核融合),用户代码演进与基础设施故障交织,导致根本原因极度复杂。一旦故障,传统流程需重新调度资源并从远程存储重载TB级检查点,耗费数小时甚至数天,导致有效训练时间比率大幅下降。

怎么做的 ByteRobust的核心思路是“优先快速隔离而非精确定位”,并将人为代码错误纳入自动化容错设计。系统由控制平面和数据平面构成,包含四个关键部件。第一是自动化容错框架,通过轻量级巡检实时监控硬件,发现损失突增或NaN等异常即触发分层停机检查。若机内和机间通信测试通过,系统依次尝试原地重试和代码回滚,以排除瞬时故障和近期代码更新引入的人为错误。第二是针对隐式故障的数据驱动过度驱逐机制。当检测到作业挂起或算力利用率(MFU)下降时,系统抓取所有训练进程的堆栈跟踪,通过字符串匹配聚合成组。主导堆栈组视为健康,其余标记为异常。系统不强求定位具体故障节点,而是找出异常节点共享的并行组(如流水线并行组),将其作为整体过度驱逐。第三是针对极端SDC的双阶段回放测试。为在不破坏数据依赖前提下定位SDC,系统保持张量和流水线并行大小不变,仅改变数据并行大小,将机器划分为水平和垂直两组局部回放。设流水线并行大小为 $\text{PP\_size}$,数据并行大小为 $\text{DP\_size}$,系统配置水平组数 $k$ 和垂直组数 $m$ 满足: $$k = n \cdot \text{PP\_size}$$ $$m = \text{DP\_size} / n$$ 其中 $n \in \mathbb{N}^+$ 且 $n \le m$。两组中报错机器的交集即为精准故障节点。第四是受控快速恢复机制。不改变机器分配的代码调整采用原地热更新;节点驱逐则直接唤醒预先配置的温备机(数量设为单机日故障率二项分布的P99水位)。同时,检查点管理器利用计算间隙将状态异步保存到CPU内存。为防止过度驱逐干掉备份,系统强制采用跨并行组备份策略,每个节点必须将状态备份到自身3D并行组之外的机器,消除对远程存储的依赖。

效果如何 实验在生产级GPU集群上展开,最大使用1200台机器(9600个NVIDIA Hopper 80GB GPU)进行70B密集模型和200B稀疏MoE模型预训练,并在16384个NVIDIA L20 GPU集群上评估效率。对比基线包括代表传统日志分析与压力测试路线的 SuperBench,代表传统恢复路线的完全重新排队(requeue)和仅替换故障机(reschedule),以及代表传统检查点路线的 Megatron save 和 Gemini。结果显示,ByteRobust在两个9600卡任务中均维持了97%的累计ETTR,将CUDA错误解决时间相比压力测试基线缩短84.5%。恢复方面,原地热更新比requeue快11.04倍;温备机比requeue快10.87倍,比reschedule快5.36倍。检查点效率上,相比 Megatron save 和 Gemini 分别减少99.69%和95.10%的阻塞时间,MFU损失仅0.71%。作者承认的局限包括:过度驱逐会产生假阳性(如为加速恢复驱逐8台机器的流水线组,实际仅1-2个节点故障);现有硬件诊断工具(如NVIDIA EUD)召回率仅70%且偶发导致GPU降频;面对频发的SDC问题,双阶段回放测试开销依然巨大。

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训练系统的可靠性。