看这个标题,就是要在docker里处理视频做计算……
目录
1 从DockerHub下载你需要的cuda和cudnn版本对应的镜像。
首先,必要的服务器配置说明:
Ubuntu 18.04
gpu(已经安装好驱动)
docker
接下来是搞事情阶段:
【我曾完美找到了安装好nvidia 的镜像,安装好tensorflow1.14的镜像和安装好vnc的镜像,如果能组合到一起多好多简单啊。。。是我想多了。只能手动一层层盖楼】
1 从DockerHub下载你需要的cuda和cudnn版本对应的镜像。
(当初搞docker就是因为服务器的cuda和cudnn版本各种问题,本来好好的cuda10.0和cudnn7.6.4组合,多好的组合啊!然鹅代码不这么觉得。所以就找cuda10.0.130;cudnn7.6.3.30。)
在dockerHub找到nvidia的仓库,找tag是10.0-cudnn7-runtime-ubuntu16.04 的那个。
docker pull nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04
2 安装tensorflow1.14和各种python包。
当初找到的tensorflow官方镜像 ,里面有cuda10.0;cudnn7.4.1.5-1,但是只有tensorflow及其依赖包,算了。
docker pull tensorflow/tensorflow:1.14.0-gpu-py3
那么就开始我的手写dockerfile操作了
RUN APT_INSTALL="apt-get install -y --no-install-recommends" && \
PIP_INSTALL="python3 -m pip --no-cache-dir install --upgrade" && \
rm -rf /var/lib/apt/lists/* \
/etc/apt/sources.list.d/cuda.list \
/etc/apt/sources.list.d/nvidia-ml.list && \
apt-get update && \
# ==================================================================
# tools
# ------------------------------------------------------------------
DEBIAN_FRONTEND=noninteractive $APT_INSTALL \
build-essential \
libsm6 \
libxext6 \
libxrender-dev \
libglib2.0-0 \
libssl-dev && \
cd /root/cmake && \
./bootstrap && \
make -j"$(nproc)" install && \
# ==================================================================
# python
# ------------------------------------------------------------------
DEBIAN_FRONTEND=noninteractive $APT_INSTALL \
software-properties-common \
&& \
add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && \
DEBIAN_FRONTEND=noninteractive $APT_INSTALL \
python3.6 \
python3.6-dev \
python3-distutils-extra \
python3-venv python3-setuptools \
protobuf-compiler python-pil python-lxml python-tk \
&& \
# get-pip.py is downloaded
# python3.6 ~/get-pip.py && \
ln -s /usr/bin/python3.6 /usr/local/bin/python3 && \
ln -s /usr/bin/python3.6 /usr/local/bin/python && \
cd /root/ && \
tar -zxvf pip-19.3.1.tar.gz && \
cd pip-19.3.1 && \
python3 setup.py install && \
pip install /root/numpy-1.16.5-cp36-cp36m-manylinux1_x86_64.whl && \
pip install /root/scipy-1.2.2-cp36-cp36m-manylinux1_x86_64.whl && \
pip install /root/opencv_python-4.1.1.26-cp36-cp36m-manylinux1_x86_64.whl && \
pip install matplotlib==3.1.1 -i https://mirrors.aliyun.com/pypi/simple/ && \
pip install /root/Pillow-6.2.0-cp36-cp36m-manylinux1_x86_64.whl && \
pip install /root/Cython-0.29.13-cp36-cp36m-manylinux1_x86_64.whl && \
# ==================================================================
# tensorflow
# ------------------------------------------------------------------
pip install tensorflow-gpu==1.14.0 -i https://mirrors.aliyun.com/pypi/simple/ && \
# ==================================================================
# config & cleanup
# ------------------------------------------------------------------
ldconfig && \
apt-get clean && \
apt-get autoremove && \
rm -rf /var/lib/apt/lists/* /tmp/* /root/*
因为网速的原因,某些包我已经提前手动下载好,等着安装。不然老是build失败,太折磨人。比如cmake,pip,numpy等。
tensorflow的版本也不能随便写,和cuda,cudnn版本有对应关系的,详情见此:https://www.tensorflow.org/install/source#tested_build_configurations
这一段也是我从别人那复制过来,改了又改。如果有人看到原版欢迎留言,因为我忘了复制哪的==
3 安装vnc
仍旧先贴上别人的成品,网上有很多创建好的镜像,我就挑了一个dockerfile看起来很简单的,方便盖楼。https://github.com/tyson-swetnam/ubuntu-xfce-vnc
打开链接就能看到dockerfile的内容啦,这里就不贴出来了,根据自己的情况删删改改就能直接用,而且是一次成功!为大佬的dockerfile点赞。
END
TIPS
docker build时遇到的问题
问题背景:在dockerfile中修改了apt更新的源为aliyun,第一次build的时候没报这方面的问题,但是后续修改dockerfile再build的时候就开始报错“Temporary failure resolving 'mirrors.aliyun.com'”。
在dockerfile里改添加nameserver也没用。
经测试,在docker build后添加--network=host即可,参考自:https://www.v2ex.com/t/575898。
有知道具体原因的大佬欢迎留言,还望不吝赐教。
用docker run启动的时候,记得要加--runtime=nvidia,不然可能会识别不到gpu,导致报错。
写出来怎么这么短,唉……
等我整理一下把所有东西打个包放GitHub供起来。