概念 - 推理运行时

type
status
date
slug
summary
tags
category
icon
password
网址

推理运行时

KServe使用两个CRD来定义模型服务环境:
ServingRuntimeClusterServingRuntime
这两者的唯一区别在于一个是命名空间作用域,另一个是集群作用域。
一个ServingRuntime定义了可以服务一个或多个特定模型格式的Pod模板。每个ServingRuntime定义了关键信息,如运行时的容器镜像和运行时支持的模型格式列表。运行时的其他配置设置可以通过容器规范中的环境变量来传递。
这些CRD提供了更好的灵活性和可扩展性,使用户能够快速定义或自定义可重用的运行时,而无需修改任何控制器代码或控制器命名空间中的任何资源。
以下是ServingRuntime的示例:
KServe提供了多个开箱即用的ClusterServingRuntime,使用户可以快速部署常见的模型格式,而无需自己定义运行时。
名称
支持的模型格式
kserve-lgbserver
LightGBM
kserve-mlserver
SKLearn, XGBoost, LightGBM, MLflow
kserve-paddleserver
Paddle
kserve-pmmlserver
PMML
kserve-sklearnserver
SKLearn
kserve-tensorflow-serving
TensorFlow
kserve-torchserve
PyTorch
kserve-tritonserver
TensorFlow, ONNX, PyTorch, TensorRT
kserve-xgbserver
XGBoost
除了这些内置运行时外,您还可以通过添加自定义运行时来扩展KServe安装。这在AMD推理服务器的示例中有所演示。

规范属性

ServingRuntime规范中的可用属性:
属性
描述
multiModel
此ServingRuntime是否与ModelMesh兼容并用于多模型用途(相对于KServe单模型服务)。默认为false
disabled
禁用此运行时
containers
与运行时关联的容器列表
containers[ ].image
当前容器的容器镜像
containers[ ].command
提供的镜像中的可执行命令
containers[ ].args
命令行参数字符串列表
containers[ ].resources
Kubernetes限制或请求
containers[ ].env
传递给容器的环境变量列表
containers[ ].imagePullPolicy
容器镜像拉取策略
containers[ ].workingDir
当前容器的工作目录
containers[ ].livenessProbe
检查容器存活性的探针
containers[ ].readinessProbe
检查容器就绪性的探针
supportedModelFormats
当前运行时支持的模型类型列表
supportedModelFormats[ ].name
模型格式的名称
supportedModelFormats[ ].version
模型格式的版本。用于验证预测器是否被运行时支持。建议在此处仅包含主版本号,例如"1"而不是"1.15.4"
supportedModelFormats[ ].autoselect
设置为true以允许在指定此模型格式但未指定显式运行时时使用ServingRuntime进行自动模型部署。默认值为false
supportedModelFormats[ ].priority
此服务运行时用于自动选择的优先级。当多个服务运行时支持相同的模型格式时,用于选择服务运行时。该值应大于零。值越高,优先级越高。如果AutoSelect为false或未指定,则不考虑优先级。可以通过在InferenceService中指定运行时来覆盖优先级。
storageHelper.disabled
禁用存储助手
nodeSelector
影响Kubernetes调度以将Pod分配给节点
affinity
影响Kubernetes调度以将Pod分配给节点
tolerations
允许Pod被调度到具有匹配污点的节点
ModelMesh利用了此处未列出的其他字段。更多信息请参见这里
注意:ServingRuntimes支持在容器规范中使用形式为{{.Variable}}的模板变量。这些变量应映射到InferenceService的元数据对象中的字段。这主要用于将InferenceService特定的信息(如名称)传递到运行时环境。几个开箱即用的ClusterServingRuntime通过在运行时容器参数中使用--model_name={{.Name}}来确保当用户部署InferenceService时,名称会传递给服务器。

使用ServingRuntimes

ServingRuntimes可以显式和隐式使用。

显式:指定运行时

