在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

基于OAM和kfserving如何实现通用化云原生模型应用部署

150次阅读
没有评论

共计 4614 个字符,预计需要花费 12 分钟才能阅读完成。

本篇文章为大家展示了基于 OAM 和 kfserving 如何实现通用化云原生模型应用部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

kfserving 是 kubeflow 一个用于构建部署标准化的算法模型 serverless 组件,但其和 knative 深度绑定,对传输链路进行了隐藏,如封装 istio,这样复杂的结构不利于生产环境直接使用,这里通过 kubevela 实现的 OAM 将 serverless 流程重新进行简单的标准化封装,以实现一个简单的算法模型 serverless。

背景

如何为算法团队提供高效的工程化上云支持是云原生时代一个很重要的也很有意义的课题,现在开源社区比较完善的应该是 Kubeflow —— 一系列 ML 实验部署环境工具的集合,不过整体来看比较笨重,不适合小团队生产环境快速落地,这里基于 kubevela 和 kfserving 实现一个算法标准化模型的例子,供参考。

项目介绍

项目地址:https://github.com/shikanon/vela-example/tree/main/example/sklearnserver

通过 kubevela 提供了三种对象 mpserver, hpa, httproute。

mpserver 主要负责生成 deployment 和 service 资源,是程序运行的主体

httroute 主要负责生成对外暴露的端口,访问 url

hpa 主要保证服务的可扩展性

部署前准备工作

由于使用到 vela,所以需要先下载 vela 客户端

创建一个 sklearn 的服务

案例放在 exmaple/sklearnserver 下面。

本地镜像编译并运行:

#  编译
docker build -t swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris -f sklearn.Dockerfile .

上传到华为云镜像仓库

docker login swr.cn-north-4.myhuaweicloud.com
docker push swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris

创建一个 demo-iris-01.yaml 的应用文件

name: demo-iris-01
services:
 demo-iris:
 type: mpserver
 image: swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris
 ports: [8080]
 cpu:  200m 
 memory:  250Mi 
 httproute:
 gateways: [external-gateway]
 hosts: [demo-iris.rcmd.testing.mpengine]
 servernamespace: rcmd
 serverport: 8080
 hpa:
 min: 1
 max: 1
 cpuPercent: 60

因为这里使用的是 rcmd 命名空间,在创建的时候需要切换,可以通过 vela dashboard 通过可视化界面创建一个 rcmd 命名空间的环境:

vela dashboard

成功后可以通过 vela env 查看:

$ vela env ls
NAME CURRENT NAMESPACE EMAIL DOMAIN
default default
rcmd * rcmd

在云原生环境运行应用

$ vela up -f demo-iris-01.yaml
Parsing vela appfile ...
Load Template ...
Rendering configs for service (demo-iris)...
Writing deploy config to (.vela/deploy.yaml)
Applying application ...
Checking if app has been deployed...
App has not been deployed, creating a new deployment...
? App has been deployed ????????????
 Port forward: vela port-forward demo-iris-01
 SSH: vela exec demo-iris-01
 Logging: vela logs demo-iris-01
 App status: vela status demo-iris-01
 Service status: vela status demo-iris-01 --svc demo-iris

测试

部署好后可以测试:

$ curl -i -d  {instances :[[5.1, 3.5, 1.4, 0.2]]}  -H  Content-Type: application/json  -X POST demo-iris.rcmd.testing.mpengine:8000/v1/models/model:predict
{predictions : [0]}

实现说明 kfserver 开发算法 server

kfserver 提供了多种常用框架的 server,比如 sklearn, lgb, xgb, pytorch 等多种服务的 server 框架,kfserver 基于 tornado 框架进行开发,其提供了 模型加载,接口健康检测,预测及 参考解释等多个抽象接口,详细见 kfserving/kfserving/kfserver.py:

