Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动参考链接:Ubuntu18.04笔记本双显卡Nvidia驱动安装 Ubuntu16.04安装NVIDIA英伟达驱动教程及常见几种报错Error的解决方案 Ubuntu16.04,双显卡,GTX1060,安装NVIDIA显卡驱动 背景介绍国庆假期,闲来犯贱忽然想起了要给ASUS笔记本U303LNB来装个Nvidia的显卡驱动。然后,就有了后面的这一出记录。根据折腾结果,回来总结的内容,与实际发生的先后顺序有所不同。为update-initramfs安..

大家好,欢迎来到IT知识分享网。

参考链接:

  1. Ubuntu 18.04 笔记本双显卡 Nvidia 驱动安装
  2. Ubuntu 16.04 安装NVIDIA英伟达驱动教程 及常见几种报错Error的解决方案
  3. Ubuntu 16.04,双显卡,GTX1060,安装 NVIDIA 显卡驱动
  4. Ubuntu 16.04:安装nvidia驱动430的各种坑
  5. 重做Unbuntu 18.0.43 LTS系统 并为SLAM配置环境(完成本篇内容后!)

背景介绍

国庆假期,闲来犯贱忽然想起了要给 ASUS 笔记本 U303LNB 来装个Nvidia 的显卡驱动。然后,就有了后面的这一出记录。

根据折腾结果,回来总结的内容,与实际发生的先后顺序有所不同。

为 update-initramfs 安装各种依赖

按照网上提供的各种套路,在 sudo update-initramfs -u 期间冒出下面的提示,由于不明白对于成功安装Nvidia驱动会有什么不良后果,就开启了关于 update-initramfs 的各种依赖安装。

~$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.8.14-050814-generic
I: The initramfs will attempt to resume from /dev/dm-1
I: (/dev/mapper/ubuntu--vg-swap_1)
I: Set the RESUME variable to override this.

无奈的是,经过下面的一顿操作,甚至还升级和安装了最新的 ubuntu 内核还是无济于事,上面的情况仍然存在。

sudo apt install build-essential 
sudo apt install gcc 
sudo apt install make 
sudo apt install openssl 
sudo apt install pkg-config 
sudo apt install libssl-dev 
sudo apt install libncurses5-dev 
sudo apt install libc6-dev 
sudo apt install libelf-dev
sudo apt install bison
sudo apt install flex
sudo apt install linux-generic
sudo apt install dkms 
sudo apt install build-essential linux-headers-generic
sudo apt install build-essential xserver-xorg-dev pkg-config linux-headers-`uname -r`

0. Ubuntu18.04 内核升级

经过上述的一顿依赖安装操作,提示仍然存在,于是就想着升级 ubuntu的内核。

0.1 查看当前版本

 在终端输入以下命令并回车

    uname -sr

 可以发现当前内核为

    Linux 5.0.4-48-generic

0.2 查看目前最新的稳定内核

 访问 The Linux Kernel Archives, 网站上黄色按钮的版本为当前最新的稳定版本 v5.8.14

0.3 正式更新

在终端输入下列命令:

    wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.8.14/amd64/linux-headers-5.8.14-050814_5.8.14-050814.202010070730_all.deb
    wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.8.14/amd64/linux-image-unsigned-5.8.14-050814-generic_5.8.14-050814.202010070730_amd64.deb
    wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.8.14/amd64/linux-headers-5.8.14-050814-generic_5.8.14-050814.202010070730_amd64.deb
    wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.8.14/amd64/linux-modules-5.8.14-050814-generic_5.8.14-050814.202010070730_amd64.deb

也可以通过浏览器先下载好,然后放入同一个文件夹下。等待所有四个软件包都下载完成后,输入下述命令进行解压安装:

    sudo dpkg -i *.deb

提示成功后重启,输入 uname -sr 再进行查看。

1. 安装NVIDIA显卡驱动的准备工作

~$ lspci | grep controller
# 或者
~$ lshw -numeric -C display

