Ubuntu配置Torchserve环境,并在线发布你的深度学习模型

一、申请Ubuntu云服务器

你可以从阿里云、百度云、腾讯云等多个云服务器厂商购买一个在线云服务器。我采用的是百度云的轻量级的云服务器,装的是Ubuntu20系统。

二、在Ubuntu上配置Torchserve环境

Torchserve是Facebooke公司开发的在线深度学习模型部署框架,它可以很方便的部署pytorch的深度学习模型,读者可以访问Github地址获取最新功能和详细说明:官方地址https://github.com/pytorch/serve/blob/master/docs/README.md

2.1、利用docker一键式安装

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,上述解释来源于百度百科。其实,简单的说,docker就是把Torchserve的所有运行环境都打包在一个容器里,你只要通过docker的接口就可以调用相应环境运行你的程序。所以,为了方便,直接用docker安装。
1.进入ubutu系统
file
2.更新ubutu的所有环境

sudo apt-get update

3.卸载旧版本的docker,如果没有安装过,可以省略

sudo apt remove docker docker-engine docker.io containerd runc

4.安装新版本docker
读者可以参考文章(06-Ubuntu 20 安装docker)

5.测试一下docker是否安装成功

docker --version

file
出现上述版本号,表示你已经安装docker成功了,恭喜你完成了第一步。

2.2、安装java运行环境

因为Torchserve是基于JAVA运行的,所以,我们需要在Ubutu上安装最新的JAVA开发环境。

1.执行命令

sudo apt-get -y install openjdk-11-jdk

2.检查是否安装成功

java --version

file
显示这个就表示安装成功了,当然你可能会遇见各种问题,JAVA的详细安装可以参考文章ubuntu20.04安装Java。专业的工作交给专业的人嘛。

2.3、安装torchserve环境

Torchserve提供了方便且快捷的docker安装方式,我们只要在Ubuntu中输入命令就行,开不开心,激不激动。命令代码如下所示:

  • 拉取CPU的镜像(表示运行在CPU环境的框架)
docker pull pytorch/torchserve:latest

等运行好了,运行成功就可以通过docker中的pytorch/torchserve创建一个容器实例了,这个容器包含了torchserve运行的所有环境。

2.4、安装screen

Screen的安装不是必须的,可以根据自己的需要安装,当启动Torchser的时候Ubuntu当前的命令行变得不可用,因为它会不停的打印logs信息,所以我们用screen把当前命令窗口后台化,并重新打开一个命令行窗口。接下来用命令行安装screen:

sudo apt install screen

screen的命令有很多,作者可以参考这篇文章screen 命令详解。
这样,我们所有的准备工作都已经做完了,那么我们怎么部署深度学习模型呢?接着往下看!

三、在Ubuntu上部署你的深度学习模型

部署模型其实是非常简单的事情,只是几条命令的事情,最困难的事情是训练模型和打包模型。训练模型不言而喻,最主要的是打包模型。Torchserve提供了一个整体的框架,方便的部署,但是你必须严格按照他们的部署规则。这个时候,就需要你训练的模型打包成符合Torchserve规则的输入模型。为了方便,我们把打包模型部署模型分开操作,也就是说Ubuntu服务器只负责部署模型。打包模型我们在线下完成后上传给Ubuntu系统。这样实现了线上和线下的分离,方便模型版本控制。

3.1、线下环境(Windows)

在我的笔记本电脑上进行训练模型和打包模型,我采用的是Windows系统,同时采用Anaconda作为虚拟环境。下述所有都是在cmd命令行中完成。

1.首先我们通过,Anaconda创建一个虚拟的开发环境,安装一下包:
python3.8
pip
pytorch

2.同时,安装JAVA的开发环境
并配置为windows的环境变量(电脑上可以随时调用JAVA开发环境),读者可以参考文章windows安装jdk。
你可以在Windows的CMD命令行中,通过以下命令检查是否安装配置成功:

