Ubuntu下安装Tensorflow手记

Tensorflow.org在墙的那一边,如果用ss的话,需要打开全局模式才能访问。

安装Ubuntu

  1. 安装u盘启动时黑屏、出错,或没有grub菜单的话,需要启动时按下ESC或Shift,然后编辑grub启动项,在有“---”的那一行的最后加nomodeset

  2. 分区的时候/boot已经不再需要了,而要分配一个/efi-sys-part,500M差不多,如果不保存很多内核镜像的话。/swap按内存的1.5倍分配,超过10G的话区别就不太大了。

  3. 安装完毕重启,如果还是黑屏,则需要编辑/etc/default/grub文件,在最后加nomodeset。保存后执行update-grub更新。

  4. 更新源的时候记得关闭ipv6,不然很慢很慢。编辑/etc/sysctl.confg,并重启服务sysctl

  5. 显卡、网卡都和内核版本有关,不要乱升级内核。r8169网卡的解决方案是sudo apt-get install r8168-dkms

  6. 开samba共享,需要sudo touch /etc/samba/smbpasswdsudo smbpasswd -a your_username

  7. python执行时遇到No module named _markerlib/pkg_resources之类,执行easy_install distribute

安装Nvidia GTX 1080 Ti显卡驱动

感觉16.04在驱动方面,无论是网卡还是显卡,bug挺多。重装了18.04后好很多,尤其执行ubuntu-drivers devices命令会提示你装什么版本的显卡驱动。

安装Tensorflow

virtualenv环境安装

  1. 官方文档推荐使用virtualenv环境下安装。第一步安装python环境时,不要安装python-pip,因为ubuntu修改了pip。改了啥不知道,反正用python-pip包会导致步骤2出错。解决方法是用python官方的pip:
      $ wget https://bootstrap.pypa.io/get-pip.py
      $ python ./get-pip.py
  1. https://github.com/google/seq2seq 安装seq2seq。据说这个版本比tensorflow自带的要新。测试
     $ python -m unittest seq2seq.test.pipeline_test

的时候会提示“ImportError: cannot import name contrib”,这是由于这个测试用例只能用在tensorflow-1.[01].x的版本,是的,高了低了都不行……。解决办法是用:

    $ pip install --upgrade <$url_to_binary.whl>

安装正确版本,如tensorflow-1.0.0-cp27-xxx版本(cp27代表python 2.7),去https://pypi.python.org/simple/tensorflow/ 上找你感兴趣的版本就可以(pypi上的package历史版本都可以用同样的办法找)。

  1. 接下来运行测试用例还有可能提示没有装python-tk包,apt-get就可以。如果你和我一样是ssh到远程机器安装的,还会遇到“TclError: no display name and no $DISPLAY environment variable”错误。解决办法是
       export DISPLAY=:0.0

或者ssh的时候加上“-X”参数。

  1. 如果运行tensorflow时给出类似“The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations”的warning,那么可以下载源代码编译tensorflow,以获得更快的执行速度(据说能提高到4x的速度)。或者在执行的脚本里加上下面的代码强制忽略这些警告:
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
    import tensorflow as tf

Docker安装

根据Killian的建议,比较理想的工作方式是在GPU服务器上用Docker封装tensorflow环境做测试,本机使用一个tensorflow-cpu的Docker容器做开发,两台机器通过ssh相连。

  1. docker pull的时候注意,tensorflow在docker上的源已经不是 gcr.io/tensorflow/tensorflow 了,而是 tensorflow/tensorflow
  2. docker run镜像的时候要注意参数。-v挂载共享文件夹的时候,host目录必须是绝对路径,相对路径的话docker会自动在host的/var/lib/docker/volumes/目录下新建一个目录作为本地目录。此外,最麻烦的是X窗口的配置,除了在host下指明$DISPLAY外,需要给Xauthority配置文件合理的权限(参考docker-x11-client-via-ssh)。于是,能跑通测试用例出现OK的启动参数为
    docker run --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -p 8888:8888 tensorflow/tensorflow

这只是个简单的版本,你还应该挂载上开发共享目录等。当你从本地登录到远程的Docker测试环境时,记得用ssh -X your_server

GPU support

目前是Linux专享的功能,值得尝试。方法是使用nvidia-docker来启动上面的tensorflow的image。为此首先要安装NVidia显卡驱动,然后是CUDA工具包,最后安装nvidia-docker。详细流程在docker-hub的tensorflow页面有记载,唯一需要注意的是,安装完cuda工具包之后的环境配置:

$ echo 'export PATH=/usr/local/cuda-<VERSION>/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-<VERSION>/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ sudo echo "/usr/local/cuda-<VERSION>/lib64" >> /etc/ld.so.conf

尤其最后一项,不加上cuda根本起不来。

Mac下的Docker安装

参考slobo的帖子,记得先brew安装socat和xquartz。

Windows 10下的安装(到处是坑)

  1. Python的version只能是3.5
  2. 如果用gpu,要把CUDA和CUDNN的路径加到windows的环境变量PATH里,不然tensorflow报错
  3. 无法用docker+nvidia-docker的方式使用gpu,因为后者不支持windows。也即,想在windows下用gpu,只能native安装
  4. seq2seq中的tf.contrib等方法不支持windows

从源代码编译tensorflow

  1. 检查机器是否支持tensorflow with GPU:lspci |grep VGA,寻找NVidia的字样吧,没有就是没法用了。

  2. 下载tensorflow源代码,选择合适版本。比如我checkout了v1.0.0

    $ git clone https://github.com/tensorflow/tensorflow
    $ cd tensorflow
    $ git checkout v1.0.0
  1. 安装bazel,tensorflow所使用的编译管理工具。我下载了二进制安装包bazel-0.5.2-installer-linux-x86_64.sh,版本0.5.2,太老的使用时会出现某些包找不到的错误。执行后把可执行文件copy到/usr/local/bin下,省的配环境变量了。

  2. 进入tensorflow源码目录,执行./configure,等终端提示“Configuration finished”,即可进行下一步

  3. 因为没有GPU支持,所以执行

      $ bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma \
         --copt=-mfpmath=both --copt=-msse4.2 -k     \
         //tensorflow/tools/pip_package:build_pip_package

构建pip的安装包。其中-mavx-msse4.2等参数打开了对AVX和SSE4.2指令的支持(参考这里)。到出现

    Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
  bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 1411.419s, Critical Path: 81.12s

的提示时,表示构建完毕。这一步实际是生成了一个构建pip安装包的脚本。为了得到安装包还需要执行

    $ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

一个字母都不能错……

  1. 一切顺利得话,会在/tmp/tensorflow_pkg下得到类似 “tensorflow-1.0.0-cp27-cp27mu-linux_x86_64.whl”的pip安装包。如果和我一样想在virtualenv里使用,进入virtualenv环境,然后pip uninstall tensorflow删除已有的安装包,再安装上一步构建的安装包
   $ pip install /tmp/tensorflow_pkg/tensorflow-1.0.0-cp27-cp27mu-linux_x86_64.whl
  1. 安装完毕。使用时记得进入virtualenv后,cd到virtualenv的主目录下。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容