本文主要是记录使用docker/nvidia-docker安装深度学习图片文字识别,开发运行环境.
在做图片文字识别的,需要用到CTPN以及crnn,服务器是ubuntu16的,但是上述两种框架(github现有的)只能运行在ubuntu14上面。考虑到,发布等问题,决定使用docker在ubuntu16搭建ubuntu14 cuda7.5 cudnn3开发运行环境。
服务器系统为ubuntu16.04,GPU卡为M40,安装了CUDA7.5.
主机,以及docker信息如下:
机器的CUDA信息:
接下来对照nvidia-docker安装方法,安装nvidia-docker.
docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。所以docker容器并不直接支持Nvidia GPU。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。
nvidia-docker是一个可以使用GPU的docker,nvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现的还是在docker的启动命令上携带一些必要的参数。
安装成功之后,安装上面的示例,我们可以看到GPU卡的信息:
下面首先安装ubuntu14以及对应的cuda7.5(需要和主机上面的CUDA一致), cudnn3,devel(可以编译使用CUDA的工具)
docker pull nvidia/cuda:7.5-cudnn3-devel-ubuntu14.04
安装成功之后:
运行容器并验证:
github上面的CTPN 的docker安装,在我的机器上面是不行的,由于要兼容CRNN,因此先对其做了修改:
FROM nvidia/cuda:7.5-cudnn3-devel-ubuntu14.04
MAINTAINER xiongyu <haluoluo@qq.com>
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
wget \
zip \
unzip \
libatlas-base-dev \
libboost-all-dev \
libgflags-dev \
libgoogle-glog-dev \
libhdf5-serial-dev \
libleveldb-dev \
liblmdb-dev \
libopencv-dev \
libprotobuf-dev \
libsnappy-dev \
protobuf-compiler \
python-dev \
python-numpy \
python-pip \
python-setuptools \
python-scipy \
python-opencv && \
rm -rf /var/lib/apt/lists/*
ENV CTPN_ROOT=/opt/ctpn
WORKDIR $CTPN_ROOT
RUN git clone --depth 1 https://github.com/tianzhi0549/CTPN.git
WORKDIR $CTPN_ROOT/CTPN/caffe
# Missing "packaging" package
RUN pip install --upgrade pip
RUN pip install packaging
# -i use tsinghua source for speedup install
RUN cd python && for req in $(cat requirements.txt) pydot; do pip install $req -i https://pypi.tuna.tsinghua.edu.cn/simple/; done && cd ..
WORKDIR $CTPN_ROOT/CTPN/caffe
RUN cp Makefile.config.example Makefile.config
RUN apt-get update && apt-get install -y --no-install-recommends \
vim
RUN mkdir build && cd build && \
cmake -DUSE_CUDNN=1 .. && \
WITH_PYTHON_LAYER=1 make -j"$(nproc)" && make pycaffe
# Set the environment variables so that the paths are correctly configured
ENV PYCAFFE_ROOT $CTPN_ROOT/CTPN/caffe/python
ENV PYTHONPATH $PYCAFFE_ROOT:$PYTHONPATH
ENV PATH $CTPN_ROOT/CTPN/caffe/build/tools:$PYCAFFE_ROOT:$PATH
RUN echo "$CTPN_ROOT/CTPN/caffe/build/lib" >> /etc/ld.so.conf.d/caffe.conf && ldconfig
# To make sure the python layer builds - Need to figure out a cleaner way to do this.
RUN cp $CTPN_ROOT/CTPN/src/layers/* $CTPN_ROOT/CTPN/caffe/src/caffe/layers/
RUN cp $CTPN_ROOT/CTPN/src/*.py $CTPN_ROOT/CTPN/caffe/src/caffe/
RUN cp -r $CTPN_ROOT/CTPN/src/utils $CTPN_ROOT/CTPN/caffe/src/caffe/
WORKDIR $CTPN_ROOT/CTPN
RUN make
上面的docker安装文件是对原有的docker做了部分修改.
安装成功之后,挂载模型文件运行:
docker run -ti --rm \-v/data/services/xy_text_rec/CTPN/models/ctpn_trained_model.caffemodel:/opt/ctpn/CTPN/models/ctpn_trained_model.caffemodel --runtime=nvidia ctpn
最终的运行结果如下(这里只是展示没有关闭cv2的display):
来源:CSDN
作者:FishBear_move_on
链接:https://blog.csdn.net/haluoluo211/article/details/79122286