内容导读
TorchServe 自 2020 年 4 月推出至今,经历了 2 年多的发展,变得益发老练和安稳,本文将对 TorchServe 进行全面介绍。
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 项目地址:
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 处理程序由四个首要函数组成,functions、initialize、inference 和 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:
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 最新功能及实践教程!