TorchServe 详解:5 步将模型部署到生产环境

特色图像

  内容导读:

TorchServe 自 2020 年 4 月推出至今,经历了 2 年多的发展,变得愈发成熟和稳定,本文将对 TorchServe 进行全面介绍。

本文首发自微信公众号:PyTorch 开发者社区

更多应用 PyTorch 进行实际模型部署实践,访问 openbayes.com 获取

TorchServe 是 PyTorch 中将模型部署到生产环境的首选解决方案。它是一个性能良好且可扩展的工具,用 HTTP 或 HTTPS API 封装模型。

TorchServe  的前端是用 Java 实现的,可以处理多种任务,包括为部署模型分配 workers 、负责客户端和服务器之间通信等。其 Python 后端主要负责处理 inference service 。

图一:TorchServe performance Tuning 流程总览

此外,它还支持 AB 测试、 dynamic batching 、 logging 和 metrics 的多种 model serving 及 versioning,4 个公开 API 包括:

* Inference API:监听 8080 端口,默认情况下可通过 localhost 访问,可以在 TorchServe configuration 中进行配置,并支持从模型中获取 predictions 。

Explanation API:在 hood 下使用 Captum 提供正在部署的模型的说明,并 监听 8080 端口。

Management API:允许注册或取消注册并描述模型。它还允许用户增加或减少部署模型的 workers 的数量。

* Metrics API:在默认情况下监听 8082 端口,使用户可以监测正在部署的模型。

TorchServe 通过支持 batch inference  及部署模型的多个 workers,使得用户得以扩展模型部署并处理峰值流量。这种扩展可通过 Management API 及 configuration file 中的设置来完成。此外,Metrics API 可以通过默认及自定义 metrics 来监测模型部署。

其他高级设置,如接收请求的队列长度、 a batch of inputs 的最大等待时长以及其他属性,都可以通过 config file(启动时可以传递到 TorchServe)进行配置。

用 TorchServe 部署模型的步骤包括:

1 、安装 TorchServe 、 model archiver 及其它依赖

2 、选择一个合适的默认 handler(如图像分类等)或创建一个自定义 handler

3 、使用 Torcharchive 将 model artifacts 和 handler 打包成一个 .mar  文件,并将其放入 model store

4 、开始部署模型

5 、运行推理

TorchServe 项目地址:

https://github.com/pytorch/serve/blob/master/README.md#install-torchserve-and-torch-model-archiver

TorchServe 重点概念之 Handler

TorchServe 后端使用一个 handler 来加载模型、预处理接收到的数据、运行推理和对 response 进行 post process 。 TorchServe 中的 handler 是一个 Python script,所有模型初始化、预处理、推理和 post process 逻辑都包含在其中。

TorchServe 还提供了一个开箱即用的 handler,可用于图像分类、分割、目标检测和文本分类等应用程序。此外,它还支持自定义 handler,以防默认 handler 不支持当下的 case 。

自定义 handler 提供了很大的灵活性,这可能使 TorchServe 成为一个多框架服务工具。自定义的 handler 允许以自定义逻辑来初始化一个模型,也能让这个模型从其他框架(如 ONNX)加载模型。

TorchServe 处理程序由四个主要函数组成,functionsinitializeinference  和 preprocess,每个函数返回一个列表。

下面的代码片段是自定义 handler 的示例。自定义 handler 继承了 TorchServe 中的 BaseHandler,可以覆盖任何主函数。该示例演示了如何用 handler 加载 Detectron2 模型,解决 figure detection 问题。该模型已经被导出至 Torchscript,并使用  mod.half()  运行 FP16 推理。

编辑

TorchServe 重点概念之 Metrics

将模型部署到生产环境中,需要重点监测其能力表现。 TorchServe 定期收集系统级 metrics,并允许添加自定义 metrics 。

系统级 metrics 包括 CPU 利用率、主机上可用及已用的磁盘空间和内存,以及不同响应代码的请求数量(例如 200-300 、 400-500 和 500 以上)。自定义 metrics 可以添加到 Custom Metrics API 。

Custom Metrics API:

https://github.com/pytorch/serve/blob/master/docs/metrics.md#custom-metrics-api

TorchServe 将这两组 metrics 记录到不同的 log file 中。默认情况下,metrics 收集在:

系统 metrics: log _ directory/ts _ metrics. log

自定义 metrics:log directory/model _ metrics. log

TorchServe 的 Metrics API,默认情况下监听端口 8082,并允许用户查询和监控收集到的 metrics 。默认的 metrics endpoint 返回 Prometheus formatted metrics 。可以用 curl 请求查询 metrics,或者将 Prometheus Server 指向 endpoint,并将 Grafana 用于 Dashboard 。

用 curl 请求查询 metrics:

curl http://127.0.0.1:8082/metrics

用 mtail 将 logged metrics 导出到 Prometheus 的示例:https://github.com/google/mtail

通过在 Bashboard 中跟踪这些 metrics,可以监视在离线 Benchmark 运行期间,偶尔出现或难以发现的 performance regressions 。

What’s Next

以上就是关于 TorchServe 的全部介绍。在下一节中,我们将借助一个具体案例,讲解影响部署模型到生产环境中的具体因素,以及如何用 TorchServe 对 Animated Drawings APP 进行调优。

获取更多学习资料和实践教程,欢迎关注公众号:PyTorch 开发者社区。观看教程实践,可访问 openbayes.com  实际操作。 ​