Docker部署onnxruntime-gpu环境

Docker部署onnxruntime-gpu环境

新开发的深度学习模型需要通过docker部署到服务器上,由于只使用了onnx进行模型推理,为了减少镜像大小,准备不使用pytorch或tensorflow官方提供的带别的框架的镜像,寻找有onnxruntime-gpu的镜像。在此记录整个过程。

寻找官方镜像和考虑从cuda镜像安装onnxruntime

先在onnx官方网站上逛了一圈,似乎不支持通过docker安装,可能是考虑到一般来说开发者是用别的框架转onnx吧,看了下文档里面也没有docker安装的选项,似乎只能自己找了。
Docker部署onnxruntime-gpu环境_第1张图片
不过直接搜索发现,onnx似乎是有镜像的。
Docker部署onnxruntime-gpu环境_第2张图片
结果满心欢喜下载下来却发现,有onnx但是没有onnxruntime。。。其实后来想想只要支持cuda,onnxruntime可以自己pip安装啊。
之后考虑从nvidia-docker的cuda镜像安装onnxruntime-gpu,但是cuda官方镜像似乎没有安装python或者miniconda,还要自己安装,所以将此作为备选项。

微软MCR镜像

重新搜索了一下发现在这里有微软提供的onnxruntime环境,提供了各种版本。
Docker部署onnxruntime-gpu环境_第3张图片
满心欢喜,于是赶紧:

docker pull mcr.microsoft.com/azureml/onnxruntime:latest-cuda

经过一段时间的下载终于完成了,进入环境准备测试一下

docker run --runtime=nvidia -it mcr.microsoft.com/azureml/onnxruntime:latest-cuda

结果还没开始:
错误
WTF?和cuda的docker一样没有python???就在我满心失望准备从cuda的docker安装python或者干脆先用pytorch的docker时,我突然意识到不对啊,onnx没有python也太奇怪了,怎么安装的?于是我查看了一下镜像的history:

docker history --no-trunc=true mcr.microsoft.com/azureml/onnxruntime:latest-cuda

赫然发现:
history
其实是有python的!那么为什么会现实没有command not found呢?仔细一看,这里写的是python3,那么是不是要用python3才行呢?一试,果然:
python3
这真是太无语了,我一开始以为是微软为了适配azure部署所以docker需要从云平台额外引入miniconda之类的配件才行,结果就是个命名。不得不吐槽为什么不顺便定义一下python这个命令,让我差点打算重新安装一个python。(顺便,我回cuda docker试了一下,python3也不行,看来是真没有python)

顺便一提,pip命令也会提示找不到,需要使用pip3才行,后续安装需要注意。

结语

之后一切按部就班来了,只用onnx的镜像会更加精简,尤其是部署模型也不用考虑训练什么的,完全不需要带tf或者torch的镜像,所以采用onnx转换+onnxruntime docker部署实用性还是比较高的,没有找到相关的教程,特此记录,希望有益于有同样需求的开发者。

你可能感兴趣的:(深度学习,docker,tensorflow,深度学习)