当用户在其InferenceServices中定义预测器时,他们可以显式指定ClusterServingRuntimeServingRuntime的名称。例如:
在这里,指定的运行时是kserve-mlserver,因此KServe控制器将首先在命名空间中搜索具有该名称的ServingRuntime。如果不存在,控制器将搜索ClusterServingRuntimes列表。如果找到一个,控制器将首先验证预测器中提供的modelFormat是否在supportedModelFormats列表中。如果是,则将使用运行时提供的容器和Pod信息进行模型部署。
注意
模型服务运行时版本可以通过InferenceService yaml中的runtimeVersion字段进行覆盖,我们强烈建议在生产服务中设置此字段。

隐式:自动选择

supportedModelFormats列表的每个条目中,可以选择指定autoSelect: true,以表明如果没有显式指定运行时,则给定的ServingRuntime可以考虑用于具有相应模型格式的预测器的自动选择。例如,kserve-sklearnserver ClusterServingRuntime支持SKLearn版本1并启用了autoSelect
当部署以下未指定运行时的InferenceService时,控制器将寻找支持sklearn的运行时:
由于kserve-sklearnserver在其supportedModelFormats列表中有一个带有sklearnautoSelect: true的条目,这个ClusterServingRuntime将被用于模型部署。
如果还指定了版本:
那么,supportedModelFormat的版本也必须匹配。在这个例子中,kserve-sklearnserver将不符合选择条件,因为它只列出了对sklearn版本1的支持。

优先级

如果多个服务运行时支持相同的model format,具有相同的version并且支持相同的protocolVersion,那么我们可以选择为服务运行时指定priority。如果未显式指定运行时,则根据priority自动选择运行时。请注意,只有当autoSelecttrue时,priority才有效。值越高表示优先级越高。
例如,让我们考虑服务运行时mlserverkserve-sklearnserver。两个服务运行时都支持版本为1sklearn模型格式,并且都支持protocolVersion v2。还要注意,两个服务运行时都启用了autoSelect
当部署以下未指定运行时的InferenceService时,控制器将寻找支持sklearn的运行时:
控制器将找到两个运行时kserve-sklearnservermlserver,因为它们在其supportedModelFormats列表中都有带有sklearnautoSelect: true的条目。由于存在多个支持的运行时,控制器现在根据优先级对运行时进行排序。由于mlserver具有更高的priority值,这个ClusterServingRuntime将被用于模型部署。
优先级的约束
  • 更高的优先级值意味着更高的优先级。该值必须大于0。
  • 优先级仅在启用自动选择时有效,否则不考虑优先级。
  • 具有优先级的服务运行时优先于未指定优先级的服务运行时。
  • 具有相同名称和相同模型版本的两个模型格式不能具有相同的优先级。
  • 如果多个服务运行时支持该模型格式,但都没有指定优先级,则无法保证将选择哪个运行时。
  • 如果服务运行时支持modelFormat的多个版本,则它们应具有相同的优先级。例如,下面显示的服务运行时支持两个sklearn版本。它们应该具有相同的优先级。
    警告
    如果多个运行时将相同格式和/或版本列为可自动选择但未指定优先级,则根据creationTimestamp选择运行时,即选择最近创建的运行时。因此无法保证将选择哪个运行时。因此用户和集群管理员应谨慎启用autoSelect

    先前的架构

    目前,如果用户使用旧架构部署预测器(在该架构中,您将框架/格式指定为键),则KServe webhook将自动将其映射到其中一个开箱即用的ClusterServingRuntimes。这是为了向后兼容。例如:
    先前架构等效的新架构
    先前的架构将变异为新架构,其中显式指定了kserve-sklearnserver ClusterServingRuntime。
    警告
    旧架构最终将被移除,取而代之的是新的Model规范,在该规范中,用户可以指定模型格式和可选的相应版本。在KServe的早期版本中,支持的预测器格式和容器镜像是在控制平面命名空间中的ConfigMap中定义的。从v0.7、v0.8、v0.9升级的现有InferenceServices需要转换为新的模型规范,因为预测器配置将在v0.10中逐步淘汰。
    上一篇
    概念-数据面板-开放推理协议V2
    下一篇
    LLM推理运行时 - 概览
    Loading...
    文章列表
    Kserve中文文档
    快速开始
    管理指南
    用户指南
    开发指南
    机器学习概念
    大模型周报