容器工作流

news2024/11/24 5:00:03

  • 背景

目前某平台使用计算容器和解析容器,这两种容器目前通过rabbitmq消息来进行链接,形成容器工作流,使用容器工作流框架可以省去两个容器中间环节的控制,不需要再使用java代码对容器的操作,通过容器工作流框架即可控制容器之间的启动。

  • kubeflow-pipeline

1 介绍

kubeflow-pipeline (KFP)项目,是 kubeflow 社区开源的一个工作流项目用于管理、部署端到端的机器学习工作流。KFP 提供了一个流程管理方案,方便将机器学习中的应用代码按照流水线的方式编排部署,形成可重复的工作流google开源,其全面依赖Argo作为底层实现,Argo是一个开源原生容器工作流引擎 用于在Kubernetes上开发和运行应用程序

2 安装部署

kubeflow Pipelines独立安装方式如下:

export PIPELINE_VERSION=1.8.1

kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=$PIPELINE_VERSION"

kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io

kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/dev?ref=$PIPELINE_VERSION"

注意:需要替换grc.io中的镜像,grc.io在国内目前无法访问,需使用hub.docker.com仓库镜像地址:https://hub.docker.com/u/lingduhuanbing。

安装的负载:

pipline server:处理来自SDK和UI的请求,用于Pipeline、Experiment、Run的的管理(创建、删除、查看、对比等)

ml-pipeline-ui

Kubeflow Pipeline UI静态页面的加载;为将前端页面的服务请求转发给ml-pipeline-server和mlmetadata

ml-pipeline-server

主要用来响应Kubeflow Pipeline UI和Kubeflow Pipeline SDK发送的请求;

ml-pipeline-persistence-agent

监听workflow和scheduler workflow两个对象,并将监听到的信息汇报给ml-pipeline-server并存储到mysql中

controller:用于实现常规工作流和定时任务工作流的controller

Workflow-controller

 Kubeflow Pipelines直接使用了argo的workflow controller来实现工作流的step调度功能

scheduled workflow controller

用来执行周期性workflow的controller,其会监听workflow和scheduler worklfow两类对象,并判断对应的scheduler workflow是否到达下一个周期,如果是则会创建一个新的workflow;

storage:存储pipelines相关的元数据和artifact数据;

minio

日志等文件

mysql

存储容器运行的详情数据

MLmeta:用于实现mlmeta功能的组件

metadata-grpc-deployment

Google开源的ml metadata,用于record和retrieve机器学习相关的metada data;其本质是一个grpc server,外界通过grpc client进行数据的写入和读取,metadata server则将数据写入到mysql中;

metadata-envoy-deployment

是一个proxy,Kubeflow Pipeline UI通过grpc-web访问metadata grpc server时,需要使用其进行协议的转换;

metadata-writer

是一个controller,其watch所有属于workflow的pod,并调用metadata的grpc接口将pod的Artifact信息写入到metadata grpc server中;

cache step:用来缓存已经执行过的容器

cache-deploy-deployment

用来创建MutatingAdmissionWebhook,会match所有label为pipelines.kubeflow.org/cache_enabled: "true" 的create pod请求,并发送给cache-server.

cache-server

webhookserver会判断request的pod是否命中cache,如果命中则会对pod进行更改,以使得该pod不再执行真正的工作流任务

3 使用

通过python脚本编写容器流,生成yaml文件,该yaml 文件可通过pipeline ui提交运行也可通过脚本提交接口运行容器工作流;在此通过脚本提交运行。

定义工作流,这里定义了两个容器,分别是计算容器和解析容器:

调用接口,运行容器工作流:

4 架构设计

Pipeline web server & Pipline Service:用来创建、管理和展示pipeline、experiments、runs和artifacts等信息;

Pipeline Persistence Agent:用来watch pipeline执行的相关信息,并向信息写入到Mysql和mlmetada中;

orchestration controllers:Kubeflow Pipelines所使用的controller,典型的如Argo Workflow controller用来执行workflow、Scheduler Workflow Controller用来执行定时任务;

