米兰体育官方网站 字节万卡训练的故障监测、分析和恢复工具

米兰体育官方网站
米兰盘口

你的位置:米兰体育官方网站 > 米兰盘口 > 米兰体育官方网站 字节万卡训练的故障监测、分析和恢复工具

米兰体育官方网站 字节万卡训练的故障监测、分析和恢复工具

发布日期:2026-01-24 03:49    点击次数:149

米兰体育官方网站 字节万卡训练的故障监测、分析和恢复工具

在大型语言模型训练中,稳定性是个大挑战。LLM训练涉及的数据和计算量远超传统深度神经网络。比如,训练一个万亿token的LLM可能要数周,这远超常规DNN训练。在这种大规模下,失败和单点性能下降很常见。这些问题对整个任务影响巨大。失败成本高昂,所以减少恢复时间非常关键。一个性能下降的单点不仅影响自己,还拖慢整个数万个GPU的任务。这些问题可能由硬件故障、软件错误、数据问题或其他训练意外引起。

为确保LLM训练的稳定性和效率,需要采取一些措施。比如使用高可靠性硬件和软件,设计强健的训练算法,实施有效的监控和故障恢复机制。这样,LLM训练才能在大规模挑战下顺利完成任务。

最近,字节和北大联合发布了一篇论文,介绍了万卡英伟达A100系统大规模训练的技术改进及经验,其中关于监测和工具的改进尤其值得关注。

为了提升稳定性,字节使用了一种深度监控方法。这种方法不仅关注表面指标,还深入系统各个部分,收集详细信息。这样可以帮助就可以诊断系统问题,找出稳定性问题的根源。

字节还开发了一套自动化故障定位和恢复系统。这个系统通过心跳信息实时检测异常,并提供预警。还有一套诊断测试,用于识别引起问题的节点。他们还优化了checkpoint和恢复程序,减少训练中断。

为了解决单点性能下降的问题,字节开发了一个性能分析工具。这个工具记录了详细的CUDA事件,并生成了系统范围内的热图和时间线跟踪。还开发了一个3D可视化工具,显示不同部分之间的数据依赖关系。

通过这些方法,能够更有效地监控和诊断大型语言模型训练中的稳定性问题,从而提高了训练的稳定性和效率。

训练过程中的监控

字节跳动开发了一个LLM训练框架,该框架能够实现自动故障识别和快速恢复,从而实现容错性,最大限度地减少人工干预,并对正在进行的训练任务的影响微乎其微。

在收到提交的训练任务后,驱动进程会与定制的Kubernetes接口,分配计算资源,并为每个执行器启动相应的Pod。每个执行器管理一个节点。执行器完成一系列初始化任务后,在每个GPU上创建训练进程,并启动一个训练守护进程,定期向驱动发送心跳。这些心跳包含各种信息,用于实时异常检测和预警。

当驱动进程检测到特定训练进程的异常状态,或未在预定时间内收到执行器的心跳时,它会触发故障恢复程序。驱动会暂停所有执行器上的正在进行训练任务,并命令它们运行一系列轻量级但全面的自我检查诊断测试。这些测试覆盖了大多数常见的硬件和软件故障。

一旦确定问题节点,驱动将提交需要封锁的节点IP地址和其上运行的Pod信息给Kubernetes。Kubernetes会将故障节点驱逐,并用通过诊断测试的健康节点替换。此外,字节跳动提供了一个用户界面,允许手动驱逐节点,特别是那些通过手动分析确定的节点。

恢复过程完成后,驱动从最新的checkpoint恢复训练。字节跳动还优化了checkpoint和恢复过程,以最小化训练进度的损失。

数据收集和分析

系统通过心跳消息收集数据。心跳消息是一种健康检查的方式,就像心跳一样,它定期告诉系统的其他部分:“我还在工作!”这些消息包含了执行器的基本信息,比如它的IP地址(就像是它在网上位置的地址),Pod名称(Pod是Kubernetes中一个可以理解为一个容器或一组容器的单位),以及硬件信息(比如GPU的状态)。同时,它们还报告了训练进程的当前状态,这样驱动进程就能及时发现任何明显的异常。

