Configure Scaling for Inference Services
介绍
本文档提供了配置推理服务自动扩缩容的分步指南。通过这些设置,您可以优化资源使用,确保高负载时服务可用,并在低负载时释放资源。
关于自动扩缩容器
Knative Serving 支持两种自动扩缩容器:Knative Pod Autoscaler (KPA) 和 Kubernetes 的 Horizontal Pod Autoscaler (HPA)。默认情况下,我们的服务使用 Knative Pod Autoscaler (KPA)。
KPA 设计用于无服务器工作负载,能够基于并发请求数或 RPS(每秒请求数)快速扩容,并能将服务缩容到零副本以节省成本。HPA 更通用,通常基于 CPU 或内存使用等指标进行扩缩容。本指南主要聚焦于通过 Knative Pod Autoscaler (KPA) 配置服务。
步骤
缩容配置
本节介绍如何配置推理服务在无流量时自动缩容到零副本,或保持最小副本数。
启用/禁用缩容到零
您可以配置是否允许推理服务在无流量时缩容到零副本。默认值为 true,允许缩容到零。
使用 InferenceService 资源参数
在 InferenceService 的 spec.predictor 字段中设置 minReplicas 参数。
-
minReplicas: 0:允许缩容到零副本。 -
minReplicas: 1:禁用缩容到零副本,至少保持一个副本。
平台范围内禁用缩容到零
一旦平台范围内禁用该功能,所有服务的 minReplicas: 0 配置将被忽略。
您可以修改 全局 ConfigMap 来禁用平台的缩容到零功能。此配置优先级最高,会覆盖所有单个 InferenceService 资源中的设置。
在 knative-serving 命名空间下的 config-autoscaler ConfigMap 中,将 enable-scale-to-zero 的值修改为 "false"
- 请确保该注解存在,否则您的配置将被恢复为默认值。
配置缩容到零后 Pod 的保留时间
此设置决定自动扩缩容器决定缩容到零后,最后一个 Pod 保持活跃的最短时间,有助于服务在再次接收流量时快速响应。默认值为 0s
您可以选择为单个服务配置,或修改全局 ConfigMap 使该设置对所有服务生效。
方法一:使用 InferenceService 注解
在 InferenceService 的 spec.predictor.annotations 中添加 autoscaling.knative.dev/scale-to-zero-pod-retention-period 注解。
方法二:使用全局 ConfigMap
在 knative-serving 命名空间下的 config-autoscaler ConfigMap 中,将 scale-to-zero-pod-retention-period 的值修改为非负时长字符串,如 "1m5s"。
- 请确保该注解存在,否则您的配置将被恢复为默认值。
配置缩容到零的宽限期
此设置在流量停止后,移除最后一个副本前增加延迟,确保 activator/路由路径准备就绪,避免在缩容到零的过渡期间请求丢失。
仅当您遇到因服务缩容到零导致请求丢失时,才建议调整此值。它不影响无流量时最后一个副本的保留时间,也不保证副本在此期间一定被保留。
方法:使用全局 ConfigMap
在 knative-serving 命名空间下的 config-autoscaler ConfigMap 中,将 scale-to-zero-grace-period 的值修改为时长字符串,如 "40s"。
- 请确保该注解存在,否则您的配置将被恢复为默认值。
扩容配置
本节介绍如何配置推理服务根据流量增加自动扩容。
配置并发阈值
并发数决定每个应用副本能同时处理的请求数。您可以设置软限制或硬限制。
- 软限制:目标限制,流量激增时可暂时超出,但会触发自动扩缩容以维持目标值。默认值为
100。 - 硬限制:严格上限,当并发达到该值时,超出请求将被缓冲排队。默认值为
0,表示无限制。
如果同时指定软限制和硬限制,将使用两者中较小的值,防止自动扩缩容器的目标值超过硬限制。
您可以选择为单个服务配置,或修改全局 ConfigMap 使该设置对所有服务生效。
方法一:使用 InferenceService 资源参数
-
软限制:在
spec.predictor中设置scaleTarget,并将scaleMetric设置为concurrency。 -
硬限制:在
spec.predictor中设置containerConcurrency
方法二:使用全局 ConfigMap
- 软限制:在
config-autoscalerConfigMap 中设置container-concurrency-target-default。 - 硬限制:无全局设置,因为它影响请求缓冲和排队。
目标利用率百分比
该值指定自动扩缩容器在 metric=concurrency 时的目标百分比,允许在达到硬限制前主动扩容。默认值:70。 使用 RPS 时不适用。
方法一:使用 InferenceService 注解
在 InferenceService 的 spec.predictor.annotations 中添加 autoscaling.knative.dev/target-utilization-percentage 注解。
方法二:使用全局 ConfigMap
在 config-autoscaler ConfigMap 中设置 container-concurrency-target-percentage。
- 请确保该注解存在,否则您的配置将被恢复为默认值。
配置每秒请求数(RPS)目标
您可以将扩缩容指标从并发数切换为每秒请求数(RPS)。默认值为 200。
注意:RPS 模式下不使用并发目标百分比设置。
方法一:使用 InferenceService 资源参数
在 spec.predictor 中设置 scaleTarget,并将 scaleMetric 设置为 rps。
方法二:使用全局 ConfigMap
在 config-autoscaler ConfigMap 中设置 requests-per-second-target-default。
- 请确保该注解存在,否则您的配置将被恢复为默认值。