中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于OAM和kfserving如何實現通用化云原生模型應用部署

發布時間:2021-11-23 21:41:53 來源:億速云 閱讀:258 作者:柒染 欄目:云計算

本篇文章為大家展示了基于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.com
docker push swr.cn-north-4.myhuaweicloud.com/hw-zt-k8s-images/sklearnserver:demo-iris
  1. 創建一個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
  1. 在云原生環境運行應用

$ 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]}

基于OAM和kfserving如何實現通用化云原生模型應用部署

實現說明

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如何實現通用化云原生模型應用部署

上述內容就是基于OAM和kfserving如何實現通用化云原生模型應用部署,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

oam
AI

驻马店市| 张家口市| 崇明县| 孟津县| 郴州市| 远安县| 淅川县| 临邑县| 买车| 阳朔县| 玛纳斯县| 禹州市| 堆龙德庆县| 海林市| 和平县| 体育| 广丰县| 改则县| 军事| 彰化市| 乌鲁木齐县| 黄浦区| 平南县| 习水县| 建始县| 苍山县| 宁安市| 元氏县| 荔波县| 耒阳市| 体育| 汤阴县| 翁牛特旗| 涿鹿县| 安乡县| 龙泉市| 塘沽区| 蒲江县| 民丰县| 沅江市| 延川县|