很多朋友在给Ubuntu(Linux)安装Cuda时,参考官方安装步骤导致安装出错:
wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run
在sudo sh后会出现如下错误:
Installation failed. See log at /var/log/cuda-installer.log for details.
#输入:
cat /var/log/cuda-installer.log
#最后显示
...前面省略
[ERROR]: Install of driver component failed.
[ERROR]: Install of 455.32.00 failed, quitting
原因是没有禁用nouveau本地图形驱动。根据网上的各种博客,和官方说明,总结出如下比较稳定的Cuda安装方法,可供参考。
检查是否安装gcc
gcc -v
# 若没有安装,则输入,直接把包括gcc在内很多开发工具包一同安装
sudo apt-get install build-essential
若存在老版本的Cuda,先卸载
sudo apt-get remove --purge nvidia*
#或者尝试
cuda-uninstaller #卸载cuda,位置在/usr/local/cuda-xx.x/bin。xx为之前安装的版本
nvidia-uninstaller #卸载驱动
禁用nouveau
在新建一个文本/etc/modprobe.d/blacklist-nouveau.conf(如通过sudo vim /etc/modprobe.d/blacklist-nouveau.conf) ,在文件中输入(vim输入i后即可进入编辑模式):
blacklist nouveau
options nouveau modeset=0
保存(vim按Esc推出编辑模式,输入:wq保存退出)。输入如下指令重新生成内核:
sudo update-initramfs -u
注意,不要急着重启电脑reboot!!!然后官方给出如下说明“Reboot into runlevel 3 by temporarily adding the number "3" and the word "nomodeset" to the end of the system's kernel boot parameters”。如果你不会操作的话,最好配置一下openssh-server!不然重启黑屏就可能啥也干不了了。
给Linux电脑配置openssh-server
由于在禁用nouveau并重启电脑后,屏幕可能无法正常显示(亲测有的电脑可以进入tty命令行界面,有的屏幕完全没显示,但是远程连接通常是可以的。所以在关机前要配好ssh:
sudo apt install openssh-server
安装好后输入ifconfig查看IP地址,测试能够被成功远程后再关机。如果没安装ifconfig,可输入
sudo apt install net-tools
重启电脑
输入如下指令重启电脑
sudo reboot
重启电脑后,如果屏幕能显示,则按Ctrl+Alt+(F1 or F2 or ... F6)切换至tty命令行模式。如果屏幕不能显示,也是可以通过远程ssh连接上的。
关闭图形界面:
sudo service lightdm stop # 有些可能不需要
终于可以开始安装了,找到对应路径文件,输入:
sudo sh cuda_*_linux.run
然后正常安装就好了。
配置环境变量
打开sudo vim /etc/bash.bashrc(如果没有权限可在~/.bashrc内加入,在末尾加入(注意cuda版本)
export PATH=/usr/local/cuda-11.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
和前面一样,保存退出。然后输入source /etc/bash.bashrc。测试nvdia-smi或者cuda --version确认安装好了。确认好后,最好对应上面的打开图形界面服务:
sudo service lightdm start # 有些可能不需要
再次sudo reboot重启电脑。正常情况就能够恢复正常显示了~
测试用例安装
可以考虑cd到目录/usr/local/cuda/samples/0_Simple/simplePrintf,其他测试工程也一样。然后sudo make即可编译,然后运行编译出的文件即可。