近日,Facebook 和 AWS 合作推出了 PyTorch 模型服务库 TorchServe,强强联手剑指 Google TensorFlow。
PyTorch 是当下最火的深度学习开源库之一,可以帮助开发者和研究人员更轻松地构建和训练模型。即便有了 PyTorch,在生产中部署和管理模型仍然是机器学习的一大难题,包括构建定制的预测 API,对其进行缩放以及保证其安全等问题。
简化模型部署过程的一种方法是使用模型服务器,即专门设计用于在生产中提供机器学习预测的现成的 Web 应用程序。模型服务器可轻松加载一个或多个模型,并自动创建由可伸缩 Web 服务器支持的预测 API。它们还能够根据预测请求运行预处理和后处理代码。最后一个要点是,模型服务器还提供了一些在生产中至关重要的功能,例如日志记录、监视和安全。目前比较受欢迎的模型服务器包括 TensorFlow Serving 和 Multi Model Server。
今天,我非常高兴地宣布 TorchServe——PyTorch 模型服务库,能在不编写自定义代码的情况下轻松地大规模部署训练好的 PyTorch 模型。
TorchServe 概述
TorchServe 是由 AWS 和 Facebook 合作开发的 PyTorch 模型服务库,是 PyTorch 开源项目的一部分。
项目地址:https://github.com/pytorch/serve
借助 TorchServe,PyTorch 用户可以更快地将其模型应用于生产,而无需编写自定义代码:除了提供低延迟预测 API 之外,TorchServe 还为一些最常见的应用程序嵌入了默认处理程序,例如目标检测和文本分类。此外,TorchServe 包括多模型服务、用于 A / B 测试的模型版本控制、监视指标以及用于应用程序集成的 RESTful 端点。如你所料,TorchServe 支持任何机器学习环境,包括 Amazon SageMaker、容器服务和 Amazon Elastic Compute Cloud(EC2)。一些客户已经在体验 TorchServe 的优越性了。
丰田研究院高级开发有限公司(TRI-AD)正在为丰田汽车公司开发自动驾驶软件。TRI-AD 机器学习工具负责人 Yusuke Yachide 称:
我们在不断优化和改进计算机视觉模型,这对于践行 TRI-AD 以人为本,安全出行的自动驾驶使命至关重要。我们的模型是通过 AWS 上的 PyTorch 进行训练的,但是直到现在,PyTorch 仍缺乏模型服务框架。因此,我们花费了大量的技术成本来创建和维护用于将 PyTorch 模型部署到丰田车辆和云服务器车队的软件。有了 TorchServe,我们现在拥有了高性能、轻量级的模型服务器,该服务器由 AWS 和 PyTorch 社区支持和维护。
Matroid 是计算机视觉软件的制造商,该软件可检测视频镜头中的目标和事件。Matroid 公司创始人兼首席执行官 Reza Zadeh 表示:
我们在 AWS 和本地环境上使用 PyTorch 在短时间内很快开发出了大量的机器学习模型。使用自定义模型服务器部署模型,需要将模型转换为其他格式,既费时又麻烦。TorchServe 允许我们使用单个可服务文件简化模型部署,该文件也可作为真实情况的唯一来源,并且易于共享和管理。
下面,我就来展示下如何安装 TorchServe 以及如何加载一个在 Amazon Elastic Compute Cloud (EC2)上预先训练好的模型。
TorchServe 的安装
首先,我启动了一个基于 CPU 的 Amazon Elastic Compute Cloud(EC2)instance 运行深度学习 AMI(Ubuntu 版)。该 AMI 预先安装了一些我需要的依赖项,这将加快设置速度。当然,你可以改用任何 AMI。
TorchServe 用 Java 实现,我需要最新的 OpenJDK 才能运行它。
接下来,我为 TorchServe 创建并激活一个新的 Conda 环境。这将使我的 Python 软件包保持整洁(当然 virtualenv 也可以)。
接下来,我为 TorchServe 安装依赖项。
如果开发者使用的是 GPU instance,则需要一个额外的程序包。
现在已经安装了依赖项,我可以克隆 TorchServe 存储库,然后安装 TorchServe。
设置已经完成,就可以部署模型了。
部署模型
为了进行此演示,我将简单地从 PyTorch 模型 Zoo 中下载预训练好的模型。在现实生活中,你可以使用自己的模型。
接下来,我需要将模型打包到模型文件夹中。模型文件夹是一个 ZIP 文件,其中存储了所有模型构件,即模型本身(densitynet161-8d451a50.pth)、用于加载状态机库(张量与层匹配)的 Python 脚本以及你可能需要的任何其他文件。在这里,我介绍一个名为 index_to_name.json 的文件,该文件能将类标识符映射到类名上。该文件将应用于负责预测逻辑的内置的 image_classifier 处理程序上。其他内置处理程序也可用其他文件实现(object_detector、text_classifier、image_segmenter),你也可以使用自己的文件来实现。
接下来,我创建一个目录来存储模型文件夹,然后将刚才创建的目录移到那里。
现在,我可以启动 TorchServe,将其指向模型存储和要加载的模型。当然,如果需要,我可以加载多个模型。
还是在同一台计算机上,我抓取一张图像并将其轻松发送到 TorchServe 上,以使用 HTTP POST 请求进行本地服务。请要特别注意 URL 的格式,包括要使用的模型的名称。
结果立即就出来了。这里要强调下,由于借助了内置处理程序,因此类名是可见的。
然后,使用“ stop ”命令停止 TorchServe。
如上所见,使用默认配置可以轻松开始使用 TorchServe。接下来,我就来介绍下如何设置它来进行远程服务。
配置 TorchServe 来进行远程服务
先来为 TorchServe 创建一个名为 config.properties(默认名称)的配置文件。该文件定义了要加载的模型,并设置了远程服务。在这里,我将服务器绑定到所有公共 IP 地址,你也可以根据需要将其限制为特定的地址。由于这是在 EC2 instance 上运行的,因此我需要确保在安全组中打开了 8080 和 8081 端口。
现在,我可以在同一目录中启动 TorchServe,而不必传递任何命令行参数。
现在回到我的本地计算机上,我可以远程调用 TorchServe,并获得相同的结果。
你或许也注意到我使用了 HTTP。我猜很多人在生产中都需要 HTTPS,所以我将来展示下如何进行设置。
为 HTTPS 配置 TorchServe
TorchServe 可以使用 Java 密钥库或证书。后面内容将逐一介绍。
首先,我使用 openssl 创建证书和私钥。
然后,更新配置文件以定义证书和密钥的位置,并将 TorchServe 绑定到其默认安全端口(别忘记更新安全组)。
我重新启动 TorchServe,现在可以使用 HTTPS 调用它。由于我使用了自签名证书时,所以需要将“——insecure”标志传到 curl。
原文链接:
https://aws.amazon.com/cn/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/
评论