欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Kubeflow】KFServing的架构分析

程序员文章站 2024-03-11 10:50:01
...

KFServing的架构

架构包含两个部分,分别是Data Plane和Control Plane。

Control Plane主要负责管理模型的生命周期,而Data Plane主要负责在模型部署后进行模型间的数据交互。

分为三层,最外层是Kubernetes集群组件,包含Kubernetes集群的负载均衡器。

在模型在Kubernetes集群中发布服务,用户的预测请求首先被Kubernetes集群组件接收,在Kubernetes集群级别进行负载均衡。

在InferenceService发布成功后,客户端可以发一个预测请求,预测工作流程大致如下:用户的请求首先会被Istio的Ingress Gateway接收,Route的流量指向Activator,Activator在收到请求后会自动启动Pod,然后将流量转发过去。

根据ControlPlane中定义的canaryTraffic的比例,转发给Default Traffic路由或Canary Traffic路由。

Orchestrator会对请求进行编排处理,在进行预测前,需要预先对接收的数据进行处理,例如将人眼可以识别的图片转换为机器识别的二进制文件,然后发送给Serving进行预测。

这些组件会异步执行,最后由Orchestrator汇总,返回统一的结果。整个预测的流程结束。

KFServing是一个模型服务单元,优势是和Kubernetes深度集成。

 

KFServing Data Plane

几个模块共同协作完成一个预测请求。

在Transformer、Explainer、Predictor中,Predictor是必须的,是系统的核心,用于响应用户的预测请求,其他两个是可选的。

Explainer提供模型解释。用户可以定义自己的模型解释代码或镜像,KFServing可以使用相关的Endpoint对其进行配置。

Transformer使用户可以在预测和解释工作流程之前定义预处理和后期处理步骤。

KFServing支持两个Endpoint,分别是Default Endpoint和Canary Endpoint,允许用户根据百分比控制路由。

一般是只控制Canary Endpoint的业务路由比例,剩余的业务会被分配到Default Endpoint中。

如果没配置Canary Endpoint,则全部业务分配到Default Endpoint中,为蓝绿发布;如果配置了Canary Endpoint,则为金丝雀发布。

蓝绿发布,通过冗余解决服务发布过程服务停止的时间。生成环境需要两组配置,一个是Active的生产环境配置(绿配置),另一组是Inactive的生产环境配置(蓝绿配置),检测新版本是否有故障或异常,如果运行良好则可以删除旧的配置,如果有问题,则可以快速回滚回去。

金丝雀发布,成为灰度发布,平滑过渡的服务发布方式,增量发布,在原有版本可用的情况下部署一个新版本应用作为金丝雀,用于测试新版本的性能和表现。

KFServing Control Plane

InferenceService定义的字段:

  • apiVersion:serving.kubeflow.org/v1alph2
  • kind:InferenceService
  • metadata:和Kubernetes Resource的字段相同,包含资源表示字段的专用标志,如name,namespace,label
  • spec:Default定义Default EndpointSpec,Canary,定义Canary EndpoingSpec,CanaryTrafficPercent,定义路由到Canary Endpoing的业务流量(百分比)
  • status:状态

InferenceService EndpointSpec定义的字段:

  • predictor:PredictorSpec,定义模型预测规范
  • explainer:ExplainerSpec,定义模型解释规范
  • transformaer:Transformer,定义在预测模型前,后的处理行为规范

InferenceService PredictorSpec定义的字段:

  • custom:CustomSpec,Custom Predictor规范
  • tensorflow:TensorFlowSpec
  • xgboost:XgboostSpec
  • sklearn,pytroch等等

DeploymentSpec:DeploymentSpec,设置Pod的最小值,最大值

TensorflowSpec定义的字段

  • storageUri:训练好的模型存储的路径或URL,支持PVC
  • runtimeVersion:StatusConfigurationSpec,设置的版本,可以在ConfigMap设置
  • resources:Kubernetes core,定义Pod使用的资源,默认1CPU,2GB MEM

DeploymentSpec定义的字段

  • serviceAccountName:指定ServiceAccount的名词,以便下载模型,发布Service的URL
  • minReplicas:Pod数量的最小值,默认为0
  • maxReplicas:Pod数量的最大值

一个定义YAML例子

apiVersion: "serving.kubeflow.org/v1alph2"
kind: "InferenceService"
metadata:
    name:"flowers-sample"
spec:
    default:
        predictor:
            #90%的流量分配到Default
            tensorflow:
                stroageUri: "default_model_url"
   canaryTrafficPercent: 10
   canary:
       predictor:
           # 10流量
           tensorflow:
               storageUri: "canary_model_url"