系统为ubuntu 16.04.1 x64,具体参数如下:
1 | DISTRIB_ID=Ubuntu |
系统为Ubuntu 64位服务器版的最小化系统
安装Nvidia官网最新版本的CUDA 8(2016.12.19)
下面分别使用Nvidia官方手册中使用deb源的方式安装,和根据Nvidia提供的二进制包配合双显卡技术的方式安装。前者更新更方便,后者针对双显卡最方便。服务器系统推荐使用第一种方式安装,笔记本建议使用第二种方式,因为可以实现双显卡,集显更省电。
如果只是为了玩游戏需要配置Ubuntu下的Nvidia和intel双显卡,也可以直接跳到双显卡切换的配置部分
根据nvidia官方手册安装
该安装方法由于是在服务器系统下测试,并没有桌面环境,所以不保证安装配置完成之后依然能进入桌面环境。
安装准备
验证NVIDIA显卡
1 | lspci | grep -i nvidia |
看看是否有nvidia的显卡
查看linux系统信息
1 | uname -m && cat /etc/*release |
确保你的系统在nvidia官方的cuda支持列表中
安装gcc及g++
就是安装C++开发环境,因为CUDA是基于C/C++开发的,当然现在也支持很多其他语言
1 | sudo apt-get install gcc g++ |
安装linux kernel header及开发包
1 | sudo apt-get install linux-headers-$(uname -r) |
为了避免出现头文件相关的问题,推荐安装上build-essential:
1 | sudo apt-get install build-essential |
下载并安装CUDA
下载CUDA:
1 | wget --no-check-certificate https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb |
通过以下命令安装cuda源:
1 | sudo dpkg -i cuda-repo-ubuntu1604-8-0-local_8.0.44-1_amd64-deb |
如果是下载的local版本,实际上会在本地增加一个local源,指定为cuda的解压路径,如果是网络源,实际上会添加以下源:
1 | deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64 / |
更新包缓存:
1 | sudo apt-get update |
安装CUDA:
1 | sudo apt-get install cuda |
设置环境变量
在自己的.bashrc的最后添加以下代码
1 | export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} |
使用环境变量设置立即生效:
1 | source ~/.bashrc |
安装官方示例并验证环境
在些之前最后重启一下系统,以使驱动生效。
查看驱动等信息是否正常:
1 | cat /proc/driver/nvidia/version |
我这里的输出如下:
1 | NVRM version: NVIDIA UNIX x86_64 Kernel Module 367.57 Mon Oct 3 20:37:01 PDT 2016 |
如果上面的环境变量已经配置完成,则可以使用以下命令安装官方示例到用户根目录:
1 | cuda-install-samples-8.0.sh ~ |
进入刚安装的CUDA官方示例文件夹NVIDIA_CUDA-8.0_Samples运行make进行示例的编译。
如果没有问题的话,稍后会编译成功,编译完成之后会在目录NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
中生成deviceQuery
运行查询输出
1 | ./deviceQuery |
我这里的输出结果如下:
1 | ./deviceQuery Starting... |
只要最后输出中显示结果为PASS即表示安装完成
手动配置CUDA环境
安装显卡驱动并配置双显卡
对于桌面系统肯定希望安装nvidia显卡之后不会影响之前系统的正常使用,例如笔记本自带的intel显卡,和nvidia的显卡,此时可以通过bumblebee进行管理来切换双显卡。
可以通过ppa进行bumblebee安装。为了能够安装最新的nvidia显卡驱动,这里同样可以使用ppa来进行安装最新的显卡驱动。
首先删除系统中已经有的相关软件包:
1 | sudo apt-get purge nvidia* bumblebee* nouveau* |
安装Nvidia显卡驱动
安装显卡ppa并更新缓存:
1 | sudo add-apt-repository ppa:graphics-drivers/ppa |
可以添加后只更新一次缓存。
然后自己去nvidia官方查询你自己的显卡对应的linux下最新版本驱动的版本号,然后按如下替换安装nvidia显卡驱动所需要的包(可以通过Tab键补全的方式来安装最新版本的驱动):
1 | sudo apt install nvidia-375 nvidia-prime |
或者通过以下命令查看系统中所有可以安装的驱动:
1 | sudo ubuntu-drivers list |
然后运行以下命令生成nvidia的配置文件(有些系统可能并不需要):
1 | sudo nvidia-xconfig |
重启系统,如果安装成功,此时使用的应该就是nvidia的显卡。可以运行glxgears
来查看fps,如果提示没有该命令,就需要多安装一个包:sudo apt-get install mesa-utils
也可以通过命令:glxinfo | head
查看当前启用的是不是nvidia显卡
或者直接打开设置中的关于也可以查看当前使用的显卡
运行以下命令打开nvidia显卡配置程序:
1 | sudo nvidia-settings |
如果不考虑双显卡切换的问题,到这里就可以直接跳到CUDA安装部分了
如果执行上述命令有如下提示:
1 | ** Message: PRIME: No offloading required. Abort |
说明你的显卡不支持Nvidia的prime技术,或者说你显卡当前的驱动还不支持该技术,这样的话后面的双显卡切换就可以直接跳过了。
配置双显卡驱动切换
安装bumblebee的ppa并更新缓存:
1 | sudo add-apt-repository ppa:bumblebee/stable |
执行以下命令安装bumblebee以及相关包:
1 | sudo apt-get install primus nvidia-profiler nvidia-visual-profiler nvidia-prime nvidia-prime-applet bumblebee-nvidia |
重启系统之后应该就可以看到状态栏里面有个显卡切换的图标了
如果上述命令在更新包缓存时出现404,并且安装nvidia-prime-applet
时提示无法找到该包,则可以在/etc/apt/source.list.d/
中删除刚添加的这个源,换成以下源并安装他的prime-indicator:
1 | sudo add-apt-repository ppa:nilarimogard/webupd8 |
如果nvidia-settings
运行之后提示支持prime,也可以直接在这个里面的PRIME Profiles
进行显卡的切换,而不需要再安装那个indicator
安装cuda
安装cuda之前需要进行c++环境的安装,参见前面的内容
从官方下载cuda的二进制runfile文件,之所以使用这个文件安装也是为了避免安装的驱动破坏了之前已经配置好的驱动
1 | wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run |
然后执行以下命令进行安装:
1 | sudo sh cuda_8.0.44_linux.run |
注意安装过程中不要安装显卡驱动,其他根据需要按提示操作即可。
安装完成之后记得配置环境变量,跟上面一样,增加如下内容到.bashrc的最后:
1 | export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} |
然后:
1 | source ~/.bashrc |
不过runfile的官方安装结束之后会提示增加libs到ld.so.conf中。可以添加如下文件:/etc/ld.so.conf.d/cuda.conf
,内容为/usr/local/cuda-8.0/lib64
,然后运行:
1 | sudo ldconfig |
至此CUDA的显卡都已经安装完成,通过显卡切换程序将显卡切换为Nvidia显卡之后,即可像上面的验证过程一样,验证CUDA是否正常运行
常见问题
/sbin/ldconfig.real: /usr/lib/nvidia-384/libEGL.so.1 is not a symbolic link
解决方法是手动创建一个符号链接,或者使用root权限执行以下命令来进行:
然后再次手动运行sudo ldconfig
,发现已经没有那个错误提示了
1 |
|