开始显卡安装前,需要检查确认本机的显卡型号。华硕的 U303L 是双显卡配置:Intel HD Graphics 550 (rev 09) and Nvidia GM108M [GeForce 840M]。

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)
03:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)
~$ lshw -numeric -C display
WARNING: you should run this program as super-user.
  *-display                 
       description: VGA compatible controller
       product: HD Graphics 5500 [8086:1616]
       vendor: Intel Corporation [8086]
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 09
       width: 64 bits
       clock: 33MHz
       capabilities: vga_controller bus_master cap_list rom
       configuration: driver=i915 latency=0
       resources: irq:49 memory:f5000000-f5ffffff memory:d0000000-dfffffff ioport:f000(size=64) memory:c0000-dffff
  *-display
       description: 3D controller
       product: GM108M [GeForce 840M] [10DE:1341]
       vendor: NVIDIA Corporation [10DE]
       physical id: 0
       bus info: pci@0000:03:00.0
       version: a2
       width: 64 bits
       clock: 33MHz
       capabilities: bus_master cap_list rom
       configuration: driver=nouveau latency=0
       resources: irq:51 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff ioport:e000(size=128) memory:f7000000-f707ffff
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.

 

1.1 查看可安装的NVIDIA驱动列表

~$ ubuntu-drivers devices

看到的结果是这样的

== /sys/devices/pci0000:00/0000:00:1c.3/0000:02:00.0 ==
modalias : pci:v00008086d0000095Asv00008086sd00005100bc02sc80i00
vendor   : Intel Corporation
model    : Wireless 7265 (Dual Band Wireless-AC 7265)
manual_install: True
driver   : backport-iwlwifi-dkms - distro free

== /sys/devices/pci0000:00/0000:00:1c.4/0000:03:00.0 ==
modalias : pci:v000010DEd00001341sv00001043sd000012DFbc03sc02i00
vendor   : NVIDIA Corporation
model    : GM108M [GeForce 840M]
driver   : nvidia-driver-440-server - distro non-free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-435 - distro non-free
driver   : nvidia-driver-450 - distro non-free
driver   : nvidia-driver-450-server - distro non-free recommended
driver   : nvidia-340 - distro non-free
driver   : nvidia-driver-390 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

1.2 设置BIOS

根据网络信息,推荐双显卡机器在安装显卡前,推荐设置BIOS。

  • 设置Secure BOOT 为disable,不设置这一步,独显无法使用,不知道为什么,大坑。
  • 还可能在安装 NVIDIA 驱动时出现以下错误。
Error:Unable to load the 'nvidia-drm' kernel module
  • 一定要在安装驱动之前设置这一步,否则会出现黑屏,重复登陆这些怪事。

1.3 卸载所有安装的nvidia驱动

如果之前没安装过nvidia驱动,也可以不执行此步骤,但是推荐执行。

sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove xserver-xorg-video-nouveau

感觉上面这个卸载命令有些弱,推荐使用下面的这几步操作可以把 NVIDIA 驱动删除干净。

sudo apt purge nvidia-*
sudo apt purge xserver-xorg-video-nouveau
sudo apt autoremove
sudo apt nvidia-uninstall

如果以前是通过runfile安装的,还可以通过类似下面的命令卸载:

$ sudo ./NVIDIA-Linux-x86_64-430.64.run --uninstall

1.4 禁用nouveau驱动

nouveau是ubuntu系统自带的驱动程序,但是不适用于cuda,所以要舍弃掉。

sudo gedit /etc/modprobe.d/blacklist.conf

在文本最后添加

blacklist nouveau
options nouveau modeset=0
####
blacklist vga16fb
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
####
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

然后执行(让内核刷新),仍然出现《背景介绍》中所描述的提升,暂时忽略。

sudo update-initramfs -u

重启计算机

reboot

重启后使用命令检查当前nouveau是否工作。

lsmod | grep nouveau

若没有任何输出,表示禁用成功。顺便查看了一下 pci 控制器。

~$ lspci | grep controller
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)
00:04.0 Signal processing controller: Intel Corporation Broadwell-U Processor Thermal Subsystem (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.6 Signal processing controller: Intel Corporation Wildcat Point-LP Thermal Management Controller (rev 03)
02:00.0 Network controller: Intel Corporation Wireless 7265 (rev 59)
03:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)

2. 安装Nvidia Drivers

2.1 安装需要的依赖

sudo apt update
sudo apt install linux-generic
sudo apt install dkms build-essential 
sudo apt install linux-headers-generic
sudo apt install build-essential xserver-xorg-dev pkg-config linux-headers-`uname -r`

2.2 关闭界面

