为了用GPU加速TENSORFLOW,笔者折腾了两天,终于给我的双显卡笔记本安装上了CUDA,期间电脑几次进不了桌面,说实话,我的内心是崩溃的。
尝试了.run文件和直接apt-get安装,最后使用的方法是apt。在此将过程写下来,免得小白入坑。
笔者的环境:
操作系统:
Ubuntu 16.04 LTS desktop amd64
显卡和CPU:
Intel i7-7500 Nvidia-Geforce-940MX
安装过程:
一:检查你的显卡是否支持CUDA,参考网址
/cuda/cuda-installation-guide-linux/index.html#verify-you-have-cuda-enabled-system
二:这个教程采用apt网络安装方式
升级系统
apt-get update && apt-get upgrade
下载并安装VitualGL (/projects/virtualgl/files/)
dpkg -i virtualgl*.deb
下载并安装CUDA8.0 ( /cuda-downloads )
建议通过如下方式
安装依赖.
apt-get install linux-headers-$(uname -r)apt-get install freeglut3-dev libxmu-dev libpcap-dev
编辑 .bashrc 加入PATH。下面变量的设置可能要根据你的环境而定
export PATH=$PATH:/opt/VirtualGL/binexport PATH=$PATH:/usr/local/cuda/bin
安装bumblebee-nvidia 和 primus.它支持在Intel和Nvidia显卡间自动分配功率
apt-get install bumblebee-nvidia primus
修改bumblebee config文件。 让bumblebee我们使用了 NVIDIA 驱动. 下面变量的设置可能要根据你的系统做修改.
sudo nano +22 /etc/bumblebee/bumblebee.conf
添加:
[bumblebeed]ServerGroup=bumblebeeTurnCardOffAtExit=falseNoEcoModeOverride=falseDriver=nvidiaXorgConfDir=/etc/bumblebee/xorg.conf.dBridge=autoPrimusLibraryPath=/usr/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/primusAllowFallbackToIGC=falseDriver=nvidia[driver-nvidia]KernelDriver=nvidiaPMMethod=autoLibraryPath=/usr/lib/nvidia-367:/usr/lib32/nvidia-367XorgModulePath=/usr/lib/xorg,/usr/lib/xorg/modulesXorgConfFile=/etc/bumblebee/xorg.conf.nvidiaDriver=nouveau[driver-nouveau]KernelDriver=nouveauPMMethod=autoXorgConfFile=/etc/bumblebee/xorg.conf.nouveau
运行下面的命令并记录你的显卡的 PCI 地址.
$ lspci | egrep 'VGA|3D'00:02.0 VGA compatible controller: Intel Corporation Device 5916 (rev 02)01:00.0 3D controller: NVIDIA Corporation Device 179c (rev a2)
编辑xorg.conf.nvidia 文件,加入你的显卡的 PCI 地址(我的是01:00.0) . 在 “ServerLayout”部分下更新显卡PCI信息
sudo nano /etc/bumblebee/xorg.conf.nvidia
加入:
Section "ServerLayout"Identifier "Layout0"Option"AutoAddDevices" "false"Option"AutoAddGPU" "false"BusID "PCI:01:00.0"
重启系统.
sudo shutdown -r now
三:后期工作
设置环境变量
编辑bashrc加入
#set cuda environmentexport PATH=$PATH:/opt/VirtualGL/binexport PATH=$PATH:/usr/local/cuda/binexport LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
验证CUDA的安装
$ nvcc --versionnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) - NVIDIA CorporationBuilt on Tue_Jan_10_13:22:03_CST_Cuda compilation tools, release 8.0, V8.0.61$ nvidia-smiTue Apr 4 21:26:01 +-----------------------------------------------------------------------------+| NVIDIA-SMI 375.39 Driver Version: 375.39||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||===============================+======================+======================|| 0 GeForce 940MX Off | 0000:01:00.0Off | N/A || N/A 41C P0 N/A / N/A | 325MiB / 2002MiB |24%Default |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes:GPU Memory || GPU PID Type Process name Usage||=============================================================================|| 01258 G /usr/lib/xorg/Xorg 191MiB || 01977 G compiz 125MiB || 02295 G fcitx-qimpanel8MiB |+-----------------------------------------------------------------------------+
编译范例代码:
参考官网:
/cuda/cuda-installation-guide-linux/index.html#post-installation-actions
$ cuda-install-samples-8.0.61.sh <你要将范例代码放置的文件夹>
进入代码目录后执行make,编译完成后
之后在bin目录下执行deviceQuery 和 bandwidthTest。结果为Pass则OK。
四: 问题解决方案
编译报错找不到-lnvcuvid解决办法:
查看你的驱动版本号:
$ cat /proc/driver/nvidia/versionNVRM version: NVIDIA UNIX x86_64 Kernel Module 375.39 Tue Jan 31 20:47:00 PST GCC version: gcc version 5.4.0 0609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
进入报错的那个目录,找findglib.mk这个文件。
打开它可以发现有一项
UBUNTU_PKG_NAME = "nvidia-367"
它将库目录硬编码了。将其改成安装的nvidia驱动对应版本号即可,这里是375。
因驱动问题进不了桌面解决办法:
按ctrl+alt+F1,在文字界面登录后,卸载nvidia驱动
sudo apt-get remove --purge nvidia-*
参考网址:
/cuda/cuda-installation-guide-linux/index.html#environment-setup
/questions/799184/how-can-i-install-cuda-on-ubuntu-16-04
/default/topic/769578/cuda-6-5-cannot-find-lnvcuvid/