QQ:1757093754 欢迎交流!!!
什么是torchserve?
(百度)torchserve是Facebook和AWS联手开发的一款用于机器学习模型部署和调用的微服务程序。
接触torchserve是因为项目落地最终需要部署到平台上面,所以就开始了torchserve的使用之旅。
安装方法:
pip3 install torchserve -i https://pypi.tuna.tsinghua.edu.cn/simple
torchserve官网:
1. TorchServe — PyTorch/Serve master documentationhttps://pytorch.org/serve/
环境依赖:(建议)
torch==1.9.x
openjdk==11
python==3.8
个人学习安装、使用torchserve:
1.安装虚拟机
对于模型的部署,torchserve支持windows,但是我们最好在linux下面进行练习,大部分的项目落地都以linux为主。
下载一个linux虚拟机必不可少:
(centos)
镜像下载链接:
CentOS 安装镜像 · ISRC - 镜像站 (iscas.ac.cn)https://mirror.iscas.ac.cn/mirror/centos-release.html将下载好的iso镜像安装到虚拟机里面:
在虚拟机打开终端:
2.安装anaconda
和我们平时使用一样,我们需要一个包管理工具去管理我们下载好的包和库。
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
注意:这里的anaconda版本可以随意,最好保证不要太新,也不要太旧就行。

注:图中的anaconda是我已经安装完成的,正常下载完了只有旁边那一个.sh文件。
之后执行.sh文件实现安装:
bash Anaconda3-2021.05-Linux-x86_64.sh
注意:安装的时候仔细看给的提示英文,不要盲目的一路回车过去!!!
报错:Cannot open xxx/anaconda3/conda.exe or archive xxx/anaconda3/conda.exe.pkg
解决方法:
不要从windows上直接下载anaconda,在传到linux上面!
如果正常安装完成的话,anaconda会自动加入环境变量。
3.安装openjdk==11
torchserve的使用需要java环境,官方建议openjdk11。
注:如果在后续使用过程中出现任何和java环境有关的报错,都是jdk版本问题,或者是jdk环境没导入的问题。
yum install -y java-11-openjdk
配置环境变量:
vi /etc/profile
export JAVA_HOME=自己的jdk位置
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
检查环境变量是否配置成功:
java –version
4.安装集成开发环境
第4步就是在虚拟机上面安装pycharm(推荐),等集成开发环境。这一步就不详细说明了。(づ ●─● )づ
5.安装torchserve
pip3 install torchserve -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install torch-model-archiver -i https://pypi.tuna.tsinghua.edu.cn/simple
6.命令行使用
第一步:打包(注册模型)
torchserve需要部署torch-model-archiver生成好的mar文件,所以我们把权重和模型的配置文件打包成一个mar包。
注册模型:(模板)
torch-model-archiver --model-name xxx --version 1.0 --model-file model.py --serialized-file xxx.pth --handler image_classifier[这里可以自己写handle文件] --extra-files index_to_name.json[一个类别索引json]
注:模型的注册重点在handle,可以重写这个文件来实现属于自己的模型部署。(torchserve只支持torch、torchscript模型的部署),如果需要部署其他模型,需要自己重写handle文件。
启动 torchserve服务:
torchserve --start --model-store model_store[存放mar文件的文件夹] --models yolo[自定义注册的模型名称]=xxx.mar
7.测试
部署状态查询(端口号具体看部署到的端口号)
curl http://localhost:8080/ping
测试xxx.jpg(端口号具体看部署到的端口号)
curl http://localhost:8080/predictions/test -T xxx.jpg
下面是一张在做项目时候测试结果图片:
实际使用过程中遇到的问题汇总:
handler.py
# 自定义handler
class MyHandler(BaseHandler):
threshold = 0.5
# 初始化
def initialize(self, context):
pass
# 数据的预处理
def preprocess(self, data):
pass
# 推理部分
def inference(self, data, *args, **kwargs):
pass
# 后处理部分
def postprocess(self, data):
pass
注:torchserve源代码只支持torch模型和torchscript模型的部署。
也可以在handler.py里面自定义一个模型加载类来加载模型:
def _load_pickled_model(self, model_dir, model_file, model_pt_path):
pass
注:正式使用的时候需要安装CUDA
CUDA下载地址:CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive版本对应关系:(该网站可以直接通过不同的cuda版本下载pytorch)以前的 PyTorch 版本 |PyTorch
https://pytorch.org/get-started/previous-versions/
自定义部署网站端口号:
config.properties.txt:
修改完端口之后再部署:
torchserve --start --model-store xxx --models xxx=xxx.mar --ts-config ./config.propertes
注:--model-store 参数为存放mar压缩包的文件夹路径。
停止部署服务:
torchserve --stop
mmdetection使用torchserve部署:
由图可见,mmdetection自己封装好了一个handler.py可以直接使用。仍只支持torch和torchscript模型权重。
python .\tools\deployment\mmdet2torchserve.py F:\ms\yolox_s_8x8_300e_coco.py F:\ms\best_bbox_mAP_epoch_109.pth --output-folder output_mar --model-name yolox -f
打包完成之后可以直接使用 test_torchserve.py 文件进行测试,也可以使用终端进行测试。