演示了使用pytorch最近发布的新工具torchrve来进行pytorch模型的部署。
最近,pytorch推出了名为torchrve.
的新生产框架来为模型提供服务。我们看一下今天的roadmap:
1、使用docker安装
2、导出模型
3、定义handler
4、保存模型
为了展示torchrve,我们将提供一个经过全面训练的resnet34进行图像分类的服务。
官方文档:https://github.com/pytorch/rve/blob/master/readme.md##install-torchrve
安装torchrve最好的方法是使用docker。你只需要把镜像拉下来。
可以使用以下命令保存最新的镜像。
docker pull pytorch/torchrve:latest
所有可用的tags:/d/file/titlepic/rve handlers
torchrve支持以下默认 handlers
image_classifier
object_detector
text_classifier
image_gmenter
但是请记住,它们都不支持batching请求!
自定义 handlers
torchrve提供了一个丰富的接口,可以做几乎所有你想做的事情。一个handler
是一个必须有三个函数的类。
你可以创建你自己的类或者子类bahandler
。子类化bahandler
的主要优点是可以在lf.model
上访问加载的模型。下面的代码片段展示了如何子类化bahandler
。
子类化bahandler以创建自己的handler
回到图像分类的例子。我们需要
从每个请求中四级各题分值获取图像并对其进行预处理从模型中得到预测发送回一个响应小学信息技术教学反思预处理
.preprocess
函数接受请美丽的人求数组。假设我们正在向服务器发送一个图像,可以从请求的data
或body
字段访问序列化的图像。因此,我们可以遍历所有请求并单独预处理每个图像。完整的代码如下所示。
预处理每个请求中的每个图像
lf.transform
是我们的预处理变换,没什么花哨的。对于在imagenet上训练的模型来说,这是一个经典的预处理步骤。
我们的transform
在我们对每个请求中的每个图像进行预处理之后,我们将它们连接起来创建一个pytorch张量。
推理
在模型上进行推理
这一步很简单,我们从 .preprocess
得到张量。然后对每幅图像提取预测结果。
后处理
现在我们有了对每个图像的预测,我们需要向客户返回一些内容。torchrve总是返回一个数组。bahandler
也会自动打开一个.json
文件带有index -> label
的映射(稍后我们将看到如何提供这样的文件),并将其存储lf.mapping
中。我们可以为每个预测返回一个字典数组,其中包含label
和index
的类别。
把所有的东西打包到一起,我们的handler是这样的:
因为所有的处理逻辑都封装在一个类中,所以你可以轻松地对它进行单元测试!
官方文档:/d/file/titlepic/model-archiver 需要提供一个.mar
文件,简而言之,该文件只是把你的模型和所有依赖打包在一起。要进行打包,首先需要导出经过训练的模型。
导出模型
有三种方法可以导出torchrve的模型。到目前为止,我发现的最好的方法是trace
模型并存储结果。这样我们就不需要向torchrve添加任何额外的文件。
让我们来看一个例子,我们将部署一个经过充分训练的resnet34模型。
按照顺序,我们:
加载模型创建一个dummy输入使用torch.jit.trace
来trace模型的输入保存模型创建 .mar 文件
官方文档:https://github.com/pytorch/rve/blob/master/model-archiver/readme.md
你需要安装torch-model-archiver
git clone https://github.com/pytorch/rve.gitcd rve/model-archiverpip install .
然后,我们准备好通过使用下面的命令来创建.mar
文件。
torch-model-archiver --model-name resnet34 \--version 1.0 \--rialized-file resnet34.pt \--extra-files ./index_to_name.json,./myhandler.py \--handler my_handler.py \--export-path model-store -f
按照顺序。变量--model-name
定义了模型的最终名称。这是非常重要cis策划的,因为它将是endpoint的名称空间,负责进行预测。你还可以指定一个--version
。--rialized-file
指向我们之前创建的存储的 .pt
模型。--handler
是一个python文件,我们在其中调用我们的自定义handler。一般来说,是这样的:
my_handler.py
它暴露了一个handle
函数,我们从该函数调用自定义handler中的方法。你可以使用默认名称来使用默认handler(例如,--handler image_classifier
)。
在--extra-files
中,你需要将路径传递给你的handlers正在使用的所有文件。在本例中,我们必须向.json
文件中添加路径。使用所有人类可读标签名称,并在myhandler.py
中定义每个类别。
如果你传递一个index_to_name.json
文件,它将自动加载到handler ,并通过lf.mapping
访问。
--export-path
就是 .mar
存放的地方,我还添加了-f
来覆盖原有的文件。
如果一切顺利的话,你可以看到resnet34.mar
存放在./model-store
路径中。
这是一个简单的步骤,我们可以运行带有所有必需参数的torchrve docker容器。
docker run --rm -it \-p 3000:8080 -p 3001:8081 \-v $(pwd)/model-store:/home/model-rver/model-store pytorch/torchrve:0.1-cpu \torchrve --start --model-store model-store --models resnet34=resnet34.mar
我将容器端口8080和8081分别绑定到3000和3001(8080/8081已经在我的机器中使用)。然后,我从./model-store
创建一个volume。最后,我通过padding model-store
并通过key-value列表的方式指定模型的名称来调用torchrve
。
这里,torchrve有一个endpoint /prediction宋英宗赵曙s/resnet34
,我们可以通过发送图像来预测。这可以使用curl来实现。
curl -x post http://127.0.0.1:3000/predictions/resnet34 -t inputs/kitten.jpg
kitten.jpg
回复:
{ "label": "tiger_cat", "index": 282}
工作正常!
使用docker安装torchrve
默认以及自定义handlers
模型打包生成
使用docker提供模型服务到此这篇关于用pytorch部署模型的文章就介绍到这了,更多相关pytorch部署模型内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 23:56:10,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8e13eab0d0858e9e887b83635d3c5840.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:教你用PyTorch部署模型的方法.doc
本文 PDF 下载地址:教你用PyTorch部署模型的方法.pdf
留言与评论(共有 0 条评论) |