6-机器学习场景下Volcano集成调度能力实践

2023-12-19 12:59

本文主要是介绍6-机器学习场景下Volcano集成调度能力实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

6-机器学习场景下Volcano集成调度能力实践

今天主要给大家分享如何使用Volcano调度器运行一个TF Job。

今天的分享主要包括3个部分的内容:

  • Kubeflow简介
  • Kubeflow on Volcano
  • 演示(运行一个简单的机器学习作业)

01 Kubeflow简介

• Kubeflow是Kubernetes的机器学习工具包,是运行在K8s之上的一套技术栈,包括很多个组件,这些组件可以单独使用,也可以互相配合使用。

在Kubernetes机器中上对机器学习流程中的各个阶段提供技术支持

img

img

图片来自Kubeflow官网

上图内容分为3个部分:

机器学习框架

Chainer是一个专门为高校研究和开发深度学习算法而设立的一个的开源框架,基于python语言开发的,也是一个独立的深度学习框架;

Jupyter是基于网页用于交互计算的程序,可被应用于全过程的计算,包括开发、文档编写、运行代码以及展示结果,简单来说Jupyter是以网页形式打开,可以直接在网页中编写和运行你的代码,运行结果可直接在网页中看到,也可以直接在Jupyter中编写应用程序的文档;

MPI是并行计算的框架,也是应用于机器学习的;亚马逊MXNet支持C++、Python、R语言、GO语言等等,一般来说学习难度比较高;

PyTorch是从Torch来的,Torch是Facebook人工智能研究所所使用的一个框架,非常适用于卷积神经网络,灵活度比较高,因为是命令式的,所以也支持动态图的模型,后来facebook在Torch的基础上针对python语言又发布了一个新的机器学习的工具包PyTorch,我认为它是一个python版的Torch,它应该是在Torch的基础上增加了许多特性;

scikit-learn是一个开源的python机器学习库,提供了大量用于数据挖掘和分析的工具,还包括一些数据梳理、交叉验证、算法、可视化算法等一系列的接口;

TensorFlow是Google的一个机器学习框架;

XGBoost也是一个开源的机器学习项目,它比较高效的实现了梯度提升决策树算法,同时还对算法进行了改进,包括算法实现上的一些改进

Kubeflow提供的组件

涵盖了机器学习流程中的各个部分,比如图中的kubeflow UI是TensorFlow的一个看板界面,大家可以在上面实时监控kubeflow的各种组件,以及提交的类似作业;

Metadata用于跟踪收集训练过程中的各种数据,提交的一些作业和模型等等,能帮助我们进行模型改进;

Jupyter notebook是一个交互式的ID的电脑环境,能比较方便的展示一些运行结果;

此外,这块还包括一大类的组件operator,主要是用来支持各种各样机器学习框架,它的组织形式都是以operator的形式进行的,目的是为了针对不同的机器学习框架,提供分布式训练和资源调度的能力,这里我们可以看到它有Chainer operator、MPI operator、MXNet operator、PyTorch operator、TFJob operator、XGBoost operator,基本上对应与我们主流的机器学习框架都有一个operator,这个Operator主要包括两部分,定义了一个K8s的CRD,比如用户想提交某种类型的机器学习的作业,它可以创建一个对应的CRD,后续的工作都是由operator来完成的,当然运行的镜像文件是由用户自己来提供的;

Hyperparameter tuning一个超参服务器,是基于operator实现的超参搜索和简单的模型结构搜索的一个系统,支持并行搜索和分布式训练等等,超参优化在实际工作中还未被大规模的应用,它目前还不能做到完全的自动化,所以在这个组件还需要进一步进行性能加强。

Pipelines是机器学习的一个工作流组件,可以定义比较复杂的机器学习流,是基于Argo实现的,实现了面向机器学习场景的流水线项目,比如提供了机器学习的流程创建、调度编排、管理等等,还提供了UI界面,可以让大家在上面看到自己工作流的流程;

