TorchServe gRPC API¶
注意:当前的 TorchServe gRPC 不支持工作流。
TorchServe 还支持 gRPC API 用于推理和管理调用。
TorchServe 提供以下 gRPC API
-
Ping:获取正在运行的服务器的健康状态
Predictions:从已加载的模型获取预测结果
StreamPredictions:从已保存的模型获取服务器端流式预测结果
对于所有推理 API 请求,TorchServe 要求包含正确的推理令牌,或必须禁用令牌授权。有关更多详细信息,请参阅 令牌授权文档
-
RegisterModel:在 TorchServe 上加载模型/模型版本
UnregisterModel:通过从 TorchServe 注销特定版本的模型来释放系统资源。
ScaleWorker:动态调整模型任何版本的 worker 数量,以更好地服务不同的推理请求负载。
ListModels:查询当前已加载模型的默认版本。
DescribeModel:获取模型默认版本的详细运行时状态。
SetDefault:将模型任何已加载的版本设置为默认版本。
对于所有管理 API 请求,TorchServe 要求包含正确的管理令牌,或必须禁用令牌授权。有关更多详细信息,请参阅 令牌授权文档
默认情况下,TorchServe 在 localhost 的 7070 端口上侦听 gRPC 推理 API,在 7071 端口上侦听 gRPC 管理 API。要配置不同地址和端口上的 gRPC API,请参阅 配置文档
gRPC API 的 Python 客户端示例¶
运行以下命令以注册、运行推理和注销来自 TorchServe 模型库 的 densenet161 模型,使用 gRPC Python 客户端。
克隆 serve 仓库以运行此示例
git clone --recurse-submodules https://github.com/pytorch/serve
cd serve
安装 gRPC Python 依赖项
pip install -U grpcio protobuf grpcio-tools googleapis-common-protos
启动 TorchServe
mkdir models
torchserve --start --disable-token-auth --enable-model-api --model-store models/
使用 proto 文件生成 Python gRPC 客户端存根
python -m grpc_tools.protoc -I third_party/google/rpc --proto_path=frontend/server/src/main/resources/proto/ --python_out=ts_scripts --grpc_python_out=ts_scripts frontend/server/src/main/resources/proto/inference.proto frontend/server/src/main/resources/proto/management.proto
注册 densenet161 模型
注意:在 TorchServe 启动后使用此 API,必须启用模型 API 控制。在启动 TorchServe 时,将 --enable-model-api
添加到命令行以启用此 API 的使用。有关更多详细信息,请参阅 模型 API 控制
如果禁用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py register densenet161
如果启用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py register densenet161 --auth-token <management-token>
使用以下命令运行推理
如果禁用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py infer densenet161 examples/image_classifier/kitten.jpg
如果启用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py infer densenet161 examples/image_classifier/kitten.jpg --auth-token <inference-token>
注销 densenet161 模型
注意:在 TorchServe 启动后使用此 API,必须启用模型 API 控制。在启动 TorchServe 时,将 --enable-model-api
添加到命令行以启用此 API 的使用。有关更多详细信息,请参阅 模型 API 控制
如果禁用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py unregister densenet161
如果启用令牌授权,请使用
python ts_scripts/torchserve_grpc_client.py unregister densenet161 --auth-token <management-token>
GRPC 服务器端流式传输¶
TorchServe GRPC API 添加了推理 API “StreamPredictions” 的服务器端流式传输,以允许通过同一个 GRPC 流发送一系列推理响应。此新 API 仅推荐用于推理完整响应的延迟较高且推理中间结果发送到客户端的用例。例如,用于生成应用的大型语言模型 (LLM),其中生成“n”个标记可能延迟较高,在这种情况下,用户可以在每个生成的标记准备就绪时接收,直到完整响应完成。此新 API 会自动将 batchSize 强制设置为 1。
service InferenceAPIsService {
// Check health status of the TorchServe server.
rpc Ping(google.protobuf.Empty) returns (TorchServeHealthResponse) {}
// Predictions entry point to get inference using default model version.
rpc Predictions(PredictionsRequest) returns (PredictionResponse) {}
// Streaming response for an inference request.
rpc StreamPredictions(PredictionsRequest) returns (stream PredictionResponse) {}
}
后端处理器调用“send_intermediate_predict_response”将一个中间结果发送到前端,并返回最后一个结果作为现有样式。例如
from ts.handler_utils.utils import send_intermediate_predict_response
''' Note: TorchServe v1.0.0 will deprecate
"from ts.protocol.otf_message_handler import send_intermediate_predict_response".
Please replace it with "from ts.handler_utils.utils import send_intermediate_predict_response".
'''
def handle(data, context):
if type(data) is list:
for i in range (3):
send_intermediate_predict_response(["intermediate_response"], context.request_ids, "Intermediate Prediction success", 200, context)
return ["hello world "]