docker基础教程:https://legacy.gitbook.com/book/yeasy/docker_practice/details,经过这个教程能够了解docker基本概念html
docker安装:参见个人另外一篇博客:http://www.cnblogs.com/deepllz/p/8933073.html git
为何使用docker?docker
缘由是:经过docker运行tensorflow-gpu容器能够避免复杂的环境的配置,好比cuda。具体环境配置有多复杂参考:本机安装gpu版本的tf安装参见个人另外一篇博客:http://www.cnblogs.com/deepllz/p/8920420.html.json
而在ubuntu上运行docker tensorflow-gpu镜像,仅仅须要安装nvidia驱动便可,幸运的是通常经过软件更新器(software & updates→ Additional Drivers)便可顺利安装显卡驱动,用Linux命令也能够顺利安装.ubuntu
1.下载镜像bash
docker tensorflow的镜像官网为https://hub.docker.com/r/tensorflow/tensorflow/,首先按照官方教程安装nvidia-docker2,以后的tensorflow-gpu镜像都须要nvidia-docker来启动,或者docker run --runtime=nvidia,固然这样就足够用了,若是你想用docker取代nvidia-docker能够修改/etc/docker/daemon.json为以下所示,即在第一行加入"default-runtime": "nvidia",这样就能够直接用docker取代nvidia-docker了。学习
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }
安装配置成功以后选择Tags标签能够看到不一样tag的tensorflow镜像,官方实例代码选择的tag为latest-gpu的镜像,能够根据本身的须要下载镜像,博主选择的是1.8.0-devel-gpu-py3的镜像,这个镜像包含tensorflow-gpu=1.8.0版本,而且包含bazel等开发环境能够编译tensorflow的源代码。即此镜像既能够用于训练模型,又能够用来学习tensorflow源码。执行:spa
docker pull tensorflow/tensorflow:1.8.0-devel-gpu-py3
下载成功后执行:htm
docker images
能够查看下载的镜像,以下图所示:blog
能够看到有一个TAG名为1.8.0-devel-gpu-py3的镜像,证实下载成功。
2.启动容器
若是在前面配置了"default-runtime": "nvidia",那么执行:
docker run --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
没有配置则能够执行:
nvidia-docker run --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
或者执行:
docker run --runtime=nvidia --rm -it -v /home/zzh/:/root/tensorflow --name zzh tensorflow/tensorflow:1.8.0-devel-gpu-py3
其中docker run的参数含义以下:
(1)--rm 退出容器清除数据
(2)-it 启动交互式终端
(3)-v 挂在目录
(4)--name 容器名称
具体细节参考官方文档:https://docs.docker.com/engine/reference/run/
3.在容器中训练cifar10
cifar10教程:https://www.tensorflow.org/tutorials/deep_cnn
在本机某一路径下建立好项目,执行脚本后能够看到训练的速度,以下图所示:
能够看到,step 0到200的时间是13.52秒。
将这个目录挂在到容器中,在容器中训练,速度以下图所示:
能够看到,step 0到200的时间是12.39秒(快了的缘由是容器中的是tensorflow1.8,而本机因为cuda版本的缘由安装的是tensorflow1.4)
4.其余docker经常使用命令
(1)经过[docker commit CONTAINER_ID newImageName]保存对镜像的修改,CONTAINER_ID能够经过docker ps查看
(2)经过[docker save -o 文件名 镜像名] 将镜像存储至磁盘,例如docker save -o tensorflow.tar tensorflow/tensorflow:1.8.0-devel-gpu-py3
(3)经过[docker load --input 文件名] 从磁盘导入镜像,例如docker load --input tensorflow.tar
(4)容器一旦退出里面的信息就都会被清除,若不想保存修改又不想丢失信息,那么能够CTRL+P+Q让容器在后台运行,而后经过docker attach CONTAINER_ID从新链接进容器