首先,Ctrl+Alt+F1进入命令提示符界面。然后,输入对应的username和passwd进入命令行,并输入下面的命令关闭图形界面

sudo service lightdm stop ###或者
sudo /etc/init.d/lightdm stop
  • 如果提示unit lightdm.service not loaded

    则先安装LightDm: 

sudo apt install lightdm
  • 安装完毕后跳出一个界面,选择 lightdm,再sudo service lightdm stop关闭界面。可以使用 Ctrl+Alt+F7 检验是否已经彻底关闭。

2.3 安装驱动

  • cd 到驱动所在文件夹 (最终成功安装 450.80.02 版本)
# 修改权限
sudo chmod a+x NVIDIA-Linux-x86_64-450.80.02.run  ### (否则没有访问权限,无法安装)

### 安装驱动
sudo sh NVIDIA-Linux-x86_64-450.80.02.run --no-x-check --no-nouveau-check --no-opengl-files  
## 或者
sudo ./NVIDIA-Linux-x86_64-450.80.02.run --no-x-check --no-nouveau-check --no-opengl-files

### 其中 ###
#–no-x-check 关闭X服务
#–no-nouveau-check 禁用nouveau
#–no-opengl-files 不安装OpenGL文件

或者通过添加 ubuntu 的源来进行安装。(没有尝试过)

# 添加驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-kernel-source-455 nvidia-settings nvidia-prime ## 没有成功
### 或者
sudo ubuntu-drivers autoinstall ### 没有成功
### 可以试一下这个
sudo apt install nvidia-driver-455
### 或者这个
sudo apt install nvidia-driver-450

在官网查看驱动版本

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

 

# 使用TAB键查看能安装的驱动版本号
$ sudo apt install nvidia-3 # 3后面加<TAB>以提示可以安装的内容
nvidia-304              nvidia-340-updates      nvidia-361
nvidia-304-dev          nvidia-340-updates-dev  nvidia-361-dev
nvidia-304-updates      nvidia-340-updates-uvm  nvidia-361-updates
nvidia-304-updates-dev  nvidia-340-uvm          nvidia-361-updates-dev
nvidia-331              nvidia-346              nvidia-367
nvidia-331-dev          nvidia-346-dev          nvidia-367-dev
nvidia-331-updates      nvidia-346-updates      nvidia-375
nvidia-331-updates-dev  nvidia-346-updates-dev  nvidia-375-dev
nvidia-331-updates-uvm  nvidia-352              nvidia-384
nvidia-331-uvm          nvidia-352-dev          nvidia-384-dev
nvidia-340              nvidia-352-updates      
nvidia-340-dev          nvidia-352-updates-dev
#这里建议大家不要安装最新版本驱动,可能存在不兼容的错误
$ sudo apt install nvidia-375          ## 错误的命令 for ubuntu 18.04
$ sudo apt-get install mesa-common-dev ## 没有尝试
$ sudo apt install nvidia-driver-455   ## 提示可以安装 455
$ sudo apt install nvidia-driver-450     ## 提示可以安装 450

安装过程中的选项:(这是copy别人的,自己的没记住,我也是尝试选择了好多遍才安装好)

The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later?  选择 No 继续
问题没记住,选项是:install without signing
问题大概是:Nvidia’s 32-bit compatibility libraries? 选择 No 继续
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.  选择 Yes  继续

根据提示键入用户密码。如果没有,则需要查看 /var/log/nvidia-install.log 记录是否是 nvidia 模块认证失败!后面就一路Accept就可以~报错**The distribution-provided pre-install script failed!**不必理会,继续安装。最重要的一步,安装程序问你是否使用nv的xconfig文件,这里一点要选yes,否则在启动x-window时不会使用nv驱动

#...安装完成后
sudo update-initramfs -u
reboot

2.4 判断显卡驱动是否安装成功

挂载Nvidia驱动:

modprobe nvidia

检查驱动是否安装成功:

nvidia-smi #输入指令查看显卡信息 

如果出现类似以下信息,说明安装成功。

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

2.4 重启X-window 服务

sudo service lightdm start

2.5 重启电脑,查看设置

如果graphics 是 GeForce ,则安装成功。(还是Intel® HD Graphics 5500 (BDW GT2))

2.6 问题记录

2.6.1 nvidia 模块认证失败

