九、推理服务
版本 / 域名 / pod 的关系
服务名规则:$服务名 = $模型名-$模型版本(不含服务类型前缀)。其中模型名做字符替换(/、:、. → -,并去掉首尾的 -),模型版本做归一化(去掉 v、.、:),最终拼接后截断到 60 字符。见 myapp/views/view_inferenceserving.py:608(版本归一化)、:764(拼接服务名)、:1954(灰度新建服务时的命名)。

$k8s-deployment-name = $服务名

$k8s-hpa-name = $服务名
在最大最小副本数不一致时创建 hpa。
补充(与代码核对):仅在未配置 cronhpa 时才定制 hpa(见
myapp/views/view_inferenceserving.py:1861-1862)。

$k8s-service-name = $服务名 用于域名的代理
$k8s-service-name = $服务名-external 用于 ip/L5 的代理(见 myapp/views/view_inferenceserving.py:857、:1671)

系统自带域名
自动配置域名需要泛域名支持。例如泛域名为 domain = *.kfserving.woa.com。
生产域名:
http://$服务名.service.$domain
测试环境域名:
http://test.$服务名.service.$domain
http://debug.$服务名.service.$domain
自定义域名
用户可通过 host 字段配置服务的访问域名,但是必须与泛域名结尾。
多个服务可以配置相同的域名。
流量复制和分流
多个服务(可以是相同模型或者不同模型间)配置相同的域名:
- 分流属性字段控制分配多少流量到其他服务上,剩余流量归属于当前服务
- 流量镜像字段控制复制多少流量到其他服务上。但只会将当前服务的响应返回给客户端

灰度升级
- 同一个服务灰度升级,只需要修改服务的配置,重新部署,服务会自动滚动升级 pod
- 不同服务进行灰度升级。比如同一个模型的不同版本之间,那么多个服务使用相同的域名,新部署的服务上线正常后,会自动下线同域名的旧服务
弹性伸缩容
弹性伸缩容的触发条件:可以使用自定义指标,可以使用其中一个指标或者多个指标,示例:cpu:50%,mem:50%,gpu:50%。
环境变量
平台会自动为推理服务容器注入以下环境变量(与代码核对,见 myapp/views/view_inferenceserving.py:1122-1136):
KUBEFLOW_ENV=test # 环境标识(test/prod 等)
KUBEFLOW_MODEL_PATH= # 模型路径
KUBEFLOW_MODEL_VERSION= # 模型版本
KUBEFLOW_MODEL_IMAGES= # 服务镜像
KUBEFLOW_MODEL_NAME= # 模型名
KUBEFLOW_INFERENCE_ID= # 推理服务 id
KUBEFLOW_RUN_ID= # 本次运行的随机 id
RESOURCE_CPU= # 申请的 CPU
RESOURCE_MEMORY= # 申请的内存
RESOURCE_MIN_REPLICAS= # 最小副本数
RESOURCE_MAX_REPLICAS= # 最大副本数
RESOURCE_GPU= # 申请的 GPU 卡数
MODEL_PATH= # 模型路径(去尾部 /)
MODEL_NAME= # 模型名
INFERENCE_NAME= # 推理服务名
此外,平台为所有 pod 统一注入以下 K8s 下行字段环境变量(见 myapp/utils/py/py_k8s.py:1122-1126):
K8S_NODE_NAME= # spec.nodeName
K8S_POD_NAMESPACE= # metadata.namespace
K8S_POD_IP= # status.podIP
K8S_HOST_IP= # status.hostIP
K8S_POD_NAME= # metadata.name
注意:较早的文档里曾列出
KUBEFLOW_AREA=shanghai/guangzhou,但当前推理服务注入逻辑(myapp/views/view_inferenceserving.py:1121-1136)并不注入该变量,已从上面的列表中移除。
服务暴露
- 域名暴露:依赖
SERVICE_DOMAIN(默认service.svc.cluster.local,见myapp/config.py:1378)与网关层泛域名解析 / 转发。 - ip 暴露:依赖
SERVICE_EXTERNAL_IP(支持内网|外网写法,默认[],见myapp/config.py:837;可在项目组expand覆盖,见myapp/views/view_serving.py:382)。
相关专题文档
本节为快速上手版,模型管理与推理服务发布、端口规则、各推理框架的完整说明见本段专题文档 模型服务、推理服务-ml、推理服务-tfserving、推理服务-torchserve、推理服务-triton。
返回 指南目录。