千家信息网

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

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,本篇文章为大家展示了基于OAM和kfserving如何实现通用化云原生模型应用部署,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。kfserving 是 kub
千家信息网最后更新 2024年11月22日基于OAM和kfserving如何实现通用化云原生模型应用部署

本篇文章为大家展示了基于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 下面。

  1. 本地镜像编译并运行:

# 编译docker build -t swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris -f sklearn.Dockerfile .
  1. 上传到华为云镜像仓库

docker login swr.cn-north-4.myhuaweicloud.comdocker push swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris
  1. 创建一个demo-iris-01.yaml的应用文件

name: demo-iris-01services:  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 lsNAME    CURRENT NAMESPACE       EMAIL   DOMAINdefault         defaultrcmd    *       rcmd
  1. 在云原生环境运行应用

$ vela up -f demo-iris-01.yamlParsing 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 kfservingimport joblibimport numpy as npimport osfrom typing import DictMODEL_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如何实现通用化云原生模型应用部署,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

模型 环境 算法 应用 接口 标准 框架 服务 标准化 运行 化云 内容 可以通过 团队 多种 技能 案例 知识 空间 镜像 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 最终终幻想14最新服务器 刀片服务器pc服务器 光明大陆双平台服务器 沧州盘古网络技术有限公司征信 pdu服务器专用电源哪家好 用友数据库修复软件完整正式版 江苏专业软件开发价格标准 湖南专业上位机软件开发 现代密码学相关的数据库 易语言软件开发方向 康舒550瓦服务器电源原理图 为什么悟空识字连不上服务器 数据库问题和答案 计算机应用是否包含软件开发 电子商务网络技术和计算机技术 软件开发年度工作总结范文 天命之子与服务器通信时出现问题 方舟单机服务器管理员代码 网络安全的诗 贝比岛里面的服务器有什么用 新版本吃鸡如何选择服务器 tracker服务器下载速度慢 家庭服务器nas需要公网 奉贤区口碑好的软件开发收费标准 C大规模软件开发 建议 大足 软件开发 网络技术的利弊英文作文 大数据培数据库 甘肃蓝盾网络技术学院 问卷调查 数据库设计
0