TorchServe环境构建+模型更新+新模型注册

2023-11-13

目录

1.背景

2.torchserve环境搭建

2.1jdk环境搭建

2.2 python 环境搭建

2.3 启动服务

2.3.1 注册模型

2.3.2 模型查看

2.3.3 接口调用

3 进阶功能

3.1 模型多版本管理

3.2 新模型注册


1.背景

由于技术路线调整,需求调整原本的模型推理服务——tensorflow-serving,经过初步调研,可替换的服务框架有:torchserve和triton。本文只设计torchserve的环境部署方式和初级功能使用介绍。

2.torchserve环境搭建

基本运行环境

torch                   1.12.1
torch-model-archiver    0.6.0
torch-workflow-archiver 0.2.4
torchserve              0.6.0
torchvision             0.13.1


jdk>=11

2.1jdk环境搭建

下载jdk

网上参考较多不在赘述

解压配置环境变量

export JAVA_HOME=/usr/local/jdk11.0.10
export PATH=${PATH}:${JAVA_HOME}/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

验证环境

$ java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

2.2 python 环境搭建

官方文档也很详细,可以参考

serve/README.md at master · pytorch/serve · GitHub

自己配置的话

conda create -n ts python=3.9

pip install torchserve torch-model-archiver torch-workflow-archiver

模型推理以来的pip包可以后续安装

安装完成后,可以先启动服务看一下效果

2.3 启动服务

torchserve --start --model-store model_save

由于我们未配置模型信息,所以调用模型查看接口,返回结果中没有模型信息

$ curl http://127.0.0.1:8081/models
{
  "models": []
}

2.3.1 注册模型

注册模型需要先对模型进行打包

打包模型文件和权重为一个文件

wget https://download.pytorch.org/models/resnet18-f37072fd.pth
torch-model-archiver --model-name resnet-18 --version 1.0 --model-file ./examples/image_classifier/resnet_18/model.py --serialized-file resnet18-f37072fd.pth --handler image_classifier --extra-files ./examples/image_classifier/index_to_name.json
mkdir model_store
mv resnet-18.mar model_store/
torchserve --start --model-store model_store --models resnet-18=resnet-18.mar

2.3.2 模型查看

$ curl http://127.0.0.1:8081/models
{
  "models": [
    {
      "modelName": "resnet-18",
      "modelUrl": "resnet-18.mar"
    }
  ]
}

2.3.3 接口调用

$ curl http://127.0.0.1:8080/predictions/resnet-18 -T ./examples/image_classifier/kitten.jpg
{
  "tabby": 0.40966343879699707,
  "tiger_cat": 0.3467043936252594,
  "Egyptian_cat": 0.13002890348434448,
  "lynx": 0.023919543251395226,
  "bucket": 0.011532200500369072
}

基本功能验证完成。

3 进阶功能

3.1 模型多版本管理

如果同一个模型存在多个注册版本,访问时可以在url中添加version参数进行区分:

/predictions/{model_name}/{version}:

比如2.3.1注册的resnet18 version=1.0的模型,我也可通过url中增加版本号进行访问:

curl http://127.0.0.1:8080/predictions/resnet-18/1.0 -T ./examples/image_classifier/kitten.jpg
{
  "tabby": 0.40966343879699707,
  "tiger_cat": 0.3467043936252594,
  "Egyptian_cat": 0.13002890348434448,
  "lynx": 0.023919543251395226,
  "bucket": 0.011532200500369072
}

更新模型

先要使用2.3.1的方式对新模型打包,注意版本号

$ curl -X POST  "http://localhost:8081/models?url=/home/ubuntu/newspace/pytorchserve/deploy/model_save/resnet-18_2.mar "
2022-10-27T14:58:01,223 [DEBUG] epollEventLoopGroup-3-12 org.pytorch.serve.wlm.ModelVersionedRefs - Adding new version 2.0 for model resnet-18
2022-10-27T14:58:01,223 [INFO ] epollEventLoopGroup-3-12 org.pytorch.serve.wlm.ModelManager - Model resnet-18 loaded.
2022-10-27T14:58:01,224 [INFO ] epollEventLoopGroup-3-12 ACCESS_LOG - /127.0.0.1:38340 "POST /models?url=/home/ubuntu/newspace/pytorchserve/deploy/model_save/resnet-18_2.mar HTTP/1.1" 200 1832
2022-10-27T14:58:01,224 [INFO ] epollEventLoopGroup-3-12 TS_METRICS - Requests2XX.Count:1|#Level:Host|#hostname:cb,timestamp:1666849981
{
  "status": "Model \"resnet-18\" Version: 2.0 registered with 0 initial workers. Use scale workers API to add workers for the model."
}

调用测试

$ curl http://127.0.0.1:8080/predictions/resnet-18/2.0 -T ./examples/image_classifier/kitten.jpg
{
  "code": 503,
  "type": "ServiceUnavailableException",
  "message": "Model \"resnet-18\" Version 2.0\" has no worker to serve inference request. Please use scale workers API to add workers."
}