查看 /var/log/nvidia-install.log,发现有记录 nvidia 模块认证失败:

[  403.401415] Disabling lock debugging due to kernel taint
[  403.410871] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[  403.431219] nvidia-nvlink: Nvlink Core is being initialized, major device number 510
[  403.531926] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  450.80.02  Wed Sep 23 01:13:39 UTC 2020
[  403.539957] nvidia-uvm: Loaded the UVM driver, major device number 508.
[  403.547221] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  450.80.02  Wed Sep 23 00:48:09 UTC 2020
[  403.549628] [drm] [nvidia-drm] [GPU ID 0x00000300] Loading driver
[  403.549631] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:03:00.0 on minor 1
[  403.553517] [drm] [nvidia-drm] [GPU ID 0x00000300] Unloading driver
[  403.583987] nvidia-modeset: Unloading
[  403.717395] nvidia-uvm: Unloaded the UVM driver.
[  403.741354] nvidia-nvlink: Unregistered the Nvlink Core, major device number 510

网络查找的提示为需要解决这个问题。Ubuntu 安装最小的通用Linux内核(Linux-image-virtual)不包括drm模块,要修复则需要安装完整的通用Linux-image-generic.安装Linux-image-extra-virtual会起作用,但因为它只是一个过渡包,所以还是推荐安装Linux-generic。

sudo apt install linux-generic

对nvidia的模块进行签名

https://blog.csdn.net/m0_38066161/article/details/81812816

我所使用的系统为 Ubuntu 18.04,Linux Kernel 为 4.15.0-32-generic
出现此问题的原因是,Ubuntu Kernel 使用 EFI_SECURE_BOOT_SIG_ENFORCE 内核配置,这样会阻止内核载入第三方模块。
解决方法如下:
在终端执行如下指令:

sudo apt install mokutil
sudo mokutil --disable-validation

执行后,终端会让你设置8-16位密码(之后要用,不要忘记哦~)
接下来,重启电脑,会出现蓝屏(不要紧张,按下任意键进入选择界面 :-)),选项如下:
– Continue boot
– Change Secure Boot state
– Enroll key from disk
– Enroll hash from disk
选择Change Secure Boot state,接下来会让你输入之前的密码。

2.6.2 使用 NVIDIA 显卡

通过Detail查看,当前使用的显卡还是Intel® HD Graphics 5500 (BDW GT2)。通过Ubuntu的应用商店,下载并安装NVIDIA X Server Settings。

启动NVIDIA X Server Settings后,发现界面是空白一片,一种不好的预感爬上心头。无论如何,还是继续下面的工作。

3. 安装cuda

3-1. 安装依赖包

sudo apt install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
sudo apt install libboost-all-dev libhdf5-serial-dev libgflags-dev 
sudo apt install libgoogle-glog-dev liblmdb-dev protobuf-compiler
sudo apt install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
sudo apt update

下载相应的安装包,安装时显卡驱动选‘N’。

3-2. 资源准备

cuda下载地址:https://developer.nvidia.com/cuda-downloads

https://developer.nvidia.com/cuda-toolkit-archive

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

如果选择 runfile (local),则使用下面的命令安装:

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run

如果选择 deb (network),则使用下面的命令安装:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda

如果选择 deb (local),则使用下面的命令安装:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.debsudo 
apt-key add /var/cuda-repo-ubuntu1804-11-1-local/7fa2af80.pubsudo 
apt-get updatesudo 
apt-get -y install cuda

我选择的是第1中,先下载 runfile 然后本地安装的模式。块头相当的大,3.5GB。

Connecting to developer.download.nvidia.cn (developer.download.nvidia.cn)|36.153.62.131|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3498245611 (3.3G) [application/octet-stream]
Saving to: ‘cuda_11.1.0_455.23.05_linux.run’

3-3. 安装cuda11.1

  • cd进入cuda所在文件夹,执行以下命令

cd ~/Downloads
sudo sh cuda_11.1.0_455.23.05_linux.run
  • 按照菜单内容选择安装内容

:这一块的基本没有遇见什么问题,cuda自带显卡驱动,在第二步选择是否安装,因为我们已经正确的安装了显卡驱动,所以第二步选no不安装。(或许,也可以直接下载CUDA一步安装到位!如果有哪位同学成功一键安装,记得分享以下!)