java --version

Ubuntu配置Torchserve环境,并在线发布你的深度学习模型_第1张图片
显示这样就是表示已经安装成功了

3.此外,你也可以把Anaconda配置为环境变量

这样你在CMD中就可以通过命令行使用conda命令进行操作python环境了,读者可以参考anaconda环境配置和常用命令.

通过命令查看conda是否安装和配置成功:

conda --version

file
图中显示安装成功。

4.通过conda环境创建一个torchserve的开发环境:

conda create -n "torchserve" python=3.8

5.进入torchserve环境:

conda activate torchserve

file
这时候就显示已经进入了我们创建的torchserve环境中了。

6.在该环境中利用pip安装torchserver的包:

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

Ubuntu配置Torchserve环境,并在线发布你的深度学习模型_第2张图片
显示出这些包都已经安装好,表示我们可以使用torchserve了。

此外,我们需要从github上下载torchserve的整个文件,这样可以采用里面的一些现成的例子,我们可以通过命令行,利用git来下载,同时读者也可以直接进官网下载。

7.安装git包,这样我们可以采用git命令来下载github上的文件:

conda install git

file
查看到我们已经安装成功。

8.下载torchserve的整个文件,执行以下命令:

git clone https://github.com/pytorch/serve.git

这时候一个serve文件会被下载到你的用户文件夹中,我的是存在C:\Users\Lcy中。

命令行中执行cd命令,进入到serve文件目录下:

cd serve

执行命令:

pip install .

安装完再执行:

cd model-archiver

继续执行安装命令:

pip install .

完成之后,接下来就开始打包我们的模型了,期待吧。

3.2、打包模型(以官方例子为准)

这里的话,我们就以官方提供的mnist模型例子作为打包模型的方法,具体可以参考官方文档。

1.命令行cd到serve文件夹中:

 cd serve

file
2.执行打包命令:

torch-model-archiver --model-name mnist --version 1.0 --model-file examples/image_classifier/mnist/mnist.py --serialized-file examples/image_classifier/mnist/mnist_cnn.pt --handler  examples/image_classifier/mnist/mnist_handler.py --extra-files examples/image_classifier/mnist/mnist.ts.json

其中:

  • –model-name: 模型的名称,后来的接口名称和管理的模型名称都是这个(本例中是mnist)
  • –model-file: 模型采用的类别,也就是模型是采用什么网络结构的(本例中是mnsit.py)
  • –serialized-file: 模型环境及代码及参数的打包文件(模型权重文件pth或pt)(本例中是mnist_cnn.pt)
  • –handler: 打包模型后模型的执行流程,主要包括预处理、预测和后处理的流程。(本例中采用mnist_handler.py)
  • –extra-files:这个暂时不知道是干什么的(例子中用mnist.ts.json),这个是可有可无的,不是必要文件,知道读者可以可以留言

3.执行完这个语句后会在serve文件夹中生成一个新的文件,文件名为mnist.mar:

恭喜你,你的模型已经打包完成,处理的流程,权重被打包成mnist.mar中,你只要有这个文件,接下来,你就可以把他部署到Ubuntu的云服务器中。

读者就要问了,我想要打包自己的模型怎么办,不用担心,我另外写了一个打包自己模型的文章(读者可访问地址:Torchserve打包和部署你训练的深度学习模型)。

3.3、部署模型

接下来就是部署模型了,也就是本章最后的步骤了。

1.打开你的Ubuntu云服务器,进入root界面:
file
2.输入启动torchserve的命令:

#2.1.创建新窗口
screen -S torch
#2.2.在新窗口开启docker容器
docker run --rm -it -p 3000:8080 -p 3001:8081 pytorch/torchserve

