容器工作流

  • 背景

目前某平台使用计算容器和解析容器,这两种容器目前通过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.mfbz.cn/a/577587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker常见问题排查思路与实战

Docker作为一种流行的容器化技术,已经在众多场景中得到广泛应用。然而,在使用过程中,我们难免会遇到各种问题。本文将介绍一些常见的Docker问题及其排查思路,并通过实战案例帮助大家更好地理解和应对这些挑战。 1. Docker容器启动…

OpenHarmony语言基础类库【@ohos.util.LinkedList (线性容器LinkedList)】

LinkedList底层通过双向链表实现,双向链表的每个节点都包含对前一个元素和后一个元素的引用。当需要查询元素时,可以从头遍历,也可以从尾部遍历,插入、删除效率高,查询效率低。LinkedList允许元素为null。 LinkedList…

数据库和表创建练习

一丶要求 1.创建一个数据库db_classes 2 创建一行表db_hero 3. 将四大名著中的常见人物插入这个英雄表 二丶创建db_classes一个数据库, 使用数据库默认的字符集 create database db_classes; 三丶创建一行表db_hero 1.先切换到我们创建的db_classes;数据库中 use db_class…

RabbitMQ中的交换机类型

交换机类型 可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化: Publisher:生产者,不再发送消息到队列中,而是发给交换机 Exchange:交换机,一方面&#xff…

03 后端入参校验:自定义注解实现

03 后端入参校验:自定义注解实现 一、前言二、实现1、新建Spring Boot项目2、引入依赖3、新建注解类4、新建校验器5、全局异常处理器6、编写Controller7、新建实体类8、启动并测试 一、前言 在 Java 后端开发中,为了实现入参校验,常常会使用…

【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门

【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门 文章目录 【SpringCloud】CircuitBreaker断路器之Resilience4J快速入门1. 概述2. 服务熔断服务降级(CircuitBreaker)2.1 案例说明2.1.1 基于计数的滑动窗口2.1.2 测试2.2.1 基于时间的滑动窗口2.2.2 测试 3. 隔离(B…

多行Textview 计算切分后的长度,并回退长度

实现类似的效果,一个多行的 textview, 如果赋值一个超长的字符,尾部长度回退部分,并添加 ... 最后添加一个详情按钮。 如果不超长则不显示详情 效果如图: 获取截断之后的字符长度 fun getLimitedCharacterCount(textV…

更新!!!Unity移动端游戏性能优化简谱

UWA官方出品,结合多年优化经验撰写了《Unity移动端游戏性能优化简谱》,文章从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能检测工…

Java web应用性能分析之【6种OOM监控和分析】

Java web应用性能分析之【Linux服务器性能监控分析概叙】-CSDN博客 Java web应用性能分析概叙-CSDN博客 Java web应用性能分析之【基准测试】-CSDN博客 Java web应用性能分析之【sysbench基准测试】-CSDN博客 Java web应用性能分析之【CPU飙升分析概述】-CSDN博客 Java we…

GPT学术优化推荐(gpt_academic )

GPT学术优化 (GPT Academic):支持一键润色、一键中英互译、一键代码解释、chat分析报告生成、PDF论文全文翻译功能、互联网信息聚合GPT等等 ChatGPT/GLM提供图形交互界面,特别优化论文阅读/润色/写作体验,模块化设计,支持自定义快捷按钮&…

014_用vim复制粘贴_保持双手正位

[oeasy]python0014_用vim复制粘贴_保持双手正位 继续运行 🥊 回忆上次内容 程序员 还是 很可爱的 要关心 身边的程序员 啊 毕竟是新时代的 典型新职业 文明 主流职业 血型 渔猎采集文明 猎人 O 游牧文明 牧民 B 农业文明 农民 A 工业文明 工人 商…

Linux——DNS的配置和使用

一、DNS 域名服务器,实现IP和域名的转换 DNS 协议运行在 UDP 协议之上,使用端口号 53 2.结构 DNS 的命名空间的结构如下: 1. 根域名( Root Domain ): 根域名位于 DNS 命名空间的顶部,它表示…

【继承和多态】

闭上眼睛,什么都不听.............................................................................................................. 文章目录 前言 一、【继承】 1.1【继承的概念】 1.2【 继承的定义】 1.2.1【定义格式】 1.2.2【继承关系和访问限定符】 1.2…

浏览器的同源策略与解决跨域

同源策略(协议、域名、端口) 同源策略(Same-Origin Policy)是一个在浏览器安全模型中被实施的重要安全机制。它是基于域名、协议和端口号的限制,用于防止不同源的网页间的恶意行为和信息泄露。 根据同源策略&#xf…

探秘Java线程:从概念到实践

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

Unity Timeline学习笔记(4) - 自定义轨道OnCreateClip和CreateTrackMixer用法上的区分

前面我们第二篇文章Unity Timeline学习笔记(2) - PlayableTrack是一个初步的PlayableTrack使用方法,有时候可能会个性化定制专属轨道。 OnCreateClip的例子 下面我们做一个例子: 首先是轨道 //FeatureTrack.cs using System.ComponentModel; using U…

以太网口硬件知识分享

一、了解网口通信基本原理 实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器,MAC属于数据链路层,主要负责把数据封装成帧,对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY…

JavaScript-3(内置对象+数组对象+字符串对象)

目录 1.预解析 2.对象 什么是对象 创建对象的三种方法 利用字面量创建方法 利用new Object创建对象 构造函数创建对象 new关键字 遍历对象 3.内置对象 Math对象 Math概述 Math随机数 Date日期对象 格式化日期 Date总的时间毫秒 4.数组对象 创建数组的两种方式…

进销存单机版和excel进销存那个好用

进销存单机版和EXCEL进销存哪个好用?单机版是安装在单台电脑上使用的,它不能像网络版一样可以多台电脑同时共享数据,所以进销存单机版有一个优势就是不需要连接网络也可以使用。 进销存单机版 进销存软件单机版是经过开发人员设计好的一种信…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时,提示语闪太快,导致无法获取元素的问题 解决办法 步骤一: F12---》控制台输入debugger 步骤二:对于需要定位的部分,在控制台的debugger处回车,可以定住页面 步骤三:正常定…
最新文章