To uninstall the CUDA Toolkit, 
run cuda-uninstaller in /usr/local/cuda-11.1/bin

***WARNING: Incomplete installation! 
This installation did not install the CUDA Driver. 
A driver of version at least .00 is required 
for CUDA 11.1 functionality to work.
To install the driver using this installer, 
run the following command, 
replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run --silent --driver

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

莫名奇妙的出现了这样的提示;那就根据提示,设置环境变量了。

3-4. 设置环境变量

  • 3-4-1. 设置gcc和g++

设置gcc和g++的符号链接到gcc-7以上的版本。

 #因为我的gcc和g++版本都是7.5.0,满足要求。
 
 sudo ln -s /usr/bin/gcc-7 /usr/local/cuda/bin/gcc
 sudo ln -s /usr/bin/g++-7 /usr/local/cuda/bin/g++
  • 3-4-2. 设置path

 #因为本人安装的是cuda11.1,所以设置path的时候选择是cuda-11.1这个文件夹,如果是其他版本,请自行修改
 
echo 'export PATH=/usr/local/cuda-11.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

sudo su 
echo 'include /usr/local/cuda-11.1/lib64' >> /etc/ld.so.conf
exit
# 在 ld.so.conf 末尾添加
# include /usr/local/cuda-11.1/lib64
  • 3-4-3. 更新path

source ~/.bashrc
sudo ldconfig

3-5. 验证

输入以下内容

nvcc -V

能正确输出cuda版本信息

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

测试本机样本

cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
sudo ./deviceQuery

若出现以下内容,则安装成功。

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

4. 安装CUDNN

官网下载安装包,需要注册登录才能下载。选择适合自己的版本:(网站打开的灰常慢!!!)

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

 下载完成后解压并进入文件夹:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

然后 sudo ldconfig 时出现了一些小问题。

sudo ldconfig -v ## 检查链接

