美文网首页我爱编程
Ubuntu下安装Tensorflow手记

Ubuntu下安装Tensorflow手记

作者: cgnail | 来源:发表于2017-07-02 00:03 被阅读0次

    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的主目录下。

    相关文章

      网友评论

        本文标题:Ubuntu下安装Tensorflow手记

        本文链接:https://www.haomeiwen.com/subject/qgagcxtx.html