在Windows7上通过Dao安装Tensorflow-(综合已有资料和自己调试经验的总结)

来源:互联网 发布:php数据库教程 编辑:程序博客网 时间:2024/06/01 11:53

“谷歌”+“深度学习”,两个标签让2015年12月才由谷歌开源的深度学习工具TensorFlow在其发布之后就迅速地成为了全球最为炙手可热的开源项目,2016年4月,开源的TensorFlow又支持了分布式特性,向着生产环境下的应用更进一步。作为机器学习研究的新锐开源工具,不感受一下怎么行呢?所谓万事开头难,搭建一个能够完美支持TensorFlow的集群环境,便是第一步。

目前网上安装Tensorflow的介绍很多,但是很多都不适合国内直接使用,因为绿坝防火墙,大家都懂得。有些博主分享了很好的在国内使用的配置经验,但是却不全,本文综合了身在国外无防火墙的大牛的经验,也借鉴了国内通过安装Dao镜像实现Tensorflow牛人的实战经验,特此奉上。由于CSDN所有图片需要单独上传,本文中我只单独上传了最重要的一部分图片,更多图文信息,参考我的原文,可以在百度文库免费浏览,传送门如下:

http://wenku.baidu.com/view/86858e1f998fcc22bdd10d99


1 Docker是什么?

借用Docker官网最大的一行字。

Docker allows you to package an application with all of itsdependencies into a standardized unit for software development.

从功能上讲,Docker也可以理解为一种虚拟化的方案,可以通过构建包含不同软件的镜像,来达到快速部署开发环境的目的。

更多的Docker理解推荐阅读10张图带你深入理解Docker容器和镜像

2 安装Docker

要在Windows上运行Docker,首先需要下载和安装DockerToolbox。顺便奉上Docker Windows文档,更喜欢官方文档的话可以看这里,也可以按照本文的步骤继续。

2.1 确认系统版本

首先确认自己的系统是WIN 7或更新的64位系统,且需要支持硬件虚拟化技术。

Win 8及以上查看方法奔出就不做介绍了。

Win 7查看方法

Win 7 运行Microsoft®Hardware-Assisted Virtualization Detection Tool这一工具执行检查。

完成之后就可以继续下一步了。

2.2 安装Docker Toolbox

http://get.daocloud.io/#install-docker-for-mac-windows中选择“下载 Docker Toolbox” (请勿选择“下载 Docker for Windows”,这个版本只能安装在win10下)。

安装过程会安装Docker的各个组件和Oracle VirtualBox,因为Docker需要依赖Linux内核的一些特性,因此Mac和Windows都需要在机器上运行一个小型的Linux系统作为Host系统。如果已经安装过VirtualBox的最新版本,则无需重新安装。

自行选择安装路径,如果已经安装过Git也可以去掉该工具的勾选,VirtualBox也是一样,其它可一路Next。

安装没有什么好讲的,一直下一步就可以了。安装完后,会在桌面生成3个图标。

运行时,请选择“DockerQuickstart Terminal”

2.3 配置Docker及DaoCloud加速器

安装完成后,建议先配置一个环境变量MACHINE_STORAGE_PATH,来自定义虚拟机保存的位置,因为之后下载的镜像越来越多,都是放在虚拟机的虚拟磁盘文件中,虚拟磁盘文件会越来越大,放在默认的C盘用户目录下可能会在以后造成一些麻烦,参考下图,设置为任意你喜欢的位置。


之后开始配置DaoCloud加速器。注:为什么要配置加速器,因为Docker很多资源都被墙了,所以要借助国内的这个DaoCloud镜像加速网站,首先,双击进入Docker(也可以使用Windows下的CMD控制台),第一次进入会比较长时间,因为需要很多配置。然后运行以下命令,其中的 参数default是我的虚拟系统名:

docker-machine start defaultdocker-machine ssh defaultsudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=http://1e5aa912.m.daocloud.io|g" /var/lib/boot2docker/profileexit docker-machinerestart default

