【新手向】GPU服务器使用docker配置faster rcnn(tensorflow-gpu版)运行环境

假如想象 提交于 2019-12-04 08:30:09

一个晚上1.5倍速刷完docker的一系列教学视频尚硅谷_Docker核心技术(基础篇)

再加上看过一本docker的书,算是基本知道了docker的一些操作

使用的是endernewton的faster rcnn,使用的是tensorflow框架

在GPU服务器上训练和测试大致也是【docker部署运行环境】【文件上传】【编译运行】这些操作

 

(一)为什么使用docker

其实docker更大的用处应该是用来提供一个完整的运行环境分发给需要运行该程序的其他人,这个在教学视频中讲得很清楚。而这里使用docker,个人理解是因为GPU服务器上多个用户之间运行环境的隔离,大家相安无事和谐共处,自己的程序只在自己的容器里运行,需要什么软件包什么依赖不会影响全局。

(二)前情提要

1. 在GPU服务器上注册好个人用户,并加入了docker用户组(不用sudo即可使用docker)

2. 服务器上已经装好适配GPU和显存的驱动,nvidia-docker

(三)容器创建

1. 登录服务器

2. 使用nvidia-docker拉取一个Tensorflow-gpu-py3的镜像并创建一个交互式容器,命名为tf

docker run --runtime=nvidia -it --name tf daocloud.io/daocloud/tensorflow:1.9.0-gpu-py3 /bin/bash

注:

(1)--runtime=nvidia表示运行时使用nvidia-docker,这是tensorflow-gpu版本的要求

(2)-it 表示创建的docker容器是一个交互式容器,最后的/bin/bash就是启动命令行,使操作就像本地终端(与之相对是守护式容器-d参数),各个命令参数的用法可到docker的文档里查询。

(3)--name <name>是给该容器进行命名,此处命名为tf

(4)daocloud.io/daocloud/tensorflow:1.9.0-gpu-py3 是使用到的镜像,冒号前是镜像名,冒号后是标签。首先会检查本地是否有该镜像,若没有则从镜像源拉取后创建容器。若此处镜像名改为tensorflow/tensorflow:1.9.0-gpu-py3会从默认的docker hub中拉取镜像,国外源速度较慢,因此这里使用国内这个源,需要使用不同版本也可以在这里查询。此处tensorflow版本为1.9.0,gpu,使用python3

3. 此时会直接以root权限进入该容器的root目录,之后就可以进行其他软件包依赖的安装了

附:关于容器的相关基本操作

# 查看容器
docker ps #查看运行中的
docker ps -a #查看全部,正在运行的+历史运行过的(-l)
docker ps -q #只显示ID,可用于批量删除

# 退出容器
exit #停止退出,停止退出之后容器中的所有配置数据都会删除
ctrl+P+Q #不停止退出

# 重新启动已有的容器
docker restart 容器ID  
docker attach 容器ID   #再回车一次显示进入到容器中的命令行

# 停止容器
docker stop ID/name #慢慢停止
docker kill ID/name #强制停止

#删除容器
docker rm (-f) ID/name   # -f表示强制,如果删除已经停止使用的容器则不用-f

4. 因为程序用的python3,容器内部安装了python2和3,但默认版本为2,故先将默认python版本改成python3,参考此处

 

(四)文件上传

因为源代码中提供的dockerfile并不完整,有些地方需要试错,所以还是先将文件上传到服务器,再复制到容器中或者挂载一个容器的数据卷进行文件共享。

这里暂时先用复制文件的方式:(此处在服务器用户端命令行操作,可以用ctrl+P+Q暂时退出刚刚创建的容器)

docker cp 服务器上的目录 {container ID}:容器内的目录

这个目录没有什么强求,按需即可

(五)安装依赖

(以下操作都是在容器内执行,使用restart和attach重新进入容器)

参考原来的dockerfile(源代码中docker目录下),安装以下安装包

1. 首先把apt-get源换成国内源,再开始安装以下安装包,参考此处更换为阿里源

2.开始安装各种包

apt-get install vim python3-pip python3-dev python3-tk
apt-get install libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev
apt-get install cmake time

注:相较源代码,python全换成python3,没有安装wget,git(这两个是为了下载.whl和coco数据库,但因为这里不需要用到什么.whl安装东西,coco数据接口在上传的文件中已经有了,若一切从头来的话请参考原作者这里的安装),也没有安装python-opencv, cython(这个用pip安装),多了一个time(程序中计时用)

3. 用pip安装python模块

    包括scipy, matplotlib, PyYAML, numpy==1.14, easydict, opencv-python, Cython

pip install image scipy matplotlib PyYAML numpy==1.14 easydict opencv-python Cython -i https://pypi.douban.com/simple/ --trusted-host pypi.douban.com

注1:-i https://pypi.douban.com/simple/ 使用国内豆瓣源加速,--trusted-host pypi.douban.com添加信任,两者缺一不可。

注2:这里少了个tensorflow-gpu(因为创建的容器就包含了),多了个Cython和opencv-python(原本使用apt-get安装但实际运行中会提示没有此模块),numpy指定用1.14(是因为之前训练的时候1.15会报错,具体是什么也忘了,查了很久莫名其妙换回1.14就好了,如果去掉==1.14没有这个困扰也行)

 

基本上到这里,环境基本就配置完成了。可以将这个容器的新添配置固化成一个镜像保存下来。

#先离开容器或者使用另一个终端打开服务器
docker commit 容器ID 镜像名:标签  # 将该容器提交为一个镜像并打上标签
docker images  # 查看服务器上的本地镜像

(六)编译配置文件

一个是进入lib,make clean后make

一个是进入data/coco/PythonAPI里make

注:因为使用的是python3,需要先将这两个目录下的setup.py中的python改成python3,否则编译出来的文件会使用python2的模块,但我们安装都是安在python3里,会找不到。

(七)训练模型,测试模型

容器内部,程序主目录下运行训练脚本或测试脚本,可以指定使用某个GPU(默认为0)

./experiments/scripts/train_faster_rcnn.sh 1 pascol_voc vgg16

注:分别是<运行脚本文件> <GPU_ID> <使用数据集> <使用网络模型>

此时会打印一堆信息然后开始训练。

可以用另一个终端登录服务器,使用此语句查看GPU的实时信息:

watch -n 10 nvidia-smi

注: -n 10 表示每10秒更新一次数据,nvidia-smi是查看GPU的运行信息,表头释义参考此处

以上。

运行结果同样可以从容器里复制到服务器里再下载均可。

之后再尝试将环境配置写进dockerfile里,尝试数据卷挂载操作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!