概念 - 推理运行时
type
status
date
slug
summary
tags
category
icon
password
网址
推理运行时
KServe使用两个CRD来定义模型服务环境:
ServingRuntime和ClusterServingRuntime
这两者的唯一区别在于一个是命名空间作用域,另一个是集群作用域。
一个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中定义预测器时,他们可以显式指定ClusterServingRuntime或ServingRuntime的名称。例如:
在这里,指定的运行时是
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
列表中有一个带有sklearn
和autoSelect: true
的条目,这个ClusterServingRuntime将被用于模型部署。如果还指定了版本:
那么,
supportedModelFormat
的版本也必须匹配。在这个例子中,kserve-sklearnserver
将不符合选择条件,因为它只列出了对sklearn
版本1
的支持。优先级
如果多个服务运行时支持相同的
model format
,具有相同的version
并且支持相同的protocolVersion
,那么我们可以选择为服务运行时指定priority
。如果未显式指定运行时,则根据priority
自动选择运行时。请注意,只有当autoSelect
为true
时,priority
才有效。值越高表示优先级越高。例如,让我们考虑服务运行时
mlserver
和kserve-sklearnserver
。两个服务运行时都支持版本为1
的sklearn
模型格式,并且都支持protocolVersion
v2。还要注意,两个服务运行时都启用了autoSelect
。当部署以下未指定运行时的InferenceService时,控制器将寻找支持
sklearn
的运行时:控制器将找到两个运行时
kserve-sklearnserver
和mlserver
,因为它们在其supportedModelFormats
列表中都有带有sklearn
和autoSelect: 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...