Artifact storeage:用于存储每次pipeline运行的input、output和日志等信息;

5 总结

Kubeflow-pipeline 目前启动16 个容器,启动的容器较多;安装过程中,可能会下载失败;

不过,kubeflow-pipeline 拥有UI 操作界面,可以看到容器工作流的工作状态;目前在模型云平台中(开发环境)已经实现该容器工作流框架。

二,Volcalno

1 介绍

Volcano是一个基于 Kubernetes 构建的批处理系统,主要用于高性能计算场景,支持大部分的主流计算框架,它还提供了包括基于各种主流架构的CPU、GPU在内的异构设备混合调度能力;Volcano 也是云原生计算基金会(CNCF) 的孵化项目

2 安装

通过 Deployment Yaml 安装,这种安装方式支持x86_64/arm64两种架构;在你的kubernetes集群上,执行如下的kubectl指令。

Kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/master/installer/volcano-development.yaml

安装的负载:

vc-scheduler

根据配置的调度策略为每一个 Pod 选取合适节点,调度策略都以插件的形式存在。 eg:DRF, Priority, Gang

vc-webhook-manager

校验yaml文件是否合法及设置默认值;eg: schedulerName,queue 

vc-controller-manager

用于 Volcano Job/PodGroup/Queue 自定义资源的生命周期管理

安装的配置字典:

volcano自定义资源:

3,使用

编写 JobTemplate yaml 文件,用于定义任务模板,分别对应计算模板和解析模板。

编写JobFlow  yaml 文件,用于定义任务的依赖关系。

4 架构设计

Volcano scheduler的工作流程如下:

① 客户端提交的Job被scheduler观察到并缓存起来。

② 周期性的开启会话,一个调度周期开始。

③ 将没有被调度的Job发送到会话的待调度队列中。

④ 遍历所有的待调度Job,按照定义的次序依次执行enqueue、allocate、preempt、reclaim、backfill等动作,为每个Job找到一个最合适的节点。将该Job 绑定到这个节点。action中执行的具体算法逻辑取决于注册的plugin中各函数的实现。

关闭本次会话。

Actions

enqueue

Enqueue action筛选符合要求的作业进入待调度队列。当一个Job下的最小资源申请量不能得到满足时,即使为Job下的Pod执行调度动作,Pod也会因为gang约束没有达到而无法进行调度;只有当job的最小资源量得到满足,状态由”Pending”刷新为”Inqueue”才可以进行。一般来说Enqueue action是调度器配置必不可少的action

allocate

Allocate action负责通过一系列的预选和优选算法筛选出最适合的节点。

preempt

Preempt action负责根据优先级规则为同一队列中高优先级任务执行抢占调度。

reclaim

Reclaim action负责当一个新的任务进入待调度队列,但集群资源已不能满足该任务所在队列的要求时,根据队列权重回收队列应得资源。

backfill

backfill action负责将处于pending状态的任务尽可能的调度下去以保证节点资源的最大化利用。

Plugins

gang

Gang调度策略是volcano-scheduler的核心调度算法之一,它满足了调度过程中的“All or nothing”的调度需求,避免Pod的任意调度导致集群资源的浪费。具体算法是,观察Job下的Pod已调度数量是否满足了最小运行数量,当Job的最小运行数量得到满足时,为Job下的所有Pod执行调度动作,否则,不执行。

conformance

conformance plugin认为命名空间kube-system下的任务具有更高的优先级。这些任务不能被抢占。

DRF

DRF plugin认为占用资源较少的任务具有更高的优先级。它会尝试计算已分配给抢占者和被抢占者的资源总量,并在抢占者资源资源份额更少时触发抢占行为。

nodeorder

nodeorder plugin通过一系列维度的打分算法,算出针对某个任务时所有的节点的得分情况。得分最高的节点被认为是针对该任务最合适的节点。

predicates

predictions plugin通过一系列维度的评估算法,决定某个任务是否适合被绑定到某个节点。

priority

