基于 KubeVela 的机器学习实践

简介:本文主要介绍如何使用 KubeVela 的 AI 插件,来帮助工程师更便捷地完成模型训练及模型服务。

作者:KubeVela 社区

在机器学习浪潮迸发的当下,AI 工程师除了需要训练、调试自己的模型之外,还需要将模型进行部署上线,从而验证模型的效果(当然,有的时候,这部分工作由 AI 系统工程师来完成)。这一部分工作对于 AI 工程师们来说是繁琐、且消耗额外精力的。

而在云原生时代,我们的模型训练和模型服务也通常在云上进行。这样做不仅提高了可扩展性,还能够提升资源的利用率。这对于需要消耗大量计算资源的机器学习场景来说,是十分有效的。

但是 AI 工程师要想使用云原生的能力通常比较困难。随着时间的推移,云原生的概念已经越来越复杂。想要在云原生之上部署一个简单的模型服务,可能对于 AI 工程师来说,需要额外学习数种概念:比如 Deployment、Service、Ingress 等。

而 KubeVela 作为一个简单、易用、且高可扩展的云原生应用管理工具,能让开发人员方便快捷地在 Kubernetes 上定义与交付应用,无需了解任何底层云原生基础设施相关的细节。KubeVela 拥有着丰富的可扩展性,其 AI 插件提供了模型训练、模型服务、A/B 测试等功能,覆盖了 AI 工程师的基本需求,能够帮助 AI 工程师快速在云原生环境中进行模型训练和模型服务。

本文主要介绍如何使用 KubeVela 的 AI 插件,来帮助工程师更便捷地完成模型训练及模型服务。

KubeVela AI 插件

KubeVela AI 插件分为模型训练和模型服务两个插件,模型训练插件基于 KubeFlow 的 training-operator,能够支持如 TensorFlow、PyTorch、MXNet 等不同框架的分布式模型训练。而模型服务插件基于 Seldon Core,可以便捷地使用模型启动模型服务,同时也支持流量分发,A/B 测试等高级功能。

通过 KubeVela AI 插件,可以大大简化模型训练任务的部署以及模型服务的部署,同时,可以将模型训练、模型服务等过程与 KubeVela 本身的工作流、多集群等功能相结合,从而完成生产可用的服务部署。

注:你可以在 KubeVela Samples[1] 中找到所有的源码和 YAML 文件。如果你想使用在这个例子中预训练的模型,文件夹中的 style-model.yaml 和 color-model.yaml 会将模型复制到 PVC 中。

模型训练

首先启动模型训练和模型服务的两个插件。

vela addon enable model-training
vela addon enable model-serving

模型训练中包含 model-training 和 jupyter-notebook 两个组件类型, 模型服务中包含 model-serving 这个组件类型。可以通过 vela show 命令来查看这三个组件中的具体参数。

你也可以选择查阅 KubeVela AI 插件文档[2], 来获取更多信息。
vela show model-training
vela show jupyter-notebook
vela show model-serving

我们来训练一个简单的使用 TensorFlow 框架的模型,这个模型的效果是能够将灰色的图片变成彩色的。部署如下 YAML 文件:

注:模型训练的源码来源于:emilwallner/Coloring-greyscale-images[3]
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: training-servingnamespace: default
spec:components:# 训练模型- name: demo-trainingtype: model-trainingproperties:# 训练模型的镜像image: fogdong/train-color:v1# 模型训练的框架framework: tensorflow# 声明存储,将模型持久化。此处会使用集群内的默认 storage class 来创建 PVCstorage:- name: "my-pvc"mountPath: "/model"

此时, KubeVela 将拉起一个 TFJob 进行模型训练。

仅仅是训练模型很难看出效果,我们修改一下这个 YAML 文件,将模型服务放到模型训练的步骤之后。同时,因为模型服务会直接启动模型,而模型的输入输出不太直观(ndarray 或者 Tensor),因此,我们再部署一个测试服务来调用服务,并将结果转换成图像。

