前段时间做自动摘要和自动翻译,跑深度学习的算法,在亚马逊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, 导致第三方驱动不允许加载,系统无法正常识别显卡,浪费了不少时间。
硬件配置
- ASUS GTX 1080Ti, 11g公版。
- ASUS Z170 A主板
- 内存 2*16G
- 128 SSD + 4T HDD
- CPU i7 6700K
安装cuda-toolkit
- 安装纯净的ubuntu server 16.04 amd64
- 安装的时候勾上open-ssh,其它的都不用勾。
- 不装desktop, 装了desktop以后装显卡驱动会很麻烦, 因为ubuntu上面安装n卡驱动需要把图形界面禁掉以后接入tty才好安装, 相当麻烦。
- sudo apt-get install build-essential, 安装基础编译环境
安装cuda。 这一步的说明来自于 https://developer.nvidia.com/cuda-downloads
- 下载网络安装包
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
shutdown -r now
- 非常重要: 在UEFI界面,记住用非安全模式启动,否则会无法加载nvidia显卡,抛错误:
insecure mode boot
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
- CUDA安装完毕
- 下载网络安装包
- sample 安装
- 用CUDA自带的脚本就可以安装sample了,前面的步骤跑完以后可以直接敲命令
cuda-install-samples-8.0.sh <dir>
, 这是cuda自带的脚本,会把样例代码拷贝到你指定的目录下去,然后你就可以在该目录make编译所有的samples了,直接敲击命令make
进行编译.
- 用CUDA自带的脚本就可以安装sample了,前面的步骤跑完以后可以直接敲命令
- 手动装nvidia显卡驱动(这一步要留心第6步,把secure boot禁掉)
- sudo apt-get purge nvidia-*
- sudo add-apt-repository ppa:graphics-drivers/ppa
- sudo apt-get update
- sudo apt-get install nvidia-381
- reboot
- 系统提示是否修改secure boot, 按任意键修改。
安装 cuDNN
注意,cuDNN需要注册NVIDIA的会员(免费)才能下载,无法在远程机器上用curl
或者wget
下载. 如果真要在远程机器上下载,可以尝试用ssh -XC user@remotehost
, 把X11 forward到本地,然后开启firefox下载。X11 forward是不需要desktop支持的,相当方便。
下载cuDNN 5.1, 不要下载6.0, 我用6.0遇到过问题,cuda和cudnn版本不兼容。
安装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/
cuDNN完成
Tensorflow 安装 native pip
- 安装: pip install tensorflow-gpu
检测环境是否安装成功:
>>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello))
辅助脚本
dpkg -l | grep nvidia # 查看装了哪些包
`lspci | grep -i nvidia # 查看N卡驱动是否加载了
nvidia-smi # 查看nvidi gpu 负载信息
lsmod | grep nouveau # 检测nouveau 显示驱动是否有加载
`cat /proc/driver/nvidia/version # 检测nvidia驱动是否正常加载
dmesg | grep -i nvidia # 开机信息
hostname #查看机器host name
ssh-copy-id [email protected] #安装ssh key到远程服务器
cuda-install-samples-8.0.sh . # 安装cuda samples, 这个脚本是cuda toolkit自带的
Ctrl + Alt + F1 # 机器启动以后进入tty界面
跑分数据
neural-style 跑分
和amazon g2 基础套餐相比,gtx 1080Ti速度大概是它的十倍,跑neural style速度
- macbook pro 2015 mid, i7 2.5 GHz, 大概用了200分钟
- amazon g2 $0.7/hour 套餐,大概用了15分钟
- 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
错误解决
- 运行tensorflow脚本时抛错误:
ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
- 保证安装了cuDNN 5.1, 如果你装的是cuDNN 6.0, 请重装cuDNN 5.1
- 把cuda_home变量设置正确,参考3.7
- 系统启动以后屏幕黑屏,不进入登入界面。具体原因未知, 可能是因为未装desktop。解决办法就是Ctrl + Alt + F1, 进入命令行tty登录界面。