priority plugin用于比较两个job或任务的优先级。它通过比较job.spec.priorityClassName来决定哪个job的优先级更高。对于两个任务,它会依次比较 task.priorityClassName、task.createTime、task.id in order来决定谁的优先级更高。

Binpack

binpack调度算法的目标是尽量把已有的节点填满(尽量不往空白节点分配)。具体实现上,binpack调度算法是给可以投递的节点打分,分数越高表示节点的资源利用率越高。binpack算法能够尽可能填满节点,将应用负载靠拢在部分节点,这非常有利于K8S集群节点的自动扩缩容功能。

Proportion

Proportion调度算法是使用queue的概念,用来控制集群总资源的分配比例。每一个queue分配到的集群资源比例是一定的。举例来说,有3个团队,共享一个集群上的资源池:A团队最多使用总集群的40%,B团队最多使用30%,C团队最多使用30%。如果投递的作业量超过团队最大可用资源,就需要排队。

5 总结

Valcano目前启动 3 个容器,其中volcano-scheduler 容器占用3G内存,占用较多内存,安装较快,没有相应的UI界面,通过自定义资源实现容器工作流,目前没有对应的SDK 或 接口可以操作该自定义资源,目前该框架还未接入模型云框架中。

三,综合比较

Kubeflow-pipeline

vocalno

安装

容器较多,需替换镜像

启动容器较少

接口调用

可通过http接口启动

UI界面

可通过界面查看容器运行情况

Yaml数量

1个

2个

Yaml文件编写

可通过python脚本自动生成

手动编写

接入情况

模型云平台已接入

目前,从使用角度综合比较,kubeflow-pipeline使用更加简单。

参考:

介绍 | Volcano

Kubeflow Pipelines | Kubeflow

Volcano: Volcano 是基于 Kubernetes 的批处理系统。Volcano 方便 AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。 - Gitee.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

资深项目经理15年心得:管理需求变更5大技巧

高效管理需求变更对项目管理至关重要。通过严格的变更控制,确保所有需求变更都与项目目标和范围保持一致,避免偏离原定计划,有助于项目按既定目标顺利推进。能够及时评估变更对项目的影响,有利于减低项目延期和超支的风险&#xf…

特斯拉PIXCELL矩阵大灯擎耀远程控制技术照亮未来智能之光

在科技的浪潮中,特斯拉这个名字如同一道闪电,照亮了新能源汽车的天空。而在这片星空中,特斯拉PIXCELL矩阵大灯则如同一颗璀璨的星辰,以其独特的创新技术和卓越的性能,为驾驶者提供了前所未有的照明体验。矩阵大灯技术如…

OceanBase开发者大会实录-杨传辉:携手开发者打造一体化数据库

本文来自2024 OceanBase开发者大会,OceanBase CTO 杨传辉的演讲实录—《携手开发者打造一体化数据库》。完整视频回看,请点击这里>> 各位 OceanBase 的开发者,大家上午好!今天非常高兴能够在上海与大家再次相聚&…

Android View事件分发面试问题及回答

问题 1: 请简述Android中View的事件分发机制是如何工作的? 答案: 在Android中,事件分发机制主要涉及到三个主要方法:dispatchTouchEvent(), onInterceptTouchEvent(), 和 onTouchEvent(). 当一个触摸事件发生时,首先被Activity的…

广交会烹饪机器人用上大模型 支付宝小程序云提供技术支持

