背景
最近实验室要参加一个目标检测的比赛,这段时间一直在跑ssd模型,最开始根据作者给的文档成功编译后,可以在VOC数据集上进行训练。由于要用比赛官方的数据集,因此做了几天的数据集,然后拿自己的数据集训练的时候,出现了以下报错:Check failed: a <= b (0 vs. -1.192093-07)

去网上搜了相关的解决方法,全都是说把math_functions.cpp第250行注释掉,重新编译,这种方案一看就不靠谱,而且也没人说个所以然,但是还是抱着试一试的心态照做了,果然又出现了新的bug。查了几天的资料也没找到解决方案,一开始我怀疑可能是我的数据集做的有问题,然后我又重新在VOC数据集上训练,结果会出现同样的问题,联想到前两天实验室服务器重装了系统,然后cuda从8.0换到了9.1版本,会不会是这个原因导致了现在的报错呢?但是因为实验室服务器是大家共用的,把cuda改回到8.0版本可能给其他人带来困扰,刚好实验室有其他同学在搞nvidia docker,干脆直接用nvidia docker来跑模型,就不用考虑环境问题了。

什么是nvidia docker
介绍nvidia docker之前,首先要了解什么是docker。

Docker 是一个开源的应用容器引擎,基于 GO语言并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,可以实现虚拟化。

Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。并且传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

这里可以将容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间可以建立通信机制。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少。

关于Docker更详细的介绍,请参照几张图帮你理解docker基本原理及快速入门,感觉介绍的很不错

docker一般服务于基于cpu 的应用,而我们的深度学习模型是跑在gpu上面的,因此需要用nvidia docker。nvidia docker的运行需要基于一定的硬件环境,需要安装nvidia driver,docker容器本身并不支持nvidia gpu。最开始的解决方法是在容器内部安装nvidia driver,然后通过设置相应的设备参数来启动container,但是这样做带来一个弊端就是可能导致image无法共享,因为宿主机的driver的版本必须完全匹配容器内的driver版本,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的初衷。nvidia docker实际上是一个docker plugin,它在docker上做了一层封装,对docker进行调用,类似一个守护进程,发现宿主机驱动文件以及gpu 设备,并且将这些挂载到来自docker守护进程的请求中,以此来支持docker gpu的使用。

安装docker
GPU driver安装
nvidia官网下载安装对应型号的显卡驱动:链接
如果安装成功,在终端中输入 lspci | grep -i nvidia ,会显示自己的NVIDIA GPU版本信息

CUDA安装
实验室服务器是ubuntu 18.04版本,可以直接sudo apt install nvidia-cuda-toolkit安装

docker安装
安装必要的一些系统工具
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
1
安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
 
写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
 
更新并安装 docker-ce
sudo apt-get -y update
sudo apt-get -y install docker-ce
 
验证
sudo service docker status             #或者sudo systemctl status service.docker 检查Docker服务的状态 
sudo docker run hello-world            #测试Docker安装是否成功

nvidia-docker安装
如果之前安装过docker1.0版本,需要先删掉该版本和之前创建的容器
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
1
2
添加代码仓库
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
 