...
def create_application(self):
 return tornado.web.Application([
 # Server Liveness API returns 200 if server is alive.
 (r / , LivenessHandler),
 (r /v2/health/live , LivenessHandler),
 (r /v1/models ,
 ListHandler, dict(models=self.registered_models)),
 (r /v2/models ,
 ListHandler, dict(models=self.registered_models)),
 # Model Health API returns 200 if model is ready to serve.
 (r /v1/models/([a-zA-Z0-9_-]+) ,
 HealthHandler, dict(models=self.registered_models)),
 (r /v2/models/([a-zA-Z0-9_-]+)/status ,
 HealthHandler, dict(models=self.registered_models)),
 (r /v1/models/([a-zA-Z0-9_-]+):predict ,
 PredictHandler, dict(models=self.registered_models)),
 (r /v2/models/([a-zA-Z0-9_-]+)/infer ,
 PredictHandler, dict(models=self.registered_models)),
 (r /v1/models/([a-zA-Z0-9_-]+):explain ,
 ExplainHandler, dict(models=self.registered_models)),
 (r /v2/models/([a-zA-Z0-9_-]+)/explain ,
 ExplainHandler, dict(models=self.registered_models)),
 (r /v2/repository/models/([a-zA-Z0-9_-]+)/load ,
 LoadHandler, dict(models=self.registered_models)),
 (r /v2/repository/models/([a-zA-Z0-9_-]+)/unload ,
 UnloadHandler, dict(models=self.registered_models)),
 ])
...

这里我们使用的 sklearn server 的案例主要实现了 predict 接口:

import kfserving
import joblib
import numpy as np
import os
from typing import Dict
MODEL_BASENAME =  model 
MODEL_EXTENSIONS = [.joblib ,  .pkl ,  .pickle]

class SKLearnModel(kfserving.KFModel): # pylint:disable=c-extension-no-member  def __init__(self, name: str, model_dir: str):  super().__init__(name)  self.name = name  self.model_dir = model_dir  self.ready = False  def load(self) -  bool:  model_path = kfserving.Storage.download(self.model_dir)  paths = [os.path.join(model_path, MODEL_BASENAME + model_extension)  for model_extension in MODEL_EXTENSIONS]  for path in paths:  if os.path.exists(path):  self._model = joblib.load(path)  self.ready = True  break  return self.ready  def predict(self, request: Dict) -  Dict:  instances = request[instances]  try:  inputs = np.array(instances)  except Exception as e:  raise Exception(  Failed to initialize NumPy array from inputs: %s, %s  % (e, instances))  try:  result = self._model.predict(inputs).tolist()  return {predictions : result}  except Exception as e:  raise Exception(Failed to predict %s  % e)

上述内容就是基于 OAM 和 kfserving 如何实现通用化云原生模型应用部署,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计4614字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 伊人久久91 | 真人做人试看60分钟免费视频 | 老鸭窝日本 | 免费一级成人免费观看 | 久久久久成人片免费观看蜜芽 | 福利一区视频 | 韩国乱码伦视频免费 | 在线看片免费人成视频久网下载 | 亚洲天堂免费在线视频 | 亚洲综合色成在线播放 | 两口子交换真实刺激高潮 | 青青热久 | 国精产品一品二品国精品69xx | 中文字幕日韩人妻在线视频 | 久久er这里都是精品23 | 日本高清无卡码一区二区久久 | 免费观看的av毛片的网站 | 欧美肥胖老妇videos另类 | 欧美交换配乱吟粗大25p | 少妇放荡的呻吟干柴烈火动漫 | 国产区一二三四区2021 | 91精品国产91久久久久福利 | 好紧好湿好爽免费视频 | 日产亚洲一区二区三区 | 女人被男人爽到呻吟的视频 | 国产精品亚洲二区 | 性色av无码一区二区三区人妻 | 国产精品一区二区av | 插丝袜美女 | 美女黄色一级毛片 | 色先锋影院 | 欧美午夜精品 | 欧美日韩国产一区二区三区不卡 | 日本夜免费视频视频大片 | 亚洲男同志gay 片可播放 | 亚洲av综合色区无码一区 | 日本高清熟妇老熟妇 | 国产精品柏欣彤在线观看 | 亚洲va中文字幕不卡无码 | 黄色毛片免费 | 国产资源网 |