近日,第135届广交会正在火热进行,记者获悉,支付宝小程序云助力合作伙伴田螺云厨,在烹饪机器人上开始用上大模型技术。各类智能产品的亮相,从中国制造迈向中国创造,也成为广交会的一个亮点。 (图…

HR招聘选拔,什么是人才测评方法?

人才测评方法是人才测评系统的一个构成部分,在一个系统指引之下,研究人员会根据具体的情况,选择出一套合适的人才测评方法,以便于系统更好地实现目标。每一种人才测评方法,都有自己的适用范围,企业工作者须…

数据可视化在不同行业中有哪些应用?

数据可视化即通过图表的形式将数据的内在信息有逻辑性地呈现给用户,使用户更容易发现数据中蕴藏的规律,找出问题,进而做出决策;另一方面,数据可视化项目也是一张重要的名片,是企业数字化建设效果的呈现。本…

Spring Cloud Feign

序言 本文给大家介绍一下 Spring Cloud Feign 的基础概念以及使用方式。 一、远程调用 在传统的单体系统中,我们通常是客户端去请求服务端的接口。但是在分布式的系统中,常常需要一个服务去调用另外一个服务的接口。在服务端如何去调用另外一个服务端…

源码篇--Nacos服务--中章(8):Nacos服务端感知客户端实例变更-3

文章目录 前言一、客户端实例变更:二、实例变更感知:2.1 实例注册信息通知:2.1.1 接收DistroDataRequest 请求:2.1.2 onReceive 处理请求:2.1.3 processData 处理请求:2.1.4 handlerClientSyncData 处理数据…

C++学习第十四课:运算符类型与运算符重载

C学习第十四课:运算符类型与运算符重载 在C中,运算符重载是一种使得自定义类型(如类对象)能够使用C内建运算符的能力。运算符重载允许程序员定义运算符对用户定义类型的特殊行为,这增加了程序的可读性和自然表达能力。…

【介绍下Android开发环境的搭建】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

iOS ------ Method Swizzling (动态方法交换)

一,Method Swizzling 简介 Method(方法)对应的是objc_method结构体;而objc_method结构体中包含了SEL method_name(方法名),IMP method_imp(方法实现) // objc_method 结构体 typed…

【GESP】2023年09月图形化一级 -- 小鸡躲球

小鸡躲球 1. 准备工作 (1)删除默认小猫角色。 (2)添加角色Chick和Ball。 (3)删除默认白色背景,添加背景Blue Sky。 2. 功能实现 (1)点击绿旗,小鸡角色站在地面上,初始位置为(X=-140,Y=-120),初始方向为90,旋转方式为任意旋转。在小鸡角色中设置舞台的初始…

办公楼智慧公厕自发电门锁感应器无需电池供电,环保节能!

在当今科技高速发展的时代,办公楼智慧公厕的自发电门锁感应器成以其独特的优势,为办公楼的卫生设施管理带来了全新的变革。这款感应器无需电池供电,真正做到了环保节能,同时在免电池、免维护、信号稳定、门锁升级、把手设计、应用…

编译工具各版本与操作系统版本号兼容性冷知识 : JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况

编译工具各版本与操作系统版本号兼容性冷知识 🧠: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号的兼容情况 文章目录 编译工具各版本与操作系统版本号兼容性冷知识 🧠: JetBrains IntelliJ IDEA 各个主要版本及其对应的操作系统版本号…

深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作

码到三十五 : 个人主页 OceanBase与MySQL模式下兼容性序 在当今的大数据时代,数据库技术的选择对于企业的信息化发展至关重要。OceanBase作为一种高性能、高可用的分布式关系数据库,在与MySQL模式的兼容性方面展现出了显著的优势&#xff0c…

qt5-入门-2D绘图-基础

参考: QPainter_w3cschool https://www.w3cschool.cn/learnroadqt/k7zd1j4l.html C GUI Programming with Qt 4, Second Edition 本地环境: win10专业版,64位,Qt 5.12 代码已经测试通过。其他例子日后更新。 目录 基础知识penb…

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面,九宫格简单布局(示例四) 微信小程序个人中心、我的界面,超简洁的九宫格界面布局,代码粘贴即用。更多微信小程序界面示例,请进入我的主页哦! 1、js代码 Page({…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

PDF高效编辑器,支持修改PDF文档并转换格式从PDF文件转换成图片文件,轻松管理你的文档世界!

PDF文件已成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;传统的PDF阅读器往往只能满足简单的查看需求&#xff0c;对于需要频繁编辑、修改或转换格式的用户来说&#xff0c;就显得力不从心。现在&#xff0c;我们为您带来一款全新的PDF高效编辑器&#xff0c;让…