安装docker 2
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
1
2
测试
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
1
安装过程中遇到的问题
网上有的教程会设置阿里云加速器,是因为官方Docker Hub网络速度较慢,所以使用阿里云提供的Docker Hub,然后需要配置阿里云加速器。具体步骤如下:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’ 

   “registry-mirrors”: [“https://fird1mfg.mirror.aliyuncs.com“] 

EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
 
结果我在重启docker服务的时候,产生了如下报错:

docker.service - LSB: Create lightweight, portable, self-sufficient containers
Loaded: loaded (/etc/init.d/docker; generated)
Active: failed (Result: exit-code) since Wed 2018-09-26 10:11:16 CST; 28s ago
Docs: man:systemd-sysv-generator(8)
Process: 18639 ExecStart=/etc/init.d/docker start (code=exited, status=1/FAILULURE)
Main PID: 15621 (code=exited, status=1/FAILURE)

9月 26 10:11:16 archlab-X10DRG systemd[1]: Starting LSB: Create lightweight, portable, self-sufficient containers....
9月 26 10:11:16 archlab-X10DRG docker[18639]:  * /usr/bin/dockerd not present or not executable
9月 26 10:11:16 archlab-X10DRG systemd[1]: docker.service: Control process exited, code=exited status=1
9月 26 10:11:16 archlab-X10DRG systemd[1]: docker.service: Failed with result 'exit-code'.
9月 26 10:11:16 archlab-X10DRG systemd[1]: Failed to start LSB: Create lightweight, portable, self-sufficient containers
 
根绝报错的第二行,发现是dockerd除了问题,dockerd是docker的守护进程,现在提示不存在或不可用,然后我执行了sudo dockerd,打印出了以下报错信息

unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character ‘h’ after object key

这说明docker的配置文件除了问题,打开daemon.json文件,果然发现刚才设置阿里云加速器的时候,写入的语句有问题,应该是我直接复制粘贴导致的问题,改正之后docker服务可以正常启动了。

用nvidia docker进行训练
拉取镜像(这里拉取了阿里云的一个镜像,里面自带了编译好的caffe,不过由于在实验室的宿主机上已经有编译好的caffe,可以直接将宿主机的目录挂载到容器中,这个后面有说)
sudo nvidia-docker pull registry.cn-hangzhou.aliyuncs.com/docker_learning_aliyun/caffe:v1
1
查看拉取的镜像信息
sudo nvidia-docker images
1

利用拉取的镜像启动容器,并把宿主机的caffe目录挂载到容器上
sudo nvidia-docker run -it –v $CAFFE_ROOT:/workspace 4e33(镜像id前4位即可)/bin/bash
1
这样就启动了一个容器,并且把caffe目录挂载到了容器的/workspace下。这样操作的好处是,训练完的数据可以直接存放在宿主机,省略了从容器中拷贝的繁琐步骤。

剩下的就是将caffe模型跑起来等待结果就可以了。

Deepo:几乎包含所有主流深度学习框架的Docker镜像相关推荐

  1. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  2. 主流深度学习框架对比

    深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe.Keras.CNTK.Torch7.MXNet.Leaf.Theano.DeepLearning4 ...

  3. 2017深度学习最新报告及8大主流深度学习框架超详细对比(内含PPT)

    2017深度学习最新报告(PPT) ​ 深度学习领军人物 Yoshua Bengio 主导的蒙特利尔大学深度学习暑期学校目前"深度学习"部分的报告已经全部结束. 本年度作报告的学术 ...

  4. 从TensorFlow到DL4J——主流深度学习框架对比分析

    从TensorFlow到DL4J--主流深度学习框架对比分析 2022年2月22日 极链AI云 官网地址 点击注册 更多AI小知识,关注<极链AI云>公众号 文章目录 从TensorFlo ...

  5. DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介、多个方向比较、案例应用之详细攻略

    DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介.多个方向比较.案例应用之详细攻略 目录 深 ...

  6. TensorFlow与主流深度学习框架对比

    引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年 ...

  7. 人脸口罩检测现开源PyTorch、TensorFlow、MXNet等全部五大主流深度学习框架模型和代码...

    号外!号外! 现在,AIZOO开源PyTorch.TensorFlow.MXNet.Keras和Caffe五大主流深度学习框架的人脸检测模型和代码啦! 先附上Github链接为敬. https://g ...

  8. [人工智能-深度学习-1]:主流深度学习框架比较、排名

    作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing 本文网址:https://blog.csdn.net/HiWangWenBing/article ...

  9. AI - 主流深度学习框架简介

    主流深度学习框架 框架发展历程 Google - TensorFlow Google - Keras BVLC - Caffe/Caffe2 Facebook - PyTorch DMLC - MXN ...

  10. 8种主流深度学习框架介绍

    导读:近几年随着深度学习算法的发展,出现了许多深度学习框架.这些框架各有所长,各具特色.常用的开源框架有TensorFlow.Keras.Caffe.PyTorch.Theano.CNTK.MXNet ...

最新文章

  1. 卷积神经网络(CNN)实现CIFAR100类别分类
  2. android ios 上传图片到服务器,.net 接收ios, android的上传图片
  3. python自学书籍顺序-【经验分享】自学Python的学习顺序!附学习资料
  4. mysql提取数字_Mysql中实现提取字符串中的数字的自定义函数分享
  5. linux 不关机添加硬盘,完美解决Ubuntu Linux关机异响[SATA硬盘]
  6. php swoole实现定时任务,Swoole实现任务定时自动化调度详解,来学习下
  7. hdu 4193(单调队列)
  8. Windows10 【系统周期表】【系统下载表】【大型软件表】
  9. TCP/IP协议--ARP协议(有了IP地址为什么还需要ARP协议)
  10. 用Markup Validation Service进行网页的W3C标准语法验证(c#)
  11. pixhawk学习笔记---创建新的应用程序
  12. 推理集 —— 现象与观察
  13. 揭秘《虚拟化与云计算》
  14. 2018-2019-1 20189204《Linux内核原理与分析》第一周作业
  15. 剑指offer python版 剪绳子
  16. 他们连忙跟了上去ZuL1VsLa5X67XOI
  17. 【转】Myeclipse2017破解:成功解决me Trial expired 0 days ago mgeclipse It's now time to buy the best IDE for y
  18. mtk平台耳机检测流程记录
  19. 怎么把系统桌面设置到D盘
  20. 应用计算机怎么弹ink,Win7系统打开计算机管理提示computer management.Ink的解决方法教程[多图]...

热门文章

  1. 转换到coff期间_“fatal error lnk1123 转换到coff期间失败”的解决方法
  2. Mac打开终端自动运行命令
  3. 上次来杭州,已经六年了。。
  4. java long型时间戳_深入理解java long 存储时间戳
  5. php ppt read_PHP如何读取PPT?
  6. word每行的末尾箭头怎么去掉_如何将word中箭头去掉 word中的箭头怎么去掉
  7. Java开发的发展前景和未来规划方向
  8. 微软产品内部协议大公开
  9. Python练习题——快乐数字
  10. IT码农哥放弃50万年薪:辞职卖咖喱凉皮