部署如下 YAML 文件:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: training-servingnamespace: default
spec:components:# 训练模型- name: demo-trainingtype: model-trainingproperties:image: fogdong/train-color:v1framework: tensorflowstorage:- name: "my-pvc"mountPath: "/model"# 启动模型服务- name: demo-servingtype: model-serving# 模型服务会在模型训练完成后启动dependsOn:- demo-trainingproperties:# 启动模型服务使用的协议,可以不填,默认使用 seldon 自身的协议protocol: tensorflowpredictors:- name: model# 模型服务的副本数replicas: 1graph:# 模型名name: my-model# 模型框架implementation: tensorflow# 模型地址,上一步会将训练完的模型保存到 my-pvc 这个 pvc 当中,所以通过 pvc://my-pvc 指定模型的地址modelUri: pvc://my-pvc# 测试模型服务- name: demo-rest-servingtype: webservice# 测试服务会在模型训练完成后启动dependsOn:- demo-servingproperties:image: fogdong/color-serving:v1# 使用 LoadBalancer 暴露对外地址,方便调用exposeType: LoadBalancerenv:- name: URL# 模型服务的地址value: http://ambassador.vela-system.svc.cluster.local/seldon/default/demo-serving/v1/models/my-model:predictports:# 测试服务的端口- port: 3333expose: true

部署之后,通过 vela ls 来查看应用的状态:

$ vela lstraining-serving        demo-training        model-training           running  healthy  Job Succeeded  2022-03-02 17:26:40 +0800 CST
├─                    demo-serving         model-serving            running  healthy  Available      2022-03-02 17:26:40 +0800 CST
└─                    demo-rest-serving    webservice               running  healthy  Ready:1/1      2022-03-02 17:26:40 +0800 CST

可以看到,应用已经正常启动。通过 vela status <app-name> --endpoint 来查看应用的服务地址。

$ vela status training-serving --endpoint+---------+-----------------------------------+---------------------------------------------------+
| CLUSTER |     REF(KIND/NAMESPACE/NAME)      |                     ENDPOINT                      |
+---------+-----------------------------------+---------------------------------------------------+
|         | Service/default/demo-rest-serving | tcp://47.251.10.177:3333                          |
|         | Service/vela-system/ambassador    | http://47.251.36.228/seldon/default/demo-serving  |
|         | Service/vela-system/ambassador    | https://47.251.36.228/seldon/default/demo-serving |
+---------+-----------------------------------+---------------------------------------------------+

该应用有三个服务地址,第一个是我们的测试服务的地址,第二个和第三都是原生模型的地址。我们可以调用测试服务来查看模型的效果:测试服务会读取图像的内容,并将其转成 Tensor 并请求模型服务,最后将模型服务返回的 Tensor 转成图像返回。

我们选择一张黑白的女性图片作为输入:

请求后,可以看到,输出了一张彩色图片:

模型服务:灰度测试

除了直接启动模型服务,我们还可以在一个模型服务中使用多个版本的模型,并对其分配不同的流量以进行灰度测试。

部署如下 YAML,可以看到,v1 版本的模型和 v2 版本的模型都设置为了 50% 的流量。同样,我们在模型服务后面部署一个测试服务:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: color-servingnamespace: default
spec:components:- name: color-model-servingtype: model-servingproperties:protocol: tensorflowpredictors:- name: model1replicas: 1# v1 版本的模型流量为 50traffic: 50graph:name: my-modelimplementation: tensorflow# 模型地址,在 color-model 这个 pvc 中 /model/v1 路径下存放了我们的 v1 版本模型,所以通过 pvc://color-model/model/v1 指定模型的地址modelUri: pvc://color-model/model/v1- name: model2replicas: 1# v2 版本的模型流量为 50traffic: 50graph:name: my-modelimplementation: tensorflow# 模型地址,在 color-model 这个 pvc 中 /model/v2 路径下存放了我们的 v2 版本模型,所以通过 pvc://color-model/model/v2 指定模型的地址modelUri: pvc://color-model/model/v2- name: color-rest-servingtype: webservicedependsOn:- color-model-servingproperties:image: fogdong/color-serving:v1exposeType: LoadBalancerenv:- name: URLvalue: http://ambassador.vela-system.svc.cluster.local/seldon/default/color-model-serving/v1/models/my-model:predictports:- port: 3333expose: true

当模型部署完成后,通过 vela status <app-name> --endpoint 查看模型服务的地址:

