k8s tfjob批调度-volcano调研

本文探讨了在Kubernetes环境下,使用Volcano解决机器学习任务的批调度问题,特别是针对TFJob的优化。Volcano作为Kubernetes的第二调度器,能有效避免资源死锁。通过对比Volcano与K8s原生批调度,以及Volcano在资源不足情况下的行为,文章指出Volcano在有resourcequota限制的namespace中可能存在调度缺陷,可能导致资源死锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

最近工作聚焦在机器学习这块,公司采用的kubeflow框架中的tfjob,利用tersorflow进行分布式训练。
在训练过程中,发现在整体资源不足的情况下,由于k8s默认调度器调度的粒度是pod,但是tfjob可能对应多个pod, 多个tfjob可能会互相争抢资源而陷入资源死锁。
于是开始调研解决方案,优先考虑开源的方案,最终发现2种解决方案:

  1. 第一种是kube-batch及从此之上衍生的volcano, 可以作为k8s第二调度器,对机器学习、大数据等job类任务批调度做了特殊优化
  2. 第二种是k8s默认调度器自1.16版本后开始支持批调度插件,原生就支持批调度

由于公司的k8s是1.13, 升级k8s版本可能会有未知的异常,决定优先调研volcano

volcano调研

项目路径:https://github.com/volcano-sh/volcano

volcano是华为云开源的针对ai/大数据场景的批调度服务,脱胎于kube-batch, kube-batch是kubeflow原生的批调度器项目,volcano在此基础上提供了增强型的volcano scheduler, 并且还添加了更多的特性,例如提供了一个contorller manager用于管理volcano自己可拓展的crd job (相当于实现了一个operator)、queue、podgroup等资源,还有vctl命令行工具。

volcano调度过程如下:

### Kubernetes Volcano Scheduler Batch Computing #### 什么是 Kubernetes Volcano? Kubernetes Volcano 是一种专为量计算设计的调度框架,它增强了 Kubernetes 对处理作业的支持能力[^1]。通过引入 Volcano,Kubernetes 不仅能够更好地支持传统的容器化应用和服务,还扩展了对高性能计算 (HPC) 和机器学习工作负载的支持。 #### Volcano 的核心功能 Volcano 提供了一系列针对处理优化的功能特性,其中包括但不限于以下几点: - **冗余与局部亲和** Volcano 支持基于节点的冗余策略以及局部亲和配置,这有助于提高任务的可靠性和性能。 - **优先级队列管理** 它允许管理员定义不同级别的优先级队列,从而确保高优任务可以更快获得资源分配。 - **Gang Scheduling(整体调度)** 这一特性对于需要多个 Pod 同时启动的任务尤为重要,比如 MPI 并行计算场景下的 HPC 应用程序[^2]。 #### Volcano 在 Apache Spark 中的应用 自 Apache Spark 3.3 版本起,默认情况下会使用 Volcano 作为其在 Kubernetes 上运行时的处理调度器。这种集成简化了部署流程并提升了用户体验。 #### 数据流模型对比分析 尽管名称相似,“火山模型”(Volcano-style)[^3] 主要用于描述数据库查询引擎中的迭代器模式,并不直接关联到 Kubernetes Volcano 调度器本身;然而两者都体现了模块化的理念——前者通过简单的接口方法实现了复杂的数据操作逻辑转换,而后者则通过对标准 API 扩展来满足特定领域需求。 值得注意的是,在某些现代大数据处理框架中,为了进一步减少开销、加速执行效率,则采用了不同于传统 volcano iterator model 的方式,即全阶段代码生成技术[^4] 。这种方法绕过了中间层抽象带来的额外成本,直接编译生成最终可执行文件,显著提高了吞吐量。 ```yaml apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: example-job spec: minAvailable: 2 plugins: env: [] policies: - action: "RestartJob" event: "TaskFailed" queue: default schedulerName: volcano tasks: - replicas: 2 name: main policies: - action: "RetryTask" event: "PodFailed" template: spec: containers: - image: busybox command: ["sleep", "infinity"] name: sleep-container restartPolicy: Never ``` 上述 YAML 文件展示了一个基本的 Volcano job 配置实例,展示了如何指定最小可用副本数 (`minAvailable`) 及其他参数设置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值