Kubernetes 下的 DLRover 工作流程分析

💡 原文中文,约35800字,阅读约需86分钟。
📝

内容提要

DLRover是一个在Kubernetes下实现AllReduce策略的训练任务的工具,使用DLRover Operator来启动ElasticJob和ScalePlan的控制器。DLRover Master负责启动节点、监控节点状态、收集训练指标和自动调节任务的节点数量。DLRover Trainer使用LocalElasticAgent管理节点上的训练进程,并使用gRPC上报训练速度和资源使用情况。

🔎

延伸解读

Operator 的轻量设计:状态同步而非容错

DLRover Operator 本身并不包含容错逻辑,它主要利用 CRD 描述任务和扩容计划,并负责创建 DLRover Master Pod。ElasticJob 控制器在初始化时创建 Master Pod,并同步状态到 ScalePlan 和 Pod;ScalePlan 控制器则将扩容计划关联到 ElasticJob 的状态。这种设计将容错职责完全交给 Master,Operator 仅作为声明式接口,降低了 Operator 的复杂度,但也意味着 Master 的稳定性至关重要。

Master 的容错机制:基于事件驱动的节点管理

DLRover Master 的容错核心在 JobManager。它通过 Agent 上报的指标和 K8s 的 Pod 事件,封装成 NodeEvent,再由 _process_event 统一处理。当节点故障时,_should_relaunch 会判断是否重启,排除致命错误、OOM 超限、超过最大重启次数等情况。重启时,会生成 ScalePlan,由 PodScaler 创建新 Pod,并保留原节点的 rank_index 和 service_addr,确保训练任务能正确恢复。

Trainer 的双重职责:进程管理与数据上报

DLRover Trainer 使用 PyTorch 的 LocalElasticAgent 管理节点上的训练进程,同时通过 gRPC 向 Master 上报训练速度和资源使用情况。上报分为两种:ResourceMonitor 使用 psutil 获取 CPU、内存、GPU 等资源数据;TorchTrainingMonitor 则从 /tmp/dlrover/runtime_metrics.json 读取训练步数和时间戳,计算速度。这种设计使得 Master 能实时感知节点状态,为动态扩缩容提供依据。

Master 的退出条件与任务生命周期

Master 的主循环每 30 秒检查一次任务状态。当收到停止请求、所有 worker 退出且任务完成、或所有关键节点完成时,Master 会退出。如果所有 worker 失败或节点挂起,Master 会记录错误并退出。这种机制确保了任务在异常时能及时终止,避免资源浪费。但需注意,Master Pod 的重启策略为 Never,一旦 Master 挂掉,任务将无法自动恢复,需要外部干预。

❓

Q&A

DLRover是什么,它的主要功能是什么?

DLRover是一个在Kubernetes下实现AllReduce策略的训练任务工具,主要用于启动和管理训练任务的节点。

DLRover Master的主要职责是什么?

DLRover Master负责启动节点、监控节点状态、收集训练指标和自动调节任务的节点数量。

如何使用DLRover Operator启动ElasticJob和ScalePlan?

使用DLRover Operator可以创建ElasticJob和ScalePlan的控制器,通过设置管理器来启动这些控制器。

DLRover Trainer的主要功能是什么?

DLRover Trainer主要负责管理节点上的训练进程,并使用gRPC上报训练速度和资源使用情况。

DLRover中如何处理节点故障?

DLRover通过JobManager监控节点状态,在节点故障时启动新的节点进行恢复,确保训练任务的持续进行。

DLRover的MetricCollector有什么作用?

MetricCollector负责收集训练任务的指标并上报,帮助监控训练过程中的性能和资源使用情况。

🏷️

标签

➡️

继续阅读