内容导读

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

TorchServe 是 PyTorch 中将模型布置到出产环境的首选解决方案。 它是一个性能良好且可扩展的东西,用 HTTP 或 HTTPS API 封装模型。

TorchServe 的前端是用 Java 实现的,能够处理多种任务,包含为布置模型分配 workers、负责客户端和服务器之间通信等。其 Python 后端首要负责处理 inference service。

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

图一: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 项目地址:

github.com/pytorch/ser…

TorchServe 要点概念之 Handler

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

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

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

TorchServe 处理程序由四个首要函数组成,functionsinitializeinferencepreprocess, 每个函数回来一个列表。

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

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

TorchServe 要点概念之 Metrics

将模型布置到出产环境中,需求要点监测其才能体现。TorchServe 定时搜集体系级 metrics,并答应增加自定义 metrics。

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

Custom Metrics API:

github.com/pytorch/ser…

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 的示例: github.com/google/mtai…

经过在 Bashboard 中跟踪这些 metrics,能够监视在离线 Benchmark 运转期间,偶然出现或难以发现的 performance regressions。

What’s Next

以上便是关于 TorchServe 的悉数介绍。在下一节中,我们将借助一个详细案例,讲解影响布置模型到出产环境中的详细因素,以及如何用 TorchServe 对 Animated Drawings APP 进行调优。

欢迎继续关注 PyTorch 开发者社区, 了解 PyTorch 最新功能及实践教程!