Tensorflow.org在墙的那一边,如果用ss的话,需要打开全局模式才能访问。
安装Ubuntu
安装u盘启动时黑屏、出错,或没有grub菜单的话,需要启动时按下ESC或Shift,然后编辑grub启动项,在有“---”的那一行的最后加nomodeset
分区的时候/boot已经不再需要了,而要分配一个/efi-sys-part,500M差不多,如果不保存很多内核镜像的话。/swap按内存的1.5倍分配,超过10G的话区别就不太大了。
安装完毕重启,如果还是黑屏,则需要编辑/etc/default/grub文件,在最后加nomodeset。保存后执行update-grub更新。
更新源的时候记得关闭ipv6,不然很慢很慢。编辑/etc/sysctl.confg,并重启服务sysctl
显卡、网卡都和内核版本有关,不要乱升级内核。r8169网卡的解决方案是
sudo apt-get install r8168-dkms
开samba共享,需要
sudo touch /etc/samba/smbpasswd
和sudo smbpasswd -a your_username
python执行时遇到
No module named _markerlib/pkg_resources
之类,执行easy_install distribute
安装Nvidia GTX 1080 Ti显卡驱动
感觉16.04在驱动方面,无论是网卡还是显卡,bug挺多。重装了18.04后好很多,尤其执行ubuntu-drivers devices
命令会提示你装什么版本的显卡驱动。
安装Tensorflow
virtualenv环境安装
- 官方文档推荐使用virtualenv环境下安装。第一步安装python环境时,不要安装python-pip,因为ubuntu修改了pip。改了啥不知道,反正用python-pip包会导致步骤2出错。解决方法是用python官方的pip:
$ wget https://bootstrap.pypa.io/get-pip.py
$ python ./get-pip.py
- 去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历史版本都可以用同样的办法找)。
- 接下来运行测试用例还有可能提示没有装python-tk包,apt-get就可以。如果你和我一样是ssh到远程机器安装的,还会遇到“TclError: no display name and no $DISPLAY environment variable”错误。解决办法是
export DISPLAY=:0.0
或者ssh的时候加上“-X”参数。
- 如果运行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相连。
-
docker pull
的时候注意,tensorflow在docker上的源已经不是 gcr.io/tensorflow/tensorflow 了,而是 tensorflow/tensorflow -
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下的安装(到处是坑)
- Python的version只能是3.5
- 如果用gpu,要把CUDA和CUDNN的路径加到windows的环境变量PATH里,不然tensorflow报错
- 无法用docker+nvidia-docker的方式使用gpu,因为后者不支持windows。也即,想在windows下用gpu,只能native安装
- seq2seq中的tf.contrib等方法不支持windows
从源代码编译tensorflow
检查机器是否支持tensorflow with GPU:lspci |grep VGA,寻找NVidia的字样吧,没有就是没法用了。
下载tensorflow源代码,选择合适版本。比如我checkout了v1.0.0
$ git clone https://github.com/tensorflow/tensorflow
$ cd tensorflow
$ git checkout v1.0.0
安装bazel,tensorflow所使用的编译管理工具。我下载了二进制安装包bazel-0.5.2-installer-linux-x86_64.sh,版本0.5.2,太老的使用时会出现某些包找不到的错误。执行后把可执行文件copy到/usr/local/bin下,省的配环境变量了。
进入tensorflow源码目录,执行
./configure
,等终端提示“Configuration finished”,即可进行下一步因为没有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
一个字母都不能错……
- 一切顺利得话,会在
/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
- 安装完毕。使用时记得进入virtualenv后,cd到virtualenv的主目录下。