$ vela status color-serving --endpoint+---------+------------------------------------+----------------------------------------------------------+
| CLUSTER |      REF(KIND/NAMESPACE/NAME)      |                         ENDPOINT                         |
+---------+------------------------------------+----------------------------------------------------------+
|         | Service/vela-system/ambassador     | http://47.251.36.228/seldon/default/color-model-serving  |
|         | Service/vela-system/ambassador     | https://47.251.36.228/seldon/default/color-model-serving |
|         | Service/default/color-rest-serving | tcp://47.89.194.94:3333                                  |
+---------+------------------------------------+----------------------------------------------------------+

使用一张黑白的城市图片请求模型:

可以看到,第一次请求的结果如下。虽然天空和地面都被渲染成彩色了,但是城市本身还是黑白的:

再次请求,可以看到,这次请求的结果中,天空、地面和城市都被渲染成了彩色:

通过对不同版本的模型进行流量分发,可以帮助我们更好地对模型结果进行判断。

模型服务:A/B 测试

同样一张黑白的图片,我们既可以通过模型将其变成彩色的,也可以通过上传另一张风格图片,对原图进行风格迁移。

对于用户来说,究竟是彩色的图片好还是不同风格的图片更胜一筹?我们可以通过进行 A/B 测试,来探索这个问题。

部署如下 YAML,通过设置 customRouting,将 Header 中带有 style: transfer 的请求,转发到风格迁移的模型。同时,使这个风格迁移的模型与彩色化的模型共用一个地址。

注:风格迁移的模型来源于 TensorFlow Hub[4]
apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:name: color-style-ab-servingnamespace: default
spec:components:- name: color-ab-servingtype: model-servingproperties:protocol: tensorflowpredictors:- name: model1replicas: 1graph:name: my-modelimplementation: tensorflowmodelUri: pvc://color-model/model/v2- name: style-ab-servingtype: model-servingproperties:protocol: tensorflow# 风格迁移的模型需要的时间较长,设置超时时间使请求不会被超时timeout: "10000"customRouting:# 指定自定义 Headerheader: "style: transfer"# 指定自定义路由serviceName: "color-ab-serving"predictors:- name: model2replicas: 1graph:name: my-modelimplementation: tensorflowmodelUri: pvc://style-model/model- name: ab-rest-servingtype: webservicedependsOn:- color-ab-serving- style-ab-servingproperties:image: fogdong/style-serving:v1exposeType: LoadBalancerenv:- name: URLvalue: http://ambassador.vela-system.svc.cluster.local/seldon/default/color-ab-serving/v1/models/my-model:predictports:- port: 3333expose: true

部署成功后,通过 vela status <app-name> --endpoint 查看模型服务的地址:

$ vela status color-style-ab-serving --endpoint+---------+---------------------------------+-------------------------------------------------------+
| CLUSTER |    REF(KIND/NAMESPACE/NAME)     |                       ENDPOINT                        |
+---------+---------------------------------+-------------------------------------------------------+
|         | Service/vela-system/ambassador  | http://47.251.36.228/seldon/default/color-ab-serving  |
|         | Service/vela-system/ambassador  | https://47.251.36.228/seldon/default/color-ab-serving |
|         | Service/vela-system/ambassador  | http://47.251.36.228/seldon/default/style-ab-serving  |
|         | Service/vela-system/ambassador  | https://47.251.36.228/seldon/default/style-ab-serving |
|         | Service/default/ab-rest-serving | tcp://47.251.5.97:3333                                |
+---------+---------------------------------+-------------------------------------------------------+

这个应用中,两个服务各自有两个地址,但是第二个 style-ab-serving 的模型服务地址是无效的,因为这个模型服务已经被指向了 color-ab-serving 的地址中。同样,我们通过请求测试服务来查看模型效果。

首先,在不加 header 的情况下,图像会从黑白变为彩色:

我们添加一个海浪的图片作为风格渲染:

我们为本次请求加上 style: transfer 的 Header,可以看到,城市变成了海浪风格:

我们还可以使用一张水墨画的图片作为风格渲染:

可以看到,这次城市变成了水墨画风格:

总结

通过 KubeVela 的 AI 插件,可以帮助你更便捷地进行模型训练与模型服务。

除此之外,通过与 KubeVela 的结合,我们还能将测试完效果的模型通过 KubeVela 的多环境功能,下发到不同的环境中,从而实现模型的灵活部署。

相关链接