其中参数http://1e5aa912.m.daocloud.io就是windows系统下的Dao加速器,详见打开https://www.daocloud.io/mirror#accelerator-doc,在“配置Docker加速器”下有不同操作系统的配置介绍。

2.4 安装DaoCloud Toolbox

安装DaoCloud Toolbox是为了能使用 dao 命令

首先,要到https://dashboard.daocloud.io/注册账号,并登陆。

在https://dashboard.daocloud.io/选择“我的集群” --> 选择“添加主机”-->选择“我已有一台主机|windows” -->选择“安装好了”,进入第2步“安装主机监控程序“。依次输入下图中的两行指令:

docker-machine ssh defaultcurl–sSL https://get.daocloud.io/daomonit/install.sh| sh -s 572ff4b0fa855b84c2672de0efee4ffc3b6ff2e3

安装监控程序成功后,在“我的集群”->“自有集群”里面会出现你本地的主机

2.5 安装TensorFlow

输入命令:

dao pull tensorflow/tensorflow:0.10.0

命令来安装tensorflow

这条命令根据网络环境执行时间不定,我的话大概跑了1个小时。执行完这句命令后,tensorflow就算安装完成了。

注意:dao命令可能会自己先更新一些tool set,所以需要等待它更新完,才能下载tensorflow。整个安装过程极为拼人品,之前安装了3次均告失败,总有一个包下载不下来,但老天不负有心人,第四次居然奇迹般的成功了,这就是人品!

安装完成后,输入命令:

docker run –it tensorflow/tensorflow bash

这样我们就启动了镜像,并进入了熟悉的bash界面,选项-i用于保持STDIN在当前的窗口上,-t用于分配一个pesudo-tty,两个选项使得当前的窗口可以像一个linux的bash一样运行,丝毫没有违和感。第一个参数指定了使用的镜像,第二个参数指定了启动这个镜像后启用的命令,用bash启动方便我们开始第一次的探索。如果windows系统上面已经安装了Python的软件, 可按照如下操作体验第一个TensorFlow程序:

root@ec9bfd276082:/# uname -aLinux ec9bfd276082 4.4.8-boot2docker #1 SMP Mon Apr 25 21:57:27 UTC 2016 x86_64 x86_64 x86_64GNU/Linuxroot@ec9bfd276082:/# ls /bin dev home lib64 mnt opt root <span style="background-color: rgb(255, 255, 0);">run_jupyter.sh</span> srv tmp var boot etc lib medianotebooks proc run sbin sysusrroot@ec9bfd276082:/# pythonPython 2.7.6 (default, Jun 222015, 17:58:13) [GCC 4.8.2] on linux2Type "help", "copyright", "credits"or "license"formore information.>>> import tensorflow as tf>>> hello = tf.constant('Hello, TensorFlow!')>>> sess =tf.Session()>>> sess.run(hello)'Hello, TensorFlow!'>>> a = tf.constant(10)>>> b = tf.constant(32)>>> sess.run(a+b)42>>> 

注意到/目录下的run_jupyter.sh,这事实上是当前版本tensorflow启动的默认命令,也就是说,如果我们在启动镜像时没有指定bash,就会默认运行这个脚本,这与一些稍早一些版本的tensorflow不同,许多教程中也还没有提到,可能会造成困惑,读者可以尝试一下docker run -it tensorflow/tensorflow,它会启动一个notebook的服务,运行在本地的8888端口上,但这样就想从windows的浏览器上打开notebook是不行的,这与docker本身的机制和运行在虚拟上两个原因有关,如果读者现在就想看到notebook,可参考文章后面设置部分。

2.6 配置自己的快速启动窗口

回顾一下上面的过程,要将一个Windows的CMD窗口变为一个运行特定容器的窗口,需要3步。

a)   启动虚拟机

b)  配置虚拟机对应的环境变量(经过检测最新版本的docker会自动设置这一步)

c)   运行镜像

