Mac上搭建一个干净的TensorFlow环境

Posted on 2017-02-19 in 机器学习 by yucongchen

作为一个小前端,最近想折腾下深度学习方面的东西,这不 TensorFlow 刚发布了 1.0 嘛。于是就想在我的 Mac Book 上跑一跑。

MacOS 非常好,自带了 Python 2.7,这是 TensorFlow 必备条件之一,但是我并不想污染系统环境,而且直接装在系统上,也不方便备份。

搞个虚拟机看起来还是必要的,同时我还希望这个环境是我可以在 Mac 上写代码,在虚拟机中运行。这时我发现了 Vagrant 这个工具。

Vagrant

Vagrant 不是虚拟机,而是一个虚拟机管理和配置工具,需要和虚拟机配合使用。Vagrant 内置了 VirtualBox 支持,刚好我电脑上装了,如果你用的是 Parallels Desktop 的话,需要另外安装扩展。

安装

Vagrant 安装十分简单,直接在官网下载安装即可,如果你没有 VirtualBox,需要去 VirtualBox 官网下载对应软件。

装好之后,现建立一个目录,作为我们的虚拟机的工程目录。

mkdir vagrant_project
cd vagrant_project

然后初始化,并选择相应的虚拟机系统,这里我选择了最爱的 ubuntu。

vagrant init ubuntu/trusty64

ubuntu/trusty64 相当于一个虚拟机镜像,Vagrant 里面叫 box,可以在这里 找到更多镜像。

执行了上面那句,仅仅会生成一个 Vagrantfile,里面会指定要使用的镜像。

执行 vagrant up 会启动这个环境,如果这个镜像没被下载的话,会去下载。这里建议挂个科学上网,感觉还挺快。

之后,环境是起来了,但是我们还在外面,需要 ssh 进去。运行命令 vagrant ssh 即可。

微信公众号:程序员的诗和远方

一般 Linux 系统都是自带 Python 的,需要确认下版本:

微信公众号:程序员的诗和远方

是我们要的 Python 2.7,接下来安装 TensorFlow。

安装 TensorFlow

安装 TensorFlow 其实是非常简单的,只要使用 Python 的包管理工具 Pip 即可,偏偏 Pip 是 Python 3 之后才自带的。Pip官网 提供了一个非常方便的 get-pip.py 脚本来让我们快速安装 pip。 从官网上下载那个脚本,然后可以利用 Vagrant 的 share 功能方便的弄进虚拟机里面。

Vagrant 的 share 功能是这样的,我们刚才建立的虚拟机工程目录会同步到虚拟机根目录下的 vagrant 目录。

微信公众号:程序员的诗和远方

我们只要把 get-pip.py 脚本拷贝到我们最开始建立的工程目录里面即可。

之后运行命令 sudo python get-pip.py 即可安装 Pip。

这里要另外指出,TensorFlow 中文社区的安装文档中写的命令是 $ pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl 这样会安装到 0.5 版本的 TensorFlow,建议还是用 sudo pip install tensorflow 来安装最新版本。

跑了上面那条命令,看着 TensorFlow 包下载进度一步步更新,我的内心是激动的。这时,一片红字占据了我的屏幕:

微信公众号:程序员的诗和远方

别的我没看到,就看到最后一句 MemoryError,内存错误?这可是程序员最害怕的错误之一啊。

网上查了下,原来是 pip 的缓存机制尝试在文件缓存之前读取整个文件到内存中,这会在一些限制内存的环境中报错。

只需要改一下命令:

sudo pip --no-cache-dir install tensorflow

即可。

装完之后我们来跑个 Hello World 的例子。

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print sess.run(hello)

首先通过 tf.constant 创建一个常量,然后启动 TensorFlow 的 Session, 在虚拟机中跑一下:

微信公众号:程序员的诗和远方

算是跑通了,环境搭建完毕,可以开始学习了。

Vagrant 常用命令

Vagrant 命令 作用
vagrant init 初始化 vagrant 环境
vagrant up 启动虚拟机
vagrant ssh ssh 进虚拟机
vagrant status 查看虚拟机状态
vagrant halt 关闭虚拟机
vagrant reload 重新载入配置文件
vagrant snapshot 管理虚拟机快照
vagrant suspend 暂停虚拟机
vagrant resume 恢复虚拟机
vagrant destroy 暂停并删除虚拟机

实际上,用 VirtualBox 还是比较占用硬盘空间的,对于用 256G Mac Book 的我来说有点奢侈,看了下 Vagrant 也支持 Docker,用 Docker 的话应该能节省不少空间。

文中虽然是用 TensorFlow 来做例子,其它的也是适用的。搭建一个干净的环境,做各种实验,不要影响电脑原本的环境,还是挺重要的。

碎碎念

记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。

微信公众号:程序员的诗和远方

公众号ID : MonkeyCoder-Life

程序员的诗和远方

参考

http://www.imbeta.cn/an-zhuang-pip.html#an-zhuang-pip

http://stackoverflow.com/questions/29466663/memory-error-while-using-pip-install-matplotlib

https://imququ.com/post/vagrantup.html

http://tensorfly.cn/

https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2