首页
/ KServe V2预测协议详解:标准化模型推理API规范

KServe V2预测协议详解:标准化模型推理API规范

2025-07-08 08:05:30作者:何将鹤

概述

KServe项目提出的V2预测协议是一套独立于任何特定机器学习/深度学习框架和模型服务器的标准化推理API规范。该协议旨在为各种推理场景提供统一接口,同时支持易用性和高性能需求。通过实现这一协议,推理客户端和服务器可以无缝对接任何采用该标准的平台,显著提升实用性和可移植性。

协议特点

  1. 框架无关性:不依赖特定ML/DL框架
  2. 双协议支持:同时支持HTTP/REST和gRPC接口
  3. 扩展机制:内置可扩展的API设计
  4. 生产就绪:提供健康检查、元数据查询等运维接口

HTTP/REST API详解

基础URL结构

所有API端点遵循统一的结构模式:

/v2/[功能路径][/versions/${MODEL_VERSION}]

其中版本部分为可选,允许服务器根据自身策略选择默认版本。

健康检查API

1. 服务器存活检查

GET /v2/health/live
  • 作用:检测推理服务是否存活
  • 响应:200状态码表示存活,4xx表示不存活
  • K8s集成:可直接用于livenessProbe配置

2. 服务器就绪检查

GET /v2/health/ready
  • 作用:检测所有模型是否就绪
  • 响应:200状态码表示就绪
  • K8s集成:可直接用于readinessProbe配置

3. 模型就绪检查

GET /v2/models/${MODEL_NAME}/ready
  • 作用:检测特定模型是否就绪
  • 版本支持:可通过可选版本参数指定具体版本

元数据查询API

1. 服务器元数据

GET /v2

响应示例

{
  "name": "inference-server",
  "version": "1.12.0",
  "extensions": ["extension1", "extension2"]
}

2. 模型元数据

GET /v2/models/${MODEL_NAME}

响应示例

{
  "name": "resnet50",
  "versions": ["1", "2"],
  "platform": "tensorflow",
  "inputs": [
    {
      "name": "input_tensor",
      "datatype": "FP32",
      "shape": [-1, 224, 224, 3]
    }
  ],
  "outputs": [
    {
      "name": "output_tensor",
      "datatype": "FP32",
      "shape": [-1, 1000]
    }
  ]
}

推理API

请求结构

POST /v2/models/${MODEL_NAME}/infer

请求体结构

{
  "id": "request-123",
  "parameters": {
    "priority": 1
  },
  "inputs": [
    {
      "name": "input0",
      "shape": [2, 2],
      "datatype": "UINT32",
      "data": [1, 2, 3, 4]
    }
  ],
  "outputs": [
    {
      "name": "output0"
    }
  ]
}

响应结构

成功响应

{
  "model_name": "mymodel",
  "model_version": "1",
  "id": "request-123",
  "outputs": [
    {
      "name": "output0",
      "shape": [3, 2],
      "datatype": "FP32",
      "data": [1.0, 1.1, 2.0, 2.1, 3.0, 3.1]
    }
  ]
}

错误响应

{
  "error": "invalid input shape"
}

gRPC API详解

gRPC接口与HTTP/REST保持概念一致,提供更高性能的二进制通信方式。

服务定义

service GRPCInferenceService {
  rpc ServerLive(ServerLiveRequest) returns (ServerLiveResponse);
  rpc ServerReady(ServerReadyRequest) returns (ServerReadyResponse);
  rpc ModelReady(ModelReadyRequest) returns (ModelReadyResponse);
  rpc ServerMetadata(ServerMetadataRequest) returns (ServerMetadataResponse);
  rpc ModelMetadata(ModelMetadataRequest) returns (ModelMetadataResponse);
  rpc ModelInfer(ModelInferRequest) returns (ModelInferResponse);
}

核心消息类型

模型推理请求

message ModelInferRequest {
  string model_name = 1;
  string model_version = 2;
  string id = 3;
  map<string, InferParameter> parameters = 4;
  repeated InferInputTensor inputs = 5;
  repeated InferRequestedOutputTensor outputs = 6;
}

模型推理响应

message ModelInferResponse {
  string model_name = 1;
  string model_version = 2;
  string id = 3;
  map<string, InferParameter> parameters = 4;
  repeated InferOutputTensor outputs = 5;
}

关键技术细节

张量数据类型支持

协议定义了标准化的数据类型表示,包括:

  • 布尔型:BOOL
  • 整型:INT8, INT16, INT32, INT64
  • 无符号整型:UINT8, UINT16, UINT32, UINT64
  • 浮点型:FP16, FP32, FP64
  • 字节型:BYTES

张量数据布局

数据必须按行优先顺序(ROW-MAJOR)排列:

  • 支持多维自然表示和扁平化一维表示
  • 示例:2x2矩阵可表示为[[1,2],[3,4]][1,2,3,4]

参数扩展机制

协议设计了灵活的扩展点:

{
  "parameters": {
    "custom_param1": "value1",
    "custom_param2": 123,
    "custom_param3": true
  }
}

最佳实践建议

  1. 版本控制:生产环境建议显式指定模型版本
  2. 批量处理:充分利用shape参数中的批量维度(-1表示可变)
  3. 性能优化
    • 大张量数据考虑使用二进制传输扩展
    • 高频调用场景优先使用gRPC接口
  4. 错误处理
    • 检查HTTP状态码和错误消息体
    • 实现重试机制处理暂时性错误

总结

KServe V2预测协议为模型推理服务提供了标准化、可扩展的接口规范。通过实现这一协议,开发者可以构建与底层框架无关的推理应用,确保在不同平台间的可移植性。该协议已被多个主流推理服务器实现,成为云原生ML推理领域的事实标准。