训练进程的stdout/stderr日志也被包括在内,它们会被实时汇总、过滤和分析。如果检测到特定的警告或错误关键词,驱动进程会报告实时诊断信息。训练进程的stdout/stderr日志是程序运行时打印出来的信息。当你的电脑程序出现问题时,它会弹出一个错误信息。这些日志就是大型语言模型训练时打印出来的“错误信息”或“状态更新”。

此外,心跳消息中还包含了RDMA流量指标,这有助于了解网络利用率和效率。RDMA流量指标是一种衡量数据在网络中传输效率的方法。RDMA(远程直接内存访问)是一种高效的网络通信技术,它允许数据直接从一台机器的内存传输到另一台机器的内存,而不需要经过每台机器的操作系统。RDMA流量指标就像是高速公路上的交通流量,它告诉数据在网络中流动的速度和效率。

有些训练过程中的异常可能不会表现为明确的错误,看起来训练一切正常。在这种情况下,RDMA流量指标就变得非常重要。由于训练任务是周期性的,每个步骤的网络流量特征应该表现相似。因此,RDMA流量显著下降或异常波动可能是潜在异常的信号。一旦检测到这些不规则情况,驱动进程会发出警报,以便人工调查。如果流量完全停止,驱动进程会自动启动故障恢复程序。

为了提升训练稳定性和性能的监控,字节跳动开发了一个精确到毫秒级的监控系统。不同级别的监控被用来跟踪各种指标。二级监控通常用于评估整体健康状态,排除常见配置对训练的影响,比如ECN/PFC/QoS配置、链路波动或其他NIC问题。而毫秒级监控用于确定网络是否拥塞,以及数据并行和管道并行的数据传输速度是否达到了物理极限。

这个监控系统就像是一个精密的雷达系统,能够实时监测训练过程中的各种细节。二级监控就像是常规的健康检查,它确保一切运行正常,排除了一些常见的配置问题。而毫秒级监控就像是超级精密的仪器,它能够检测到非常细微的变化,比如网络是否拥堵,数据传输速度是否打满等。

诊断测试

字节跳动在诊断测试中面临一个权衡:测试执行时间和准确性的平衡。如果测试时间太长,会影响有效的训练时间;如果错误率高,可能会导致实际上正常的机器被错误排除。通过反复实验和优化,字节跳动部署了一套轻量级的诊断测试,这些测试能够有效地覆盖在实际训练过程中遇到的多种硬件和软件故障。

第一是内部网络测试:

为了诊断主机内部网络的潜在瓶颈,字节跳动使用内部开发的工具进行两项测试。回路测试测量了所有RDMA网络接口卡(RNICs)到主机内部各种端点(包括内存节点和GPU)的回路带宽。它进行了一个主机内的全网格测试,覆盖了所有可能的链路组合。这样,可以根据端到端带宽结果推断出链路特定的带宽降级和PCIe配置的不规则性。第二个RNIC到RNIC的测试检查了同一主机上不同RNIC之间的连接性和带宽性能。这些测试提供了RNIC是否满足硬件速度规格以及底层路由配置是否正确设置的见解。

然后是NCCL测试:

为了识别GPU通信中的潜在故障,字节跳动在单个节点内的GPU之间运行了一个全到全的测试,观察带宽是否与预期基准一致。一旦通过了主机内部通信测试,每个节点还会与同一ToR交换机下的相邻机器进行all-reduce测试,以评估节点间GPU通信的性能。

ToR交换机是一种网络设备,它将多个机器连接到一个局域网(LAN)中。NCCL是NVIDIA Collective Communications Library的缩写,它是一个用于GPU通信的库,可以让多个GPU之间有效地交换数据。这些测试确保了GPU之间的通信顺畅,这对于大型语言模型的训练至关重要,因为GPU需要频繁地交换数据和同步信息。

