使用说明
深度学习网络基于多种框架,包括pytorch、tensorflow、keras、caffe等。 这些框架需要整套环境、系统设置和详细配置。
为了在同一平台上测试来自不同框架的模型,我们选择Docker作为解决方案。 Docker可以将所有环境打包到一个虚拟环境中,从而消除了大部分部署中涉及的复杂性。 尽管有时由于cpu版本等原因,在一台计算机上编译的Docker可能仍然无法在另一台计算机上正常运行。
在系统中内置的图像分类模型是部署在ubuntu系统中的flask应用程序。 Resnet34模型基于pytorch,而mobilenet基于tensorflow。
Docker的配置标准:
Docker镜像的名称必须与Docker文件的名称相同。例如,如果docker镜像的名字是resnet34,那么docker文件的名字必须也是resnet34.tar。
Docker通过一个端口与系统交互。系统传送给它一张图片,它需要返回图片的分类结果与可能性最高的五个分类在神经网络中的反传梯度。 信息传递以字符串化的json格式进行。 api将以3*224*224数组的形式接收图像,数组值的大小在0-255之内。该图像将作为一个名为 "imageArray "的请求变量传送给api。 返回的信息需要包含两个变量:一个是"predictions",是分类算法对图像进行分类的可能性向量,大小为1*1000,总和为1。其标签顺序为imagenet的标签顺序。 另一个变量是'grads',它是排名前五的标签在神经网络中的反传梯度。它应该是一个5*1*3*224*224的浮点型数组。
除了docker文件以外,用户还应该提供docker中进程启动的命令。一个命令的例子是这样的。
docker run -d -p 127.0.0.1:{}: 274 mobilenet /root/miniconda3/envs/api/bin/python /root/api/run.py
该命令用于在服务器上启动Docker镜像。示例中的docker是一个python flask应用程序。
在以上例子中,Docker装载了一个ubuntu系统。
Docker镜像的名字是 mobilenet。
python环境在/root/miniconda3/envs/api/bin/python。
应用程序是/root/api/run.py
注意,当您从根路径启动应用程序时,程序中的所有路径应设置为绝对路径,以免run.py程序无法找到同一文件夹中的其他文件。
{}部分是为服务器上分配的端口保留的。
当我们在Docker中启动api时,'{}'被'274'取代。这意味着,Docker在主机系统的127.0.0.1:274提供一个api。
如果所有这些要求都严格满足,我们就可以测试图像分类模型了。