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集成调度能力实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512264

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最