故障隔离恢复训练

在识别并移除故障机器后,驱动程序需要通过加载最近的checkpoint中的模型权重和优化器状态来恢复训练。确保最新的checkpoint尽可能接近故障发生时的训练进度状态,以最小化计算和时间的损失至关重要。这要求在训练期间增加checkpoint的频率。然而,也希望减少checkpoint过程引入的延迟,特别是那些阻塞训练进度、阻碍系统整体吞吐量的关键路径上的时间。

为了实现快速checkpoint,字节跳动引入了一种优化的、两阶段的方法:

在第一阶段,每个GPU工作者将其芯片状态写入主机内存,并继续训练过程。通过优化PyTorch的序列化机制和使用固定内存,这个过程可以由于高PCIe带宽而只需要到几秒钟,从而最小化对正在进行的训练过程的干扰。

在第二阶段,一个后台进程接管,异步地将状态从主机内存传输到一个分布式文件系统(在字节的部署中是HDFS)进行集中维护。将操作分为两个阶段解耦,使得GPU任务几乎可以立即恢复训练,而将写入HDFS的更耗时的过程卸载到一个单独的、非阻塞的进程中。

从checkpoint恢复时间是特别重要的,因为训练在没有最后checkpoint的情况下无法启动。瓶颈在于HDFS的带宽,尤其是当多个任务需要读取其对应的状态分区时。

为了缓解这个瓶颈,字节提出了一种优化的数据检索策略。其实,多个任务经常共享相同的状态分区,例如,同一数据并行组中的任务。相应地,指定该组中的一个任务从HDFS读取共享的状态分区,从而将负载线性化。然后,这个任务将状态分区广播到所有其他共享相同数据的任务重。这种方法有效地缓解了HDFS的带宽限制,大大减少了恢复时间。

总的来说,字节跳动的方法通过优化checkpoint和恢复过程,确保了在大规模训练中能够快速地从故障中恢复,减少了训练中断的时间,米兰提高了训练的效率和稳定性。

训练中的故障排除

尽管字节的LLM训练框架可以自动发现、定位并解决大多数常见故障,但仍有一些硬件异常会概率出现,并且无法通过机器自检发现。一些异常可能使得系统看起来正常运行,但实际上大大降低了训练效率。为了应对这些细微的情况,字节已经实现了一些定制的监控和分析工具,用于逐个案例进行异常检测。

这些工具就像是一支专门的侦探团队,它们使用各种高级技术和方法来深入调查问题。例如,它们可能会分析训练过程中的数据模式,寻找那些可能暗示着硬件或软件问题的微小变化。它们还可能会监控系统的性能指标,比如处理速度和能源消耗,来发现任何不寻常的波动。

{jz:field.toptypename/}

此外,这些工具还可以帮助团队识别那些可能被忽视的异常情况。想象一下,一个系统可能在大部分时间都表现正常,但偶尔会出现小问题,这些问题可能不会导致系统完全崩溃,但会逐渐降低训练效率。这些工具能够帮助团队识别并修复这些问题,确保训练过程始终保持高效。

总之,这些定制的监控和分析工具是字节跳动确保训练过程稳定性和效率的最后一道防线。通过这些工具,团队能够发现并解决那些自动化系统可能无法捕捉到的复杂问题,确保大型语言模型的训练能够顺利进行。

CUDA事件监控及性能分析

字节发现在拥有数万个GPU的大规模训练环境中,即使配置相同,不同的训练运行也表现出不同的计算效率。而且,在不同规模下,训练任务的性能并不一致。各种训练任务的MFU(计算利用率)随时间逐渐下降。而且通过单GPU GEMM(矩阵乘法)微基准测试下,并每位发现不同节点间存在明显差异。