根据提示对新版本模型新增worker

$ curl -v -X PUT "http://localhost:8081/models/resnet-18/2.0?min_worker=1"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8081 (#0)
> PUT /models/resnet-18/2.0?min_worker=1 HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 202 Accepted
< content-type: application/json
< x-request-id: d2989b0f-f154-4056-9c58-d5f44d558cce
< Pragma: no-cache
< Cache-Control: no-cache; no-store, must-revalidate, private
< Expires: Thu, 01 Jan 1970 00:00:00 UTC
< content-length: 47
< connection: keep-alive
< 
{
  "status": "Processing worker updates..."
}
* Connection #0 to host localhost left intact

$ curl http://localhost:8081/models/resnet-18/2.0
[
  {
    "modelName": "resnet-18",
    "modelVersion": "2.0",
    "modelUrl": "/home/ubuntu/newspace/pytorchserve/deploy/model_save/resnet-18_2.mar",
    "runtime": "python",
    "minWorkers": 1,
    "maxWorkers": 1,
    "batchSize": 1,
    "maxBatchDelay": 100,
    "loadedAtStartup": true,
    "workers": [
      {
        "id": "9003",
        "startTime": "2022-10-27T15:03:22.541Z",
        "status": "UNLOADING",
        "memoryUsage": 0,
        "pid": 19643,
        "gpu": true,
        "gpuUsage": "gpuId::0 utilization.gpu [%]::2 % utilization.memory [%]::0 % memory.used [MiB]::2246 MiB"
      }
    ]
  }
]

$ curl http://127.0.0.1:8080/predictions/resnet-18/2.0 -T ./examples/image_classifier/kitten.jpg
{
  "tabby": 0.40966343879699707,
  "tiger_cat": 0.3467043936252594,
  "Egyptian_cat": 0.13002890348434448,
  "lynx": 0.023919543251395226,
  "bucket": 0.011532200500369072
}

3.2 新模型注册

在实际工程应用中,一个serving会提供多个模型的服务能力,这就需要我们在更新一个模型时,不能中断其他模型的在线推理能力。

新增一个模型tts

$ cd ./examples/text_to_speech_synthesizer/create_mar.sh
$ ./create_mar.sh
$ mv waveglow_synthesizer.mar model_store/

$ curl -X POST  "http://localhost:8081/models?url=/home/ubuntu/newspace/pytorchserve/deploy/model_save/waveglow_synthesizer.mar"


$ curl http://localhost:8081/models/waveglow_synthesizer/1.0
[
  {
    "modelName": "waveglow_synthesizer",
    "modelVersion": "1.0",
    "modelUrl": "/home/ubuntu/newspace/pytorchserve/deploy/model_save/waveglow_synthesizer.mar",
    "runtime": "python",
    "minWorkers": 0,
    "maxWorkers": 0,
    "batchSize": 1,
    "maxBatchDelay": 100,
    "loadedAtStartup": false,
    "workers": []
  }
]


$ curl -v -X PUT "http://localhost:8081/models/waveglow_synthesizer/1.0?min_worker=1"
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8081 (#0)
> PUT /models/waveglow_synthesizer/1.0?min_worker=1 HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 202 Accepted
< content-type: application/json
< x-request-id: 08ad7b99-86b5-4144-aff3-92583ed40aca
< Pragma: no-cache
< Cache-Control: no-cache; no-store, must-revalidate, private
< Expires: Thu, 01 Jan 1970 00:00:00 UTC
< content-length: 47
< connection: keep-alive
< 
{
  "status": "Processing worker updates..."
}
* Connection #0 to host localhost left intact





3.3 模型测试

$ curl http://127.0.0.1:8080/predictions/waveglow_synthesizer -T sample_text.txt -o audio.wav

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    25    0     0    0    25      0      0 --:--:--  0:04:11 --:--:--     0
100  183k  100  183k    0    25    420      0  0:07:26  0:07:25  0:00:01 47879

目录下生成tts生成的音频文件audio.wav

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TorchServe环境构建+模型更新+新模型注册 的相关文章

随机推荐

  • python函数编程 返回函数 匿名函数 装饰器 偏函数

    返回函数 函数的返回对象可以是一个函数 返回时不立即执行 而是调用返回对象的时候再执行 def lazy sum args def sum ax 0 for n in args ax ax n return ax return sum gt
  • Python边学边用--BT客户端实现之BitTorrent文件解析

    BitTorrent文件使用bencode编码 其中包括了4种数据类型 d 开头表示是dict类型 e 表示结束 l 小写字母L 开头表示是list类型 e 表示结束 i 开头表示是integer类型 e 表示结束 可以表示负数 以数字开头
  • lisa traffic sign 数据集训练

    1 lisa下载地址 http cvrr ucsd edu LISA datasets html 2 解压缩后 使用python tools splitAnnotationFiles py将数据集划分成训练集和测试集的csv描述文件 3 转
  • 企业小程序订单管理系统解决痛点文档记录

    订单管理系统关于企业订货的痛点和介绍 一 适用行业 适用于批发 生产 代理 加盟 二 企业销售批发的痛点 在实际业务环境中 无论是厂家 生产 代理 批发 加盟 企业都会有自己的客户 这些客户可能是代理商 固定散客 加盟商等会遇到如下情况 在
  • 【Spark NLP】第 6 章:信息检索

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 忘记文档密码,教你破解WORD/EXECL/PPT文件加密密码

    大家办公时 有设置密码习惯 并且容易忘记密码 今天给大家提供一款超好用得小工具 不定时更新软件 高效率工具小福利 软件 Advanced OfficePassword Recovery 今天给大家带来一款破解Excel密码的神器 涉及到重要
  • VLC解码播放H264文件

    转自 http www cnblogs com ImageVision p 4744391 html utm source tuicool utm medium referral 昨天收到几个文件名是 xxx 264的文件 这种文件属于视频
  • web开发技术总结

    web开发可以理解为动态网站的开发 以java语言为例 就是基于java动态网站的开发 前台框架 jQuery Mvc框架 Struts spring Mvc 核心框架 Spring orm框架 Hibernate Spring JDBC
  • 复数乘法是什么?

    逛木虫的时候看到一个很旧的数学帖子被人挖了坟 这个帖子大概是讨论如果把复数看作是向量 那么复数乘法应该怎么看待 向量之间有乘法 例如复数 1 i 和复数 i 其对应的向量分别是 left begin array 20 c 1 1 end a
  • git没有冲突 但是提示有_git 处理冲突步骤

    背景 工程中有一块功能是在别的远程分支上的 然后自己的分支也是一直在更新的 现在要将该分支上的信功能合到自己的分支上 于是采用了git cherry pick的方法 但是出现了报错 查了许多网上的资料最后总结出处理冲突的步骤 具体实现 输入
  • [实习]Skywalking

    SkyWalking 1 是什么 skywalking是一个包含监控 追踪 并拥有故障诊断能力的分布式系统 它主要的作用是全链路监控 收集数据 分析处理数据 然后可视化呈现 这么说有点抽象 接下来画图来说 这是skywalking的架构 它
  • VscodeSSH免密远程登录服务器

    1 windows下cmd或git bash 或powershell等输入 ssh keygen 指令输入后一直回车 在C Users user name ssh路径下生成如下文件 2 linux服务器Terminal输入 ssh keyg
  • 【SVN命令】之 revert

    名称 子命令Svn revert 取消所有的本地编辑 概要 子命令Svn revert PATH 描述 Reverts any local changes to a file or directory and resolves any co
  • nodejs HelloWorld

    nodejs 服务器端 HelloWorld 程序 a hello js d02 hollo js var http require http http createServer function request response 请求对象
  • C++&Qt 各种数据类型转换

    1 uint64转QString QString strfilerename QString 1 arg nFileID nFileID为uint64类型 QString number nFileID 2 QString转超长数字串 QSt
  • 计算机图形学GAMES101(三)变换(模型、视图、投影)

    补充内容 R 是逆时针方向旋转的矩阵 R 是顺时针方向旋转的矩阵 可以发现R T R 1 像这样的矩阵叫做正交矩阵 以后如果要求往相反的方向旋转相同角度的变换 R 只需要求正向旋转的矩阵然后转置就可以了 本节涉及内容 仿射变换 线性变换 平
  • LeetCode-Python-389. 找不同

    给定两个字符串 s 和 t 它们只包含小写字母 字符串 t 由字符串 s 随机重排 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 s abcd t abcde 输出 e 解释 e 是那个被添加的字母 第一种思路 转成
  • Java笔记:泛型、限定通配符与非限定通配符

    目录 1 泛型 2 限定通配符与非限定通配符 2 1 限定通配符 2 2 非限定通配符 3 PECS Producer Extends Consumer Super 原则 3 1 Producer Extends 3 2 Consumer
  • jar文件怎么打开 查看jar文件内容操作方法

    jar文件怎么打开 查看jar文件内容操作方法 jar文件是java项目生成的一个小的文件项目 也可以描述为一个java压缩包 里面封装了 许多java类以及方法 变量 很多用户想要查看jar文件内容 可是却不知道jar文件怎么打开 下面小
  • TorchServe环境构建+模型更新+新模型注册

    目录 1 背景 2 torchserve环境搭建 2 1jdk环境搭建 2 2 python 环境搭建 2 3 启动服务 2 3 1 注册模型 2 3 2 模型查看 2 3 3 接口调用 3 进阶功能 3 1 模型多版本管理 3 2 新模型