此外还包括Serving的一些服务,主要是方便用户将训练好的模型部署到我们的K8s的环境里。

由于目前机器学习算法的框架比较多,且目前在真实的工业生产环境中,一直缺少一种能够真正统一部署的框架和解决方案,所以Kubeflow仅仅也是把我们常见的机器学习框架和模型集成起来,并没有提供统一的Serving服务

Fairing组件能够帮助用户将写好的机器学习代码打包成镜像。

K8s集群 :如上图所示

机器学习工作的流程

当用户开发和部署一个机器学习系统时,一般来讲主要有几个阶段,这里列举了两个阶段:实验阶段和生产阶段整个的过程其实是一个迭代的过程,并不是说只运行一次就结束了,在每个阶段执行过程中需要对流程中各个阶段的输出进行评估,通过评估后对整个流程进行一个改进,下图为按照顺序列举的工作流的各个阶段:

img

Kubeflow提供的组件与学习框架对应情况

实验阶段

img

确认问题与收集分析阶段是由用户来完成的,选择机器学习算法并进行编码在选择机器学习框架时是独立的部分,kubeflow在这个部分没有提供任何功能;

但在模型训练过程中,提供了Jupiter Notebook支持,通过Fairing帮助用户把编译好 的代码打包成镜像,方便其运行,还有就是这种Pipelines工作流模式,整个过程类似于一个工作流的方式,它是分很多步骤的。

在这个模型训练中可以根据Pipelines定义在实验阶段工作流需要执行哪些步骤;调整模型参数阶段用到了Katib这个功能组件。

生产阶段

img

数据格式转换需要用户自己来处理,生产阶段的模型训练是和我们之前提到的operator关联起来的,用户在这个阶段可以根据自己选择的机器学习框架在kubeflow提交学习作业,kubeflow可以帮助他们把作业管理起来。

Kubeflow如何与Volcano集成在一起?

Kubeflow的安装过程

下载kfctl: kfctl是一个安装工具,为二进制的文件,直接在网上下载即可

**配置环境变量:**这个过程中有两个比较重要的部分,一个是KF-NAME ,为我们此次安装所定义的名称;另一个是CONFIG-URI,为kubeflow要安装的具体信息,包括了版本、包含了哪些组件、组件的安装策略等

**安装:**按照下图步骤即可

img

安装结果

img

安装问题及建议

• 镜像无法下载

• 系统资源不足

• 先构建,再安装

02 Kubeflow with Volcano:TFJob集成

当用户想要运行TensorFlow作业时,其实可以创建一个TFJob CRD,创建完成后,TF Operator会去监控TFJob 这个CRD,能够获取到用户提交的作业信息,获取到之后会将TFJob 这个CRD转换成 PodGroup这个CRD,会添加一些调度信息,然后TF Operator这个任务就完成了。

后面是由Volcano来处理,Volcano会去监控PodGroup的信息,把它的信息拉到自己的组件里,根据策略对PodGroup里的Pod统一进行调度,调度好之后再将调度结果写回到这个ApiServer,写回之后Kubelet监控到Pod被调度出去了,会拿到对应本机的Pod,并将其启动起来。

img

如何定义一个TFJob ?

如下图所示:

img

img

TF operator未开启与开启gang-scheduing对比

img

03 在K8s环境和在Volcano上运行一个简单TFJob

• 在集群中部署Volcano

• 在集群中部署Kubeflow TF Operator

• 运行一个Kubeflow TensorFlow作业

tor未开启与开启gang-scheduing对比

[外链图片转存中…(img-oWw0VRvK-1649325131452)]

03 在K8s环境和在Volcano上运行一个简单TFJob

• 在集群中部署Volcano

• 在集群中部署Kubeflow TF Operator

• 运行一个Kubeflow TensorFlow作业

这篇关于6-机器学习场景下Volcano集成调度能力实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/fly910905/article/details/124022564
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/512264

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式