为了诊断这些性能问题,字节开发了一个性能分析工具,该工具可以记录每个机器在运行期间关键代码段的执行时间。与torch profiler或Megatron-LM计时器不同的是,这个工具基于CUDA事件方法计时事件。这种方法最小化了CUDA同步的需求,从而防止性能下降,可以在生产训练任务中一致地运行它。

这个工具提供了两种可视化模式,并可以从不同的角度分析收集的数据。

第一种模式使用热图显示不同机器在各个维度上的时间消耗差异。

这个工具可以收集跨设备的计算阶段(前向和后向)的延迟数据,并平均了跨steps的延迟。

聚合数据通过热图进行可视化。比如,可能发现一小部分机器(大约0.5%)在训练期间表现出显著较慢的性能,从而阻碍了整体训练进度。训练效率主要取决于最慢机器的性能(即落后者),如果有最慢的机器,会导致不同运行之间的训练效率不一致,因为集群内的机器调度是随机的。在排除这些异常机器后,不同运行的峰值MFU变得一致。

另一种模式显示了机器上的事件时间线,以分布式视图(数据并行、流水线并行、张量并行)的跟踪格式呈现。

传统的分析器,如PyTorch分析器,主要是为单节点活动分析设计的。这种方法在分布式训练场景中,执行会频繁跨越多个节点的场景下,提供的洞察力有限。通过将不同等级的跟踪跨度聚合到单一时间线上,用户可以获得了一个全面的视角,揭示了整体执行顺序、流水线气泡和数据并行等级之间的同步特性。

在分布式追踪器执行可视化流水线并行时,可以通过将事件数据汇总到一个流水线并行组,详细描述了不同流水线阶段之间的数据依赖关系。

CUDA事件计时器产生的每一条数据都被存储在一个远程分析数据库中,允许从任何步骤事件轻松检索详细信息。虽然计时器数据以逐行格式写入本地文件,但一个单独的流处理器然后实时地将这个日志文件同步到Kafka队列中。分析数据库通过处理这个Kafka队列的数据保持更新,使得在不中断训练任务的情况下可以进行实时分析。所有监控功能都在真实生产训练期间开启,与训练时间相比,开销可以忽略不计。

3D并行训练可视化

在3D并行训练中,数据流动和任务顺序的复杂性非常高。每个任务可能在某一时刻同时参与几个同步或异步操作,这导致了它们之间的依赖关系非常复杂。这种复杂性也加剧了故障诊断的难度:当一个GPU节点出现故障时,节点所在的集群集群可能会在NCCL通信操作中停滞,最终导致系统范围内的超时。从外部来看,这种情况表现为一般的阻塞,但根本原因往往隐藏在大量的超时消息中。

为了快速定位问题节点,字节设计让每个任务在通信超时记录自己正在进行的操作。这些日志然后被于3D并行的可视化表示中。

3D并行训练集群逻辑上可以分为三个维度:张量并行、流水线并行和数据并行。当选择一个特定的任务时,3D并行可视化可以显示此任务在3D逻辑拓扑中的位置,数据流动的方向以及涉及的不同通信操作。重要的是,在发生错误的情况下,该工具提供了直接访问任务错误消息的途径(如果有的话)。这个工具,在用于诊断训练异常时,可以更快地识别和解决故障。

比如前面提到的案例,当有缺陷的GPU在执行NCCL通信操作时导致阻塞。这样的阻塞可能会挂起整个机器,导致其他依赖节点的连锁超时,最终导致整个训练过程瘫痪。为了快速识别这些故障节点,可以使用3D并行训练可视化工具。由于等待故障节点而超时的节点会在退出时记录它们的正在进行的操作。相比之下,如果只是故障GPU的节点被挂起,并没有记录任何此类信息。因此,通过检查日志和可视化中的数据流,这些问题节点可以轻松定位。一旦确定,这些节点可以通过健壮的训练框架手动隔离和标记为待维护。

{jz:field.toptypename/}经验分享

