欢迎转载,请支持原创,保留原文链接:http://blog.ilibrary.me

前段时间做自动摘要和自动翻译,跑深度学习的算法,在亚马逊g2上搭过一次 ubuntu 16.04 + CUDA 8.0 + cuDNN 5.1, 走了不少弯路. 亚马逊的g2太贵,4GB显卡版本0.7美元一小时,一个月就够买一台新机器了,并且4G显存的机器跑自动摘要跑着跑着就挂了,内存不够用,所以配了一台设备, GTX 1080 Ti, Intel I7, 32G 内存。 没有想到第二次搭建居然又反反复复搞了几天才搞定。

这次最主要的问题是UEFI secure boot, 没有在启动的时候改启动设置禁止secure boot, 导致第三方驱动不允许加载,系统无法正常识别显卡,浪费了不少时间。

硬件配置

  1. ASUS GTX 1080Ti, 11g公版。
  2. ASUS Z170 A主板
  3. 内存 2*16G
  4. 128 SSD + 4T HDD
  5. CPU i7 6700K

安装cuda-toolkit

  1. 安装纯净的ubuntu server 16.04 amd64
    • 安装的时候勾上open-ssh,其它的都不用勾。
    • 不装desktop, 装了desktop以后装显卡驱动会很麻烦, 因为ubuntu上面安装n卡驱动需要把图形界面禁掉以后接入tty才好安装, 相当麻烦。
  2. sudo apt-get install build-essential, 安装基础编译环境
  3. 安装cuda。 这一步的说明来自于 https://developer.nvidia.com/cuda-downloads

    1. 下载网络安装包 wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
    2. sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
    3. sudo apt-get update
    4. sudo apt-get install cuda
    5. shutdown -r now
    6. 非常重要: 在UEFI界面,记住用非安全模式启动,否则会无法加载nvidia显卡,抛错误:insecure mode boot
    7. cuda_home变量设置:

      echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
      echo 'export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"' >> ~/.bashrc
      
    8. CUDA安装完毕
  4. sample 安装
    1. 用CUDA自带的脚本就可以安装sample了,前面的步骤跑完以后可以直接敲命令cuda-install-samples-8.0.sh <dir>, 这是cuda自带的脚本,会把样例代码拷贝到你指定的目录下去,然后你就可以在该目录make编译所有的samples了,直接敲击命令make进行编译.
  5. 手动装nvidia显卡驱动(这一步要留心第6步,把secure boot禁掉)
    1. sudo apt-get purge nvidia-*
    2. sudo add-apt-repository ppa:graphics-drivers/ppa
    3. sudo apt-get update
    4. sudo apt-get install nvidia-381
    5. reboot
    6. 系统提示是否修改secure boot, 按任意键修改。

安装 cuDNN

注意,cuDNN需要注册NVIDIA的会员(免费)才能下载,无法在远程机器上用curl或者wget下载. 如果真要在远程机器上下载,可以尝试用ssh -XC user@remotehost, 把X11 forward到本地,然后开启firefox下载。X11 forward是不需要desktop支持的,相当方便。

  1. 下载cuDNN 5.1, 不要下载6.0, 我用6.0遇到过问题,cuda和cudnn版本不兼容。

  2. 安装cuDNN

         tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz
         cd cuda
         sudo cp lib64/* /usr/local/cuda/lib64/
         sudo cp include/* /usr/local/cuda/include/
    
  3. cuDNN完成

Tensorflow 安装 native pip

  1. 安装: pip install tensorflow-gpu
  2. 检测环境是否安装成功:

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

辅助脚本

  1. dpkg -l | grep nvidia # 查看装了哪些包`
  2. lspci | grep -i nvidia # 查看N卡驱动是否加载了
  3. nvidia-smi # 查看nvidi gpu 负载信息
  4. lsmod | grep nouveau # 检测nouveau 显示驱动是否有加载`
  5. cat /proc/driver/nvidia/version # 检测nvidia驱动是否正常加载
  6. dmesg | grep -i nvidia # 开机信息
  7. hostname #查看机器host name
  8. ssh-copy-id user@hostname.local #安装ssh key到远程服务器
  9. cuda-install-samples-8.0.sh . # 安装cuda samples, 这个脚本是cuda toolkit自带的
  10. Ctrl + Alt + F1 # 机器启动以后进入tty界面

跑分数据

neural-style 跑分

和amazon g2 基础套餐相比,gtx 1080Ti速度大概是它的十倍,跑neural style速度

  1. macbook pro 2015 mid, i7 2.5 GHz, 大概用了200分钟
  2. amazon g2 $0.7/hour 套餐,大概用了15分钟
  3. 1080Ti, 接近一分钟.

nbody 跑分

nbody 是nvidia samples 里面自带的一个程序,编译sample code就可以在bin目录下找到该程序,可以做非常简单的性能测试.

~/NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody$ make
~/NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody$ ../../bin/x86_64/linux/release/nbody -benchmark -numbodies=256000 -device=0
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
	-fullscreen       (run n-body simulation in fullscreen mode)
	-fp64             (use double precision floating point values for simulation)
	-hostmem          (stores simulation data in host memory)
	-benchmark        (run benchmark to measure performance)
	-numbodies=<N>    (number of bodies (>= 1) to run in simulation)
	-device=<d>       (where d=0,1,2.... for the CUDA device to use)
	-numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
	-compare          (compares simulation results running once on the default GPU and once on the CPU)
	-cpu              (run n-body simulation on the CPU)
	-tipsy=<file.bin> (load a tipsy model file for simulation)

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
gpuDeviceInit() CUDA Device [0]: "GeForce GTX 1080 Ti
> Compute 6.1 CUDA device: [GeForce GTX 1080 Ti]
number of bodies = 256000
256000 bodies, total time for 10 iterations: 1743.828 ms
= 375.817 billion interactions per second
= 7516.338 single-precision GFLOP/s at 20 flops per interaction

错误解决

  1. 运行tensorflow脚本时抛错误: ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
    1. 保证安装了cuDNN 5.1, 如果你装的是cuDNN 6.0, 请重装cuDNN 5.1
    2. 把cuda_home变量设置正确,参考3.7
  2. 系统启动以后屏幕黑屏,不进入登入界面。具体原因未知, 可能是因为未装desktop。解决办法就是Ctrl + Alt + F1, 进入命令行tty登录界面。

参考

  1. Installing Nvidia, Cuda, CuDNN, TensorFlow and Keras
  2. install tensorflow with GPU
  3. NVIDIA Cuda installation guide for linux
  4. cuDNN download