[1] KubeVela Samples

samples/11.Machine_Learning_Demo at master · oam-dev/samples · GitHub

[2] KubeVela AI 插件文档

机器学习插件 | KubeVela

[3] emilwallner/Coloring-greyscale-images

https://github.com/emilwallner/Coloring-greyscale-images

[4]TensorFlow Hub

https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

Gartner发布2022年云平台服务技术成熟度曲线,iPaaS、低代码将达到成熟期

Gartner 2022年云平台服务技术成熟度曲线显示&#xff0c;集成平台即服务&#xff08;iPaaS&#xff09;和低代码应用平台&#xff08;LCAP&#xff09;技术将在不到两年的时间内达到生产成熟期&#xff08;Plateau of Productivity&#xff09;。 编辑 | 宋慧 供稿 | Gartner…

贼喊捉贼?“盗版”软件开发者向 GitHub 投诉被侵权

整理 | 于轩 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;拥有超过2亿个代码存储库&#xff0c;由8000多万用户共享&#xff0c;GitHub已然成为世界上最大和最先进的开发平台。 与其他托管用户生成内容的平台一样&#xff0c;这个庞大的代码库经常会接到版权…

基于 Serverless 架构的头像漫画风处理小程序

简介&#xff1a; 当一个程序员想要个漫画风的头像时... 前言 我一直都想要有一个漫画版的头像&#xff0c;奈何手太笨&#xff0c;用了很多软件 “捏不出来”&#xff0c;所以就在想着&#xff0c;是否可以基于 AI 实现这样一个功能&#xff0c;并部署到 Serverless 架构上让…

异动分析技术解决方案—异动归因之指标拆解

简介&#xff1a;归因的方法有多种&#xff0c;这篇文章的重点是指标拆解&#xff0c;也是我们做业务分析时最常用到的方法。我们的目的是解放人力&#xff0c;将指标拆解实现自动化&#xff0c;一方面可以加快业务迭代速度&#xff0c;快速定位问题&#xff1b;另一方面可以对…

阿里巴巴云原生混部系统 Koordinator 正式开源

简介&#xff1a; 脱胎于阿里巴巴内部&#xff0c;经过多年双 11 打磨&#xff0c;每年为公司节省数十亿的混部系统 Koordinator 今天宣布正式开源。通过开源&#xff0c;我们希望将更好的混部能力、调度能力开放到整个行业&#xff0c;帮助企业客户改进云原生工作负载运行的效…

足不出户,确保交付——独家交付秘籍(第二回)

简介&#xff1a;在后疫情时代&#xff0c;遇到无法出差、无法访客时&#xff0c;如何保障交付按时保质的进行&#xff0c;做好运维质量的保障&#xff0c;从而不影响企业整体营收&#xff0c;已成为我们生死攸关的难题。小锤在遇到无法只通过远程就完成项目交付验收&#xff0…

如何使用 PTS 快速发起微服务压测

简介&#xff1a;本文讲阐述什么是微服务架构、微服务架构对系统稳定性带来的影响&#xff0c;以及用性能测试验证稳定性的必要性、用户进行微服务压测的痛点和 PTS 的独特优势、云上使用 PTS 快速发起微服务压测的步骤&#xff0c;以及压测完成后排查分析相关问题的 Tips。 作…

一首让计算机崩溃的歌曲!

大家好&#xff0c;我是轩辕。想象一个场景&#xff1a;手机里播放一首音乐&#xff0c;然后你带着手机从一台电脑旁经过&#xff0c;电脑就被你弄崩溃死机了。这是不是有点像电影里的桥段&#xff1f;一年前&#xff0c;我写过一篇文章&#xff1a;电脑关机了&#xff0c;黑客…

OpenYurt 之 Yurthub 数据过滤框架解析

简介&#xff1a;OpenYurt 是业界首个非侵入的边缘计算云原生开源项目&#xff0c;通过边缘自治&#xff0c;云边协同&#xff0c;边缘单元化&#xff0c;边缘流量闭环等能力为用户提供云边一体化的使用体验。在 Openyurt 里边缘网络可以使用数据过滤框架在不同节点池里实现边缘…

金融核心系统云原生转型的三个挑战、六个误区和四个步骤

