更新时间:2025-11-17 GMT+08:00
分享

训练容器生命周期

概述

在ModelArts Standard平台执行训练作业时,平台将每个子任务封装为 Kubernetes Pod,并持续监控 Pod 健康。在机器节点发生故障时,平台将自动完成「故障驱逐 → 节点补足 → 作业续训」的完整闭环,保证训练作业的连续性,用户无需手动干预。

作业与容器结构

用户创建的训练作业称为Job,如果为分布式作业,会根据用户选择的实例数产生多个Task;Task在机器节点上的执行单元即为Pod。

它们的关系如下图所示:

图1 作业与容器结构

故障恢复

在训练作业的运行中,除了作业自身的逻辑问题,也可能因平台侧计算资源的异常状况而导致任务失败。训练平台会不断观测承载作业的资源的各项状态,当发现影响到作业执行的软硬件问题时(例如加速卡的各类故障),会采取必要手段将用户的训练作业暂停,重新分配到可用的计算节点上重新拉起执行。

Job重调度策略是在作业故障时,将用户作业涉及到的所有Pod关停,并将Job实例完全重建,其过程如下图所示:

图2 Job重调度过程示例

如果用户的训练作业已经适配了断点续训,那么可以采用Pod重调度策略来加速恢复过程。

相比于Job重调度直接重新删除创建整个Job,Pod重调度中会保留现有的Job实例不变,而仅重新创建故障Pod。

图3 Pod重调度过程示例

用户作业视角

从用户的训练进程视角来看,每个Task会随着重调度经历不同的状态。如下所示,作业先经过Job重调度,三个Task所在Pod均被停止之后重新调度。接着在Pod重调度中,Task0与Task1中用户进程会被终止,而容器环境则保留;直到Task2所在Pod被重新调度后,三个Task重新开始运行,此时Task0与Task1中的用户进程也会被重新启动。

图4 Job重调度与Pod重调度关联

ModelArts平台会为用户进程注入环境变量,以标识作业经历过的生命周期。其中MA_SCHEDULE_CNT代表Task所在Pod被调度的次数,MA_PROC_START_CNT代表用户进程被启动的次数。

例如在上图中,在Pod重调度后的这个时间点上,Task0所在Pod被启动两次,在最后一次Pod容器启动后,其中的用户进程被启动两次;Task2所在的Pod被启动了三次,在最后一次Pod容器启动后,其中的用户进程被启动一次。

相关文档