/sbin/ldconfig.real: Can't stat /usr/local/nvidia/lib: No such file or directory
/sbin/ldconfig.real: Can't stat /usr/local/nvidia/lib64: No such file or directory
/sbin/ldconfig.real: Path `/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link

根据报错信息定位错误源头。

/sbin/ldconfig.real: 

会报错说:

# /sbin/ldconfig.real
/sbin/ldconfig.real: /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link

进一步的查看这个文件是个什么情况。

ls -lh /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn.so.8
-rwxr-xr-x 1 root root 318M Aug  1 09:26 /usr/local/cuda-11.1/targets/x86_64-linux/lib/libcudnn.so.8

是一个文件,它本应是一个软连接。于是创建软接连:

cd /usr/local/cuda-11.1/targets/x86_64-linux/lib

sudo ln -sf libcudnn_adv_infer.so.8.0.3 libcudnn_adv_infer.so.8
sudo ln -sf libcudnn_adv_train.so.8.0.3 libcudnn_adv_train.so.8
sudo ln -sf libcudnn_ops_infer.so.8.0.3 libcudnn_ops_infer.so.8
sudo ln -sf libcudnn_ops_train.so.8.0.3 libcudnn_ops_train.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.0.3 libcudnn_cnn_infer.so.8
sudo ln -sf libcudnn_cnn_train.so.8.0.3 libcudnn_cnn_train.so.8
sudo ln -sf libcudnn.so.8.0.3 libcudnn.so.8

sudo ln -sf libcudnn_adv_infer.so.8 libcudnn_adv_infer.so
sudo ln -sf libcudnn_adv_train.so.8 libcudnn_adv_train.so
sudo ln -sf libcudnn_ops_infer.so.8 libcudnn_ops_infer.so
sudo ln -sf libcudnn_ops_train.so.8 libcudnn_ops_train.so
sudo ln -sf libcudnn_cnn_infer.so.8 libcudnn_cnn_infer.so
sudo ln -sf libcudnn_cnn_train.so.8 libcudnn_cnn_train.so
sudo ln -sf libcudnn.so.8 libcudnn.so

本问题参考链接:

  1. libcudnn.so.7 is not a symbolic link
  2. libcudnn.so.7 is not a symbolic link

终端查看CUDNN版本:(有些小问题)

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

测试CUDA的示例

#编译并测试设备 deviceQuery:
cp -r /usr/local/cuda-11.1/samples ~/NVIDIA_CUDA-11.1_Samples
cd ~/NVIDIA_CUDA-11.1_Samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

#编译并测试带宽 bandwidthTest:
cd ../bandwidthTest
sudo make
./bandwidthTest

 

完成!

三、验证cudnn是否安装成功

当选择Debian File进行安装时会在/usr/src/cudnn_samples_v7有一些cudnn的例子

编译mnistCUDNN sample进行验证

cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN

make clean && make

./mnistCUDNN

如果安装成功将会有如下图所示的:Test passed!

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

CUDA和cudnn测试安装结果

到这里就已经完成了CUDA 11.1 和 CUDNN 8.0.3 的安装。可以安装对应的Pytorch的GPU版本测试是否可以正常使用了。

为了测试安装的CUDA和CUDNN的实际效果,果断安装了pip并更换了国内pip源。如下:

mkdir ~/.pip
echo '[global]' >> ~/.pip/pip.conf
echo 'index-url = https://mirrors.aliyun.com/pypi/simple' >> ~/.pip/pip.conf

python3 -m pip install pip
python3 -m pip install pip --upgrade

cd ~/Downloads
wget https://download.pytorch.org/whl/cu100/torch-1.0.0-cp35-cp35m-linux_x86_64.whl
pip3 install torch-1.0.0-cp36-cp36m-linux_x86_64.whl
pip3 install torchvision

### 或者
python3 -m pip install torch-1.0.0-cp36-cp36m-linux_x86_64.whl
python3 -m pip install torchvision

编辑一个文件 pytorch_cudnn_test.py,代码如下:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn ### use 'cudnn' libarias
from torchvision import datasets, transforms


class Net(nn.Module):    ### define network structure
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)


def train(model, device, train_loader, optimizer, epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()
        output = model(data)
        loss = F.nll_loss(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                       100. * batch_idx / len(train_loader), loss.item()))

def main():
    cudnn.benchmark = True
    torch.manual_seed(1)
    device = torch.device("cuda")
    kwargs = {'num_workers': 1, 'pin_memory': True}
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST('../data', train=True, download=True,
                       transform=transforms.Compose([
                           transforms.ToTensor(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])),
        batch_size=64, shuffle=True, **kwargs)

    model = Net().to(device)
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

    for epoch in range(1, 11):
        train(model, device, train_loader, optimizer, epoch)


if __name__ == '__main__':
    main()

然后在 Terminal 中键入:

python pytorch_cudnn_test.py

Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动

说明GPU已经被调用,并开始计算。

关于NVIDIA显卡的其他花絮

1. 卸载CUDA和CUDNN

### STEP-1
/usr/local/cuda-11.1/bin/cuda-uninstall # uninstall the CUDA by execute-tools

sudo apt remove --purge cuda*
sudo rm -r /usr/local/cuda-11.1/

### STEP-2
sudo ~/Downloads/NVIDIA-Linux-x86_64-450.80.02.run --uninstall
sudo apt remove --purge nvidia*

2. 检查双显卡的工作情况

使用 glxinfo | grep vendor 查看当前工作的显卡。

server glx vendor string: SGI
client glx vendor string: Mesa Project and SGI
OpenGL vendor string: Intel Open Source Technology Center

确认以下显卡的驱动等情况;

lshw -numeric -C display
lspci | grep VGA
lspci | grep 3d

一般情况下,NVIDIA显卡需要手动启动。

modprobe nvidia

如果提示错误,

modprobe: ERROR: ../libkmod/libkmod-module.c:832 kmod_module_insert_module() could not find module by name='off'
modprobe: ERROR: could not insert 'off': Unknown symbol in module, or unknown parameter (see dmesg)

则需要:

sudo prime-select nvidia
modprobe nvidia

从 nvidia-settings 中把主要显卡设置 由 Intel 更改为 NVIDIA。

in order to enable this offload rendering, you have to put the Prime profile on “On-Demand”, then for Vulkan offloading you have to put this variable inside your /etc/environment file:
__NV_PRIME_RENDER_OFFLOAD=1

For OpenGL apps, you have to put these variables:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia

After a restart, it will start render offloading.

In order to check which graphic card is being used, you can enter the following command in terminal:

glxinfo | grep vendor

使用小齿轮测试显卡性能:

glxgears -info

 

 

 

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23039.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信