其中–rm表示的是读写,-t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开,简单讲就是保持容器运行。-p是端口映射,torchserve默认8081端口负责后台管理模型,你可以理解为管理员端口;8080端口是开放端口,负责用户对模型的访问,理解为用户端口。那么-p的意思就是说,把8081端口改成3001,;8080的改成3000。pytorch/torchserve表示的就是torchserve环境,利用该环境生成一个容器。

#2.3.切换新窗口到后台
按快捷键:ctrl+a+d

*3.查看容器是否生成,执行指令:

docker ps

file
显示上图结果,表示你的容器正在已经成功开启。其中ID就是f78012109930,是唯一标识符;最后的NAMES就是festive_knuth,表示容器的名字,记住它,我们以后调用容器就用它。

4.把本地windows中的minist.mar文件传到ubuntu云服务器中:

首先现在ubuntu系统中,创建一个文件夹,用来存上传的mar格式模型:

mkdir model

查看一个是否创建成功:

ls

file
上图表示已经有model文件夹了。

接下来,我们利用scp命令把本地文件上传ubuntu云服务器中,在你的windows中,打开命令行,输入:

scp mnist.mar [email protected]:/root/model

最后,在ubuntu系统上行查看是否上传成功,输入命令:

cd model
ls

file
可以看到我的model文件夹里有两个mar文件,分别是我刚上传的mnist.mar,另外一个是我之前上传的。

5.把model文件夹中的mar文件拷贝到容器特定文件夹中:

步骤3我们已经生成了一个容器,名字是festive_knuth,这时候需要我们把mdk文件放在容器的特定文件夹中,这也是torchserve规则化规定的,没有为什么,执行以下命令:

docker cp /root/model/mnist.mar festive_knuth:/home/model-server/model-store

命令很好理解,docker cp实现了主机和容器之间的数据拷贝。该条命令就是把root/model中的mnist.mar文件拷贝到festive_knuth容器中model-store文件夹中。

拷贝完成可以执行以下命令查看拷贝是否完成:

docker exec festive_knuth ls -a /home/model-server/model-store

file
上图显示我们成功把mnist.mar文件拷贝到容器中了,需要注意的是,一旦容器停止,文件夹中东西也会消失,因为容器本身就是一个虚拟环境。

6.注册模型

我们目前仅仅把mar文件放置到了它应该放的位置,但是并没有告诉容器你怎么去调用它,这时候,我们就需要注册模型来告诉容器,你可以通过这个链接访问我的mar文件,执行以下命令:

curl -X POST "http://localhost:3001/models?url=mnist.mar"

file
因为注册模型是管理员的任务,所以我们通过3001端口进入,这样不影响3000端口的正常使用;显示上图就表示模型注册成功了,上边提示我们需要非配一个工作线程去处理这个api;意思就是注册好了,分配几个线程去专门处理来自这个模型的访问。

7.分配线程

读者根据自己需要来分配不同数量的工作线程,执行的命令如下所示:

curl -v -X PUT "http://localhost:3001/models/mnist?min_worker=1&synchronous=true"

Ubuntu配置Torchserve环境,并在线发布你的深度学习模型_第3张图片
我们暂时分配了一个,上图是执行之后的结果,状态显示打工人正在为你的模型工作,哈哈哈。

8.测试一下

在你的windows的cmd命令行中输入命令:

curl http://IP地址:3000/predictions/mnist -T 0.png

其中IP地址表示你申请云服务器的公网IP,这里保护我的隐私,我就不挂出来了。-T后面的0.png是你本地的图片,是一个手写字0。这时候的返回结果如下所示:
file
上图显示识别结果为0,识别正确,搭建完成。图中我的ip用了马赛克,读者根据自己IP进行书写就好了。

9.模型注销

最后一步告诉你们一下,怎么注销吧,执行以下命令(在ubuntu云服务器上):

curl -X DELETE http://localhost:3001/models/mnist/

file
显示已经取消注册了。

你们学会了么!快快把你们的模型部署起来吧!

你可能感兴趣的:(机器学习算法,ubuntu,深度学习,linux)