下面我自己用的一个启动脚本,需要的话仅需修改相应的machine-name,然后将脚本保存为my-start.bat,放在toolbox安装目录下。之后右键my-start.bat发送到桌面快捷方式,按代码下的图配置该快捷方式,/K参数可以使bat运行完之后不自动关闭。这样,需要时双击运行就可以获得一个新的可运行镜像的CMD窗口。

@ECHO off SET machine-name=default ECHO Init... docker-machine start %machine-name% ECHO Configuring Environment... FOR /F "tokens=*" %%i IN ('docker-machine env %machine-name%') DO %%i ECHO Init Finished.

2.7 完成更多必要配置

上面我们完成了镜像从下载到启动的过程,但在将docker用作开发环境之前,还有一些很有必要的配置工作要做。

2.7.1 端口转发

我们的容器运行在一个小的linux虚拟机上,而虚拟机又运行在Windows系统的VirtualBox上,自然的,运行在容器上的服务不能再Windows上打开浏览器直接访问。端口转发就是要解决这个问题,共有两步:

a.建立Windows和虚拟机之间的端口转发

可以通过VirtualBox的管理界面完成,如图,然后重启虚拟机。


b.配置虚拟机和容器之间的端口转发

使用-p选项

docker run -it -p 8888:8888 tensorflow/tensorflow

键入上面这条命令之后打开浏览器,访问localhost:8888,看到运行在容器中的notebook服务了吧

2.7.2 磁盘映射

磁盘映射是非常有用的一步配置,可以将Windows上的磁盘直接映射到容器中,这样在Windows上开发代码,直接在容器中运行,避免了写完复制的大麻烦。磁盘映射的处理方法与端口转发类似,磁盘的映射关系需要完成Windwos到虚拟机,虚拟机到容器的两步配置,请跟随下面3个步骤:

a.建立Windows和虚拟机之间的磁盘映射

打开虚拟机的设置页面后,在共享文件夹中设置你想要共享的文件夹和它的名称,如图,重启虚拟机。

b.在虚拟机中挂载磁盘

这一步要用到刚才设置的名称,我这里就是docker。

mkdir -p /home/docker/datamount -t vboxsf -o uid=1000,gid=50 docker /home/docker/data
到这里,我们在Windows中所做的修改就可以实时地反映到虚拟机中了。这里可能会提示mount命令需要root权限,则输入: sudo -i 命令切换为root用户(在boot2docker中无root密码)

c. 建立虚拟机和容器之间的磁盘映射

使用-v选项,建立两个目录的映射关系

docker run -it-v /home/docker/data:/data tensorflow/tensorflow bash

现在, 试试在Windows的共享文件夹中添加一个python的helloworld.py程序,然后在dockerpython/data/hello.py试试,结果如下,和之前运行的结果一样:

2.7.3 配置启动脚本

我们上面用docker-machine创建的虚拟机,它的大部分目录在重启之后都会复原,除了/mnt/sda1,这个目录也就是虚拟机的虚拟磁盘文件disk.vmdk所挂载的位置,我们可以修改里面的/mnt/sda1/var/lib/boot2docker/profile文件,在文件最后添加我们自定义的启动命令,比如说添加前面的磁盘映射,就是在profile文件最后加上下面这两句。测试中/mnt/文件夹下为空,所以先创建各个目录:

mkdir  /mnt/sda1/var/lib/boot2docker/

之后进入到boot2docker文件夹,并创建文件prifile:

touch profile

在使用命令vi profile打开该文件并输入以下两行信息,之后关闭文件保存。

mkdir -p /home/docker/datamount -t vboxsf -o uid=1000,gid=50 docker /home/docker/data

这样每次虚拟机启动就会完成磁盘的挂载了。

3 最后,一定要感谢以下博主无私分享的安装调试经验和他们辛勤分享的知识

1.    参考来源http://blog.csdn.net/neilron/article/details/51387161

2.    http://blog.csdn.net/vincent2610/article/details/52451090

1 0