推理 API¶
推理 API 默认侦听端口 8080,并且只能从 localhost 访问。要更改默认设置,请参阅 TorchServe 配置.
对于所有推理 API 请求,TorchServe 要求包含正确的推理令牌,或者必须禁用令牌授权。有关详细信息,请参阅 令牌授权文档
TorchServe 服务器支持以下 API
API 说明 - 获取可用 API 和选项的列表
运行状况检查 API - 获取正在运行的服务器的运行状况状态
预测 API - 从已服务的模型中获取预测
解释 API - 从已服务的模型中获取解释
KServe 推理 API - 从 KServe 获取已服务的模型的预测
KServe 解释 API - 从 KServe 获取已服务的模型的解释
API 说明¶
要查看推理 API 的完整列表,您可以使用以下命令
curl -X OPTIONS http://localhost:8080
输出采用 OpenAPI 3.0.1 json 格式。您可以使用它来生成客户端代码,有关详细信息,请参阅 swagger codegen.
运行状况检查 API¶
此 API 遵循 InferenceAPIsService.Ping gRPC API。它返回 ModelServer 中模型的状态。
TorchServe 支持一个 ping
API,您可以调用它来检查正在运行的 TorchServe 服务器的运行状况状态
curl http://localhost:8080/ping
如果服务器正在运行,则响应为
{
"status": "Healthy"
}
“maxRetryTimeoutInSec”(默认值:5MIN)可以在模型的 config yaml 文件(例如 model-config.yaml)中定义。这是恢复已死后端工作程序的最大时间窗口。健康工作程序可以在 maxRetryTimeoutInSec 窗口内处于以下状态:WORKER_STARTED、WORKER_MODEL_LOADED 或 WORKER_STOPPED。“Ping”端点”
返回 200 + json 消息“healthy”:对于任何模型,活动工作程序的数量等于或大于配置的 minWorkers。
返回 500 + json 消息“unhealthy”:对于任何模型,活动工作程序的数量小于配置的 minWorkers。
预测 API¶
此 API 遵循 InferenceAPIsService.Predictions gRPC API。它返回 ModelServer 中模型的状态。
要从每个已加载模型的默认版本获取预测,请对 /predictions/{model_name}
进行 REST 调用
POST /predictions/{model_name}
curl 示例¶
curl -O https://raw.githubusercontent.com/pytorch/serve/master/docs/images/kitten_small.jpg
curl http://localhost:8080/predictions/resnet-18 -T kitten_small.jpg
or:
curl http://localhost:8080/predictions/resnet-18 -F "data=@kitten_small.jpg"
要从期望多个输入的已加载模型中获取预测
curl http://localhost:8080/predictions/squeezenet1_1 -F 'data=@docs/images/dogs-before.jpg' -F 'data=@docs/images/kitten_small.jpg'
or:
import requests
res = requests.post("http://localhost:8080/predictions/squeezenet1_1", files={'data': open('docs/images/dogs-before.jpg', 'rb'), 'data': open('docs/images/kitten_small.jpg', 'rb')})
要从每个已加载模型的特定版本获取预测,请对 /predictions/{model_name}/{version}
进行 REST 调用
POST /predictions/{model_name}/{version}
curl 示例¶
curl -O https://raw.githubusercontent.com/pytorch/serve/master/docs/images/kitten_small.jpg
curl http://localhost:8080/predictions/resnet-18/2.0 -T kitten_small.jpg
or:
curl http://localhost:8080/predictions/resnet-18/2.0 -F "data=@kitten_small.jpg"
结果是 JSON,它告诉您图像最可能是虎斑猫。最高预测为
{
"class": "n02123045 tabby, tabby cat",
"probability": 0.42514491081237793
}
通过 HTTP 1.1 分块编码进行流式响应 TorchServe 推理 API 支持流式响应,以允许通过 HTTP 1.1 分块编码发送一系列推理响应。此新功能仅推荐用于推理延迟较高的用例,并且推理中间结果会发送到客户端。例如,LLM 用于生成性应用程序,其中生成“n”个标记可能会有很高的延迟,在这种情况下,用户可以收到每个生成的标记(一旦准备好),直到完整响应完成。要实现流式响应,后端处理程序调用“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 "]
客户端接收分块数据。
def test_echo_stream_inference():
test_utils.start_torchserve(no_config_snapshots=True, gen_mar=False)
test_utils.register_model('echo_stream',
'https://torchserve.pytorch.org/mar_files/echo_stream.mar')
response = requests.post(TF_INFERENCE_API + '/predictions/echo_stream', data="foo", stream=True)
assert response.headers['Transfer-Encoding'] == 'chunked'
prediction = []
for chunk in (response.iter_content(chunk_size=None)):
if chunk:
prediction.append(chunk.decode("utf-8"))
assert str(" ".join(prediction)) == "hello hello hello hello world "
test_utils.unregister_model('echo_stream')
解释 API¶
Torchserve 利用 Captum 的功能来返回已服务的模型的解释。
要从每个已加载模型的默认版本获取解释,请对 /explanations/{model_name}
进行 REST 调用
POST /explanations/{model_name}
curl 示例¶
curl http://127.0.0.1:8080/explanations/mnist -T examples/image_classifier/mnist/test_data/0.png
结果是一个 json,它为您提供输入图像的解释
[
[
[
[
0.004570948731989492,
0.006216969640322402,
0.008197565423679522,
0.009563574612830427,
0.008999274832810742,
0.009673474804303854,
0.007599905146155397,
,
,
]
]
]
]
KServe 推理 API¶
Torchserve 利用 KServe 推理 API 来返回已服务的模型的预测。
要从已加载模型中获取预测,请对 /v1/models/{model_name}:predict
进行 REST 调用
POST /v1/models/{model_name}:predict
curl 示例¶
curl -H "Content-Type: application/json" --data @kubernetes/kserve/kf_request_json/v1/mnist.json http://127.0.0.1:8080/v1/models/mnist:predict
结果是一个 json,它为您提供输入 json 的预测
{
"predictions": [
2
]
}
KServe 解释 API¶
Torchserve 利用 KServe API 规范来返回它所服务的模型的解释。
要从已加载模型中获取解释,请对 /v1/models/{model_name}:explain
进行 REST 调用
/v1/models/{model_name}:explain
curl 示例¶
curl -H "Content-Type: application/json" --data @kubernetes/kserve/kf_request_json/v1/mnist.json http://127.0.0.1:8080/v1/models/mnist:explain
结果是一个 json,它为您提供输入 json 的解释
{
"explanations": [
[
[
[
0.004570948731989492,
0.006216969640322402,
0.008197565423679522,
0.009563574612830427,
0.008999274832810742,
0.009673474804303854,
0.007599905146155397,
,
,
,
]
]
]
]
}