Facebook联合AWS推出PyTorch模型服务框架:可让模型快速投入生产
作者 | Julien Simon
译者 | 李冬梅 近日,Facebook 和 AWS 合作推出了 PyTorch 模型服务库 TorchServe,强强联手剑指 Google TensorFlow。
本文最初发布于AWS官方博客,经原作者授权由 InfoQ 中文站翻译并分享。
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 才能运行它。
sudo apt install openjdk-11-jdk
接下来,我为 TorchServe 创建并激活一个新的 Conda 环境。这将使我的 Python 软件包保持整洁(当然 virtualenv 也可以)。
conda create -n torchserve
source activate torchserve
接下来,我为 TorchServe 安装依赖项。
pip install sentencepiece # not available as a Conda package
conda install psutil pytorch torchvision torchtext -c pytorch
如果开发者使用的是 GPU instance,则需要一个额外的程序包。
conda install cudatoolkit=10.1
现在已经安装了依赖项,我可以克隆 TorchServe 存储库,然后安装 TorchServe。
git clone https://github.com/pytorch/serve.git
cd serve
pip install .
cd model-archiver
pip install .
设置已经完成,就可以部署模型了。
部署模型
为了进行此演示,我将简单地从 PyTorch 模型 Zoo 中下载预训练好的模型。在现实生活中,你可以使用自己的模型。
wget https://download.pytorch.org/models/densenet161-8d451a50.pth
接下来,我需要将模型打包到模型文件夹中。模型文件夹是一个 ZIP 文件,其中存储了所有模型构件,即模型本身(densitynet161-8d451a50.pth)、用于加载状态机库(张量与层匹配)的 Python 脚本以及你可能需要的任何其他文件。在这里,我介绍一个名为 index_to_name.json 的文件,该文件能将类标识符映射到类名上。该文件将应用于负责预测逻辑的内置的 image_classifier 处理程序上。其他内置处理程序也可用其他文件实现(object_detector、text_classifier、image_segmenter),你也可以使用自己的文件来实现。
torch-model-archiver --model-name densenet161 --version 1.0 \
--model-file examples/image_classifier/densenet_161/model.py \
--serialized-file densenet161-8d451a50.pth \
--extra-files examples/image_classifier/index_to_name.json \
--handler image_classifier
接下来,我创建一个目录来存储模型文件夹,然后将刚才创建的目录移到那里。
mkdir model_store
mv densenet161.mar model_store/
现在,我可以启动 TorchServe,将其指向模型存储和要加载的模型。当然,如果需要,我可以加载多个模型。
torchserve --start --model-store model_store --models densenet161=densenet161.mar
还是在同一台计算机上,我抓取一张图像并将其轻松发送到 TorchServe 上,以使用 HTTP POST 请求进行本地服务。请要特别注意 URL 的格式,包括要使用的模型的名称。
curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg
curl -X POSThttp://127.0.0.1:8080/predictions/densenet161 -T kitten.jpg
结果立即就出来了。这里要强调下,由于借助了内置处理程序,因此类名是可见的。
[
{"tiger_cat": 0.4693356156349182},
{"tabby": 0.46338796615600586},
{"Egyptian_cat": 0.06456131488084793},
{"lynx": 0.0012828155886381865},
{"plastic_bag": 0.00023323005007114261}
]
然后,使用“ stop ”命令停止 TorchServe。
torchserve --stop
如上所见,使用默认配置可以轻松开始使用 TorchServe。接下来,我就来介绍下如何设置它来进行远程服务。
配置 TorchServe 来进行远程服务
先来为 TorchServe 创建一个名为 config.properties(默认名称)的配置文件。该文件定义了要加载的模型,并设置了远程服务。在这里,我将服务器绑定到所有公共 IP 地址,你也可以根据需要将其限制为特定的地址。由于这是在 EC2 instance 上运行的,因此我需要确保在安全组中打开了 8080 和 8081 端口。
model_store=model_store
load_models=densenet161.mar
inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
现在,我可以在同一目录中启动 TorchServe,而不必传递任何命令行参数。
torchserve --start
现在回到我的本地计算机上,我可以远程调用 TorchServe,并获得相同的结果。
curl -X POST http://ec2-54-85-61-250.compute-1.amazonaws.com:8080/predictions/densenet161 -T kitten.jpg
你或许也注意到我使用了 HTTP。我猜很多人在生产中都需要 HTTPS,所以我将来展示下如何进行设置。
为 HTTPS 配置 TorchServe
TorchServe 可以使用 Java 密钥库或证书。后面内容将逐一介绍。
首先,我使用 openssl 创建证书和私钥。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
然后,更新配置文件以定义证书和密钥的位置,并将 TorchServe 绑定到其默认安全端口(别忘记更新安全组)。
model_store=model_store
load_models=densenet161.mar
inference_address=https://0.0.0.0:8443
management_address=https://0.0.0.0:8444
private_key_file=mykey.key
certificate_file=mycert.pem
我重新启动 TorchServe,现在可以使用 HTTPS 调用它。由于我使用了自签名证书时,所以需要将“——insecure”标志传到 curl。
curl --insecure -X POST https://ec2-54-85-61-250.compute-1.amazonaws.com:8443/predictions/densenet161 -T kitten.jpg
本文由 InfoQ 中文站翻译,未经许可不得转载。
原文链接:
https://aws.amazon.com/cn/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/
你也「在看」吗???
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线