嘉宾 | 马振雄出品 | CSDN云原生近年来&#xff0c;云原生技术发展如火如荼&#xff0c;IT系统云原生转型已成共识&#xff0c;留给各行各业的只是何时云原生、怎样云原生的时间和方式问题。金融行业作为各类转型历来的排头兵&#xff0c;在推进云原生转型上同样不逞多让。金融…

Java 定时任务技术趋势

简介&#xff1a;定时任务是每个业务常见的需求&#xff0c;比如每分钟扫描超时支付的订单&#xff0c;每小时清理一次数据库历史数据&#xff0c;每天统计前一天的数据并生成报表等等。 作者&#xff1a;黄晓萌&#xff08;学仁&#xff09; Java 中自带的解决方案 使用 Ti…

从再造到赋能——360数科举办第二届技术开放日

8月31日&#xff0c;360数科在北京举办“从再造到赋能——2022年技术开放日”。这是360数科的第二届开放日&#xff0c;全面展示了公司在金融科技业务全环节的精细化运营成果&#xff0c;呈现了360数科从市场连接者到流程再造者的技术演化历程&#xff0c;展望了其成为行业赋能…

EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

简介&#xff1a;本文将重点介绍 EventBridge 和 IaC 的重点概念和特性&#xff0c;然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。 作者&#xff1a;王川&#xff08;弗丁&#xff09; 引言 EventBridge 作为构建 EDA 架构的基础设施&#xff0c…

如何使用 Serverless Devs 部署静态网站到函数计算(上)

简介&#xff1a;部署个静态网站到函数计算~ 前言 公司经常有一些网站需要发布上线&#xff0c;对比了几款不同的产品后&#xff0c;决定使用阿里云的函数计算&#xff08;FC)来托管构建出来的静态网站。 FC 弹性实例自带的500 Mb 存储空间对静态网站来说简直是太充足了 。 函…

盛邦安全创始人权晓文入选IDC中国CSO名人堂十大人物

在近日举办的IDC 2022 CSO全球网络安全峰会&#xff08;中国站&#xff09;上&#xff0c;盛邦安全入选API领域推荐厂商&#xff0c;盛邦安全创始人权晓文入选“中国CSO名人堂&#xff08;十大人物&#xff09;”&#xff0c;展现了盛邦安全在网络安全创新方面的不断进取和突出…

硬核调试实操 | 手把手带你实现 Serverless 断点调试

简介&#xff1a;本文将借助 Serverless Devs 工具&#xff0c;对函数计算 (FC&#xff09;应用的断点调试步骤进行详细指导&#xff0c;手把手带你实现 Serverless 的断点调试&#xff0c;并从以下四个方面为你厘清“硬核调试”的脉络步骤&#xff0c;干货满满。 导读&#x…

兑现 Service Mesh 的新价值:精确控制“爆炸半径”

简介&#xff1a;本文分享了阿里云内部所沉淀的全链路流量打标与路由的能力&#xff0c;做出服务网格技术新体验的同时&#xff0c;很好地兑现了服务网格的新价值。 作者&#xff1a;至简 软件是以持续迭代的方式去不断演进的。某种程度上&#xff0c;我们并不担心软件不完善…

15M安装包就能玩《原神》,带你了解云游戏背后的技术秘密

简介&#xff1a;对于大多数玩家来说&#xff0c;云游戏已经不是一个陌生的概念&#xff0c;它经常和秒玩、不吃设备、大屏临场感、上手门槛低、真香等字眼一起出现在评论留言区。的确&#xff0c;对于既想尝试高品质游戏大作又不想一直卷装备的玩家来说&#xff0c;云游戏做到…

ref绑定dom的三种写法

1、字符串形式 这种字符出串写法因为效率不好&#xff0c;所以不推荐使用 语法 标签上使用ref"name" 进行绑定 方法中this.refs.name拿到dom <input ref"input1" type"text" placeholder"点击按钮弹出内容" /> <button onC…

一文看懂边缘云在广电行业的应用

简介&#xff1a;随着中国广电的5G布局在不断加速&#xff0c;各地广电运营商均已开展面向边缘云建设和业务探索。边缘云作为5G网络架构中关键一环&#xff0c;具有广覆盖、低时延、大带宽的技术特点&#xff0c;是打通智慧广电建设的“经脉”&#xff0c;对未来开展4K/8K超高清…