字节对万卡生产训练任务进行了数周的故障记录进行了分析,发现:

超过90%的异常都是通过其LLM训练框架自动检测、定位和恢复的,例如CUDA错误和段错误。

检测故障和执行诊断测试所需的平均时间少于10分钟。

系统可以从最新的checkpoint在15分钟内赶上训练进度之前的崩溃,保持了超过90%的有效训练时间率,这个百分比是迭代次数乘以迭代训练时间,除以总训练时间的数值。

字节还分享了一些有趣的故障诊断和修复经验,需要使用上面提到的故障排除工具进行分析。

性能下降单点

基于字节对CUDA事件计时器的使用,在多个实验设置中观察到了另一个相关现象:特定的主机执行相同的正向计算大约需要多10%的时间。不同的实验还得出了一致的现象,所以断定,问题不是软件本身的,而是集群中某些机器固有的问题。在隔离并从集群中移除这些有问题的主机后,观察到MFU大约提高了0.7%。

MFU下降

进行此类大规模训练实验时,观察到的另一个现象是训练效率随时间变化并不保持一致。相反,随着训练的进行,的训练任务的MFU逐渐下降。基于CUDA事件计时器指标的逐步分析,发现在正向计算阶段发生了变化。深入代码,把这个不规则性归因于某些代码段的波动。例如,不规则的垃圾收集可能会引入训练过程中的干扰,某些PyTorch操作可能会导致性能波动。这些操作处于关键路径上,但在训练过程中可能会受到影响。在修改或删除那些有问题的代码段后,再也没有观察到MFU的显著下降。

频繁的网络接口振荡问题

偶尔会遇到由于网络接口频繁振荡而导致的训练停滞或训练速度下降问题。当网络接口振荡现象发生时,网络接口首先会下线然后再次上线。下线和上线之间的时间间隔通常持续几秒钟。在下线过程中,所有传输中的数据包将被丢弃。学到的第一个教训是应该明确设置超时阈值到一个更大的值,否则默认值会使NCCL超时非常快,并在网络卡再次上线之前返回一个完成错误。学到的第二个教训是这个问题的根本原因是网络卡、AOC电缆和交换机之间的链接质量差。通过在网络卡信号强度、AOC电缆质量和交换机侧信号强度方面进行底层质量控制,可以将振荡频率降低到令人满意的水平。

总结

在大型语言模型(LLM)的训练过程中,字节跳动面临了多个稳定性挑战,包括系统失败、单点性能下降和硬件异常。为了应对这些挑战,字节跳动开发了一系列的诊断和恢复工具,以及优化策略,包括深度监控、快速checkpoint和恢复、性能诊断以及3D并行训练可视化。这些工具和策略使得字节跳动能够自动检测和修复大多数常见故障,大大减少了人工干预的需求,并且最小化了训练中断的时间,从而提高了训练的效率和稳定性。

字节跳动的深度监控策略通过心跳消息收集执行器的基本信息和训练进程的状态,实现实时异常检测和预警。其快速checkpoint和恢复机制通过优化checkpoint和恢复过程,确保了在出现故障时能够快速恢复训练。性能诊断工具,如CUDA事件监控,帮助识别和解决计算落后者和性能下降等问题。3D并行训练可视化工具则通过展示数据流和任务顺序的3D逻辑拓扑,帮助诊断训练过程中的问题。

此外,字节跳动还面临了网络接口频繁振荡的问题,通过设置更大的超时阈值和提高网络接口的信号质量,成功减少了振荡频率。

总的来说,字节跳动通过这些工具和策略,成功地提高了LLM训练的稳定性和效率,即使在大规模训练环境中也能够保持系统的稳定运行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

上一篇:milan 中国各城市平太阳时间简表及真太阳时间估算

下一篇:米兰体育官方网站 市政管道排水工程闭水试验

Powered by 米兰体育官方网站 @2013-2022 RSS地图 HTML地图