【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

AWS 和 Facebook 合作推出 PyTorch 模型服务框架 TorchServe:无需编写自定义代码,可让模型快速投入生产

  • 2020-04-22
  • 本文字数:3411 字

    阅读完需:约 11 分钟

AWS和Facebook合作推出PyTorch模型服务框架TorchServe:无需编写自定义代码,可让模型快速投入生产

近日,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 才能运行它。


sudo apt install openjdk-11-jdk
复制代码


接下来,我为 TorchServe 创建并激活一个新的 Conda 环境。这将使我的 Python 软件包保持整洁(当然 virtualenv 也可以)。


conda create -n torchservesource activate torchserve
复制代码


接下来,我为 TorchServe 安装依赖项。


pip install sentencepiece       # not available as a Conda packageconda install psutil pytorch torchvision torchtext -c pytorch
复制代码


如果开发者使用的是 GPU instance,则需要一个额外的程序包。


conda install cudatoolkit=10.1
复制代码


现在已经安装了依赖项,我可以克隆 TorchServe 存储库,然后安装 TorchServe。


git clone https://github.com/pytorch/serve.gitcd servepip install .cd model-archiverpip 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_storemv 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.jpgcurl -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_storeload_models=densenet161.marinference_address=http://0.0.0.0:8080management_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_storeload_models=densenet161.marinference_address=https://0.0.0.0:8443management_address=https://0.0.0.0:8444private_key_file=mykey.keycertificate_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
复制代码


原文链接:


https://aws.amazon.com/cn/blogs/aws/announcing-torchserve-an-open-source-model-server-for-pytorch/


2020-04-22 16:003538

评论

发布
暂无评论
发现更多内容

Java Agent场景性能测试分析优化经验分享

华为云开发者联盟

开发 华为云 java 华为云开发者联盟 企业号 3 月 PK 榜

PHP中出现Cannot modify header information - headers already sent

ModStart

软件测试/测试开发 | 测试平台开发-前端开发之数据展示与分析

测试人

软件测试 自动化测试 测试开发 测试平台

软件测试 | Android与iOS在app测试时有什么区别?

测吧(北京)科技有限公司

测试

软件测试 | Spring Boot集成Swargger

测吧(北京)科技有限公司

测试

4道数学题,求解极狐GitLab CI 流水线|第4题:合并列车

极狐GitLab

ci DevOps pipeline runner 合并列车

4月 · CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum捷行

极狐GitLab DevSecOps 为企业许可证安全合规保驾护航

极狐GitLab

许可证 DevSecOps 极狐GitLab 安全左移 安全合规

卷麻了,业务同事都能开发软件,我简直无地自容……

这我可不懂

低代码 低代码开发平台 JNPF

博睿数据入选中国信通院《高质量数字化转型产品及服务全景图》

博睿数据

可观测性 智能运维 博睿数据 信通院 高质量发展

主题别名(Topic Alias)-MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 主题别名

瓴羊Quick BI提供移动端自助分析解决方案, 易于性高于 Fine BI、 Smart BI

流量猫猫头

大数据 数据分析

MAXON indoor or outdoor tracking and positioning tech with Wi-Fi Bluetooth Lora UWB AoA

wifi6module

LoRa wifi solution blueteeth UWB AOA

如何在服务端渲染fabric.js

ModStart

软件测试 | Spring Boot异常处理

测吧(北京)科技有限公司

测试

软件测试 | python跨平台API对接

测吧(北京)科技有限公司

测试

直播预告 | 时序数据库的流计算支持

KaiwuDB

流计算 时序数据库 KaiwuDB

软件测试 | 跨平台API对接

测吧(北京)科技有限公司

测试

软件测试/测试开发 | 学做测试平台开发-Vuetify 框架

测试人

软件测试 测试开发 测试平台

你知道目前master分支目前多大吗?

坚果

OpenHarmony

从ChatGPT的技术发展角度解析未来智能化的发展方向

加入高科技仿生人

人工智能 AI 低代码 智能化 ChatGPT

一键接入 ChatGPT,让你的QQ群变得热闹起来

极客飞兔

人工智能 聊天机器人 openai ChatGPT

OpenHarmonyApp启动页后记

白晓明

云数据库 HarmonyOS OpenHarmony 云函数 AppGallery Connect

软件测试 | Spring Boot的RESTful设计与实现

测吧(北京)科技有限公司

测试

软件测试 | 为什么使用Spring Boot

测吧(北京)科技有限公司

测试

软件测试 | python数据持久化技术

测吧(北京)科技有限公司

测试

Centos 环境搭建

流火

Linux centos Centos 7

Spring Boot是如何内嵌Tomcat的?原理剖析

做梦都在改BUG

Java tomcat Spring Boot

软件测试 | Vuetify框架

测吧(北京)科技有限公司

测试

软件测试 | ECharts简介与安装

测吧(北京)科技有限公司

测试

软件测试 | Java数据持久化技术

测吧(北京)科技有限公司

测试

AWS和Facebook合作推出PyTorch模型服务框架TorchServe:无需编写自定义代码,可让模型快速投入生产_AI&大模型_Julien Simon_InfoQ精选文章