kserve predict api v2
简介
KServe 为机器学习模型服务化提供了 kubernetes CRD,我们在 kserve 的仓库下面,可以找到链接 [1],里面介绍了一组推理相关的 HTTP/RSET 和 GRPC API,本文主要分析和介绍这些 API。kserve 仓库里面提供了 GRPC proto 的定义文件,可以直接拿来用。tritonserver [4] 就实现了这些 API,实现这些 API 的好处是可以方便的集成到使用了这个标准化协议的平台上面。本文可以说是 [5] 的一个阅读笔记。
HTTP/REST 接口介绍
HTTP/REST API 使用 JSON 格式的数据,以下协议中,模型版本信息是可选的,实现这些协议的服务器有的可能不支持版本控制,有的可以使用一个默认版本。在 这个 yaml 文件 中定义了需要提供的 HTTP/REST API,这个文件使用了 openapi 3.0 规范。
标准中的 API 有如下六个:
# 获取服务器元数据
GET /v2/
# 检查服务器是否在线
GET /v2/health/live
# 检查服务器是否准备
GET /v2/health/ready
# 获取模型元数据
GET /v2/models/${MODEL_NAME}/versions/${MODEL_VERSION}
# 检查模型是否准备
GET /v2/models/${MODEL_NAME}/versions/${MODEL_VERSION}/ready
# 请求模型推理
POST /v2/models/${MODEL_NAME}/versions/${MODEL_VERSION}/infer
GRPC 接口介绍
在这个文件中给出了 GRPC API 的定义,同样只提供了六个 API。
// Inference Server GRPC endpoints.
service GRPCInferenceService
{
// The ServerLive API indicates if the inference server is able to receive
// and respond to metadata and inference requests.
rpc ServerLive(ServerLiveRequest) returns (ServerLiveResponse) {}
// The ServerReady API indicates if the server is ready for inferencing.
rpc ServerReady(ServerReadyRequest) returns (ServerReadyResponse) {}
// The ModelReady API indicates if a specific model is ready for inferencing.
rpc ModelReady(ModelReadyRequest) returns (ModelReadyResponse) {}
// The ServerMetadata API provides information about the server. Errors are
// indicated by the google.rpc.Status returned for the request. The OK code
// indicates success and other codes indicate failure.
rpc ServerMetadata(ServerMetadataRequest) returns (ServerMetadataResponse) {}
// The per-model metadata API provides information about a model. Errors are
// indicated by the google.rpc.Status returned for the request. The OK code
// indicates success and other codes indicate failure.
rpc ModelMetadata(ModelMetadataRequest) returns (ModelMetadataResponse) {}
// The ModelInfer API performs inference using the specified model. Errors are
// indicated by the google.rpc.Status returned for the request. The OK code
// indicates success and other codes indicate failure.
rpc ModelInfer(ModelInferRequest) returns (ModelInferResponse) {}
}
思考
为什么设计这样六个如此简单的 API 呢?
简单本身,也是一个设计原则。这六个简单的 API 已经足够完成模型推理的任务了。简单翻译一下这六个 API,ServerLive 服务器是否在线,ServerReady 服务器是否准备好接受请求,ModelReady 模型是否准备好接受请求,ServerMetadata 获取服务器的元数据,ModelMetadata 获取一个模型的元数据,ModelInfer 模型进行一次推理。
不过这六个 API 仍然少了点东西:缺少获取模型列表的 API,这个可以通过扩展 ServerMetadata 接口来获取。
参考链接
[1] https://github.com/kserve/kserve/tree/master/docs/predict-api/v2
[2] https://github.com/kserve/kserve
[3] https://github.com/kserve/modelmesh
[4] https://github.com/triton-inference-server/server/tree/master/docs/protocol
[5] https://github.com/kserve/kserve/blob/master/docs/predict-api/v2/required_api.md
[6] https://github.com/kserve/kserve/blob/master/docs/predict-api/v2/rest_predict_v2.yaml

浙公网安备 33010602011771号