目录
〇、N卡无法开机问题
如果是刚刚安装Ubuntu或使用U盘体验系统要安装Ubuntu,因为NVIDIA显卡驱动导致的卡LOGO等问题,在grub里选择Ubuntu,按e进入启动选项,在quiet splash 后面添加 nomodeset,F10保存,就可以开机了,但是只能一次有效,做完第二步就可以直接开机了。
一、安装Nvidia显卡驱动
网上方法很多,但是这个我方法在各种电脑上都试过(甚至是工作站的Quadro显卡,Ubuntu18.04 Server系统上)没出现过任何问题。
1.禁用安全引导
UEFI的安全引导会阻止第三方驱动运行,导致无法安装驱动,所以需要禁用,禁用方法是进入BIOS,找到boot选项卡中的Secure Boot选项,设置为Disable,保存重启即可。
2.禁用默认驱动程序
sudo vi /etc/modprobe.d/blacklist.conf
在最后面添加以下内容
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb
更新内核后重启
sudo update-initramfs -u
验证默认驱动是否成功屏蔽
lsmod | grep nouveau
若成功应该没有任何输出
3.添加Nvidia驱动源
如果网络原因导致下载缓慢,可以先更换apt源
sudo apt edit-sources
选择编辑器,然后将原先内容注释或者直接删除更换为新的国内源
#阿里源
deb http://mirrors.aliyun.com/ubuntu/ xenial main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main multiverse restricted universe
添加Nvidia驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
4.安装驱动
查询合适的驱动
ubuntu-drivers devices
稍等片刻就会出现一些提示(我的显卡是1050Ti移动版)
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C8Csv0000103Csd00008478bc03sc00i00
vendor : NVIDIA Corporation
model : GP107M [GeForce GTX 1050 Ti Mobile]
driver : nvidia-driver-410 - third-party free
driver : nvidia-driver-390 - distro non-free
driver : nvidia-driver-415 - third-party free
driver : nvidia-driver-435 - distro non-free
driver : nvidia-driver-440 - distro non-free recommended
driver : xserver-xorg-video-nouveau - distro free builtin
== /sys/devices/pci0000:00/0000:00:14.3 ==
modalias : pci:v00008086d0000A370sv00008086sd00000034bc02sc80i00
vendor : Intel Corporation
manual_install: True
driver : backport-iwlwifi-dkms - distro free
选择带有recommended的版本的显卡驱动(我的是nvidia-driver-440)然后安装
sudo apt install nvidia-driver-440
重启后使用nvidia-smi
查看显卡状态如果出现类似输出,并正确识别显卡型号,显存有占用就说明安装成功
二、安装CUDA和CUDNN
1.下载
在此选择需要的版本的CUDA下载
版本选择完后会引导到选择选择目标平台页面,这里选Linux x86_64 Ubuntu runfile(local)
如果有补丁,一起下载,先安装基础的再安装补丁包,补丁包过程类似
2.安装
运行安装程序
sudo sh xxxxxxx.run
看着英语提示安装,因为各个版本的CUDA安装步骤不太一样,关键是一定不要安装显卡驱动,因为已经装过了,再装会出错,其他的选项都是yes或者默认就行。
3.配置环境变量
将以下内容复制到/etc/bash.bashrc
的末尾,这里是添加到系统环境变量里面了
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后更新环境变量
source /etc/bash.bashrc
4.测试CUDA
可以使用自带例程确认CUDA安装成功
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
如果上面输出一堆你的显卡的信息,最后一个惹人爱的PASS
就说明成功了
5.下载,安装CUDNN
在此下载CUDNN
比较烦人的是CUDNN需要英伟达开发者账号才能下载,可以使用普通的英伟达账号登录,选择Login with your social account >
看着来,下载和CUDA版本对应的CUDNN,看不懂就网页翻译。
下载完之后解压,进入包含cuda文件夹的那一级文件夹,执行下面四行就安装完成了(如果你的cuda是默认安装路径的话)
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*
查看CUDNN版本确认一下
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
出现一段C语言代码,算出CUDNN_VERSION的值就是CUDNN的版本。
三、安装Qt和opencv所需的依赖包
里面还包含一些实用工具像htop之类的,相信基本上是必备,已经安装的也不用去掉
sudo apt-get install -y \
git \
vim \
htop \
cmake \
cmake-gui \
screen \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libeigen3-dev \
libglew-dev \
libgtk2.0-dev \
libgtk-3-dev \
libjpeg-dev \
libpostproc-dev \
libswscale-dev \
libtbb-dev \
libtiff5-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev \
zlib1g-dev \
pkg-config \
libxcb*
如果想在Python3上使用,安装numpy,numpy需要Cython
sudo -H pip3 install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo -H pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
四、安装Qt
x86平台安装Qt是非常方便的,可以在Qt官网下载安装器,安装编译好的程序包,就是同样要注册账号
Qt账号注册
开源版Qt在线安装器下载
下载完使用权限运行安装器(不用权限无法安装到/usr/locat里面)
next会提示登录,如果账号没有许可证,自动是安装开源版
同意开源许可并等待检索仓库后就能看到各种版本了
安装目录更改到/usr/local/Qt
然后选择一个版本的Qt,选择其中的Desktop gcc 64-bit打钩,其他的不用更改然后下一步,等待就完成了。
五、安装Opencv4.1.1 with CUDA and Qt
1.下载源码
源码包 / 拓展包
CUDA支持和很多高级功能是在拓展库里的,所以都要下载,下载完解压到主目录下,两个文件夹挨着放,在opencv-4.1.1里新建一个build文件夹,存放编译缓存。
2.配置cmake
进入build文件夹,执行sudo cmake-gui
,使用图形化配置
第一行地址栏定位到opencv-4.1.1
文件夹,下一个定位到opencv-4.1.1/build
,先Configure一遍,读取配置,然后开始配置
- 搜索
CMAKE_INSTALL_PREFIX
,安装位置,推荐默认位置/usr/local
,这样就不用另外配置库路径了 - 搜索
OPENCV_EXTRA_MODULES_PATH
,定位到opencv_contrib-4.1.1/modules
- 搜索
CMAKE_BUILD_TYPE
,填Realease
- 搜索
OPENCV_GENERATE_PKGCONFIG
,打勾,否则pkg-config不管用 - 再Configure一遍,读取拓展包配置
- 搜索
CUDA
,全打勾 - 搜索
WITH_QT
,WITH_QT打勾 - 搜索
WITH_OPENGL
,WITH_OPENGL打勾 - 如果需要Python3,搜索
BUILD_opencv_python3
,打勾 - 再Configure一遍,读取模块配置
- 搜索
Qt
,确认Qt路径指向的是新安装的版本(不知道版本可以再Configure一遍,从配置输出的GUI选项中找到版本)如果完全按照我之前的方法安装,Qt5_DIR的路径应该是/usr/local/Qt/5.14.0/gcc_64/lib/cmake/Qt5
其他的以此类推 - 再次搜索
CUDA
,全打勾,重新配置的过程中会有新的选项出现,例如CUDA_FAST_MATH
(千万不要选WITH_NVCUVID
否则绝对编译失败) - 清空搜索再Configure,直到没有红色选项,检查最后的配置输出,确认没有问题
- Generate 生成Makefile
肯定会出现的问题:
- 卡在IPPICV下载
手动下载IPPICV对应版本然后修改opencv-4.1.1/3rdparty/ippicv/ippicv.cmake
第47行那个网址为本地网址,例如file:///home/xxxx/Downloads/
,指向下载的IPPICV所在文件夹,最后的/不能少,如果成功了,在配置输出的Other third-party libraries选项里会有IPP的版本 - 卡在face_landmark_model.dat下载
手动下载然后和上面一样修改opencv_contrib-4.1.1/modules/face/CMakeLists.txt
- 卡在boostdesc或vgg_generated下载
等着或者重试就好了这个就是费劲,但是能下,前面的两个是真的下不来
可能出现的问题:
- 编译时dynlink_nvcuvid.h问题
如果cuda使用的是10.0版本,并且在后面的编译过程中出现dynlink_nvcuvid.h找不到的错误,下载video_sdk,将里面的cuviddec.h 和nvcuvid.h拷贝到/usr/local/cuda-10.0/include/目录下,将nvcuvid.h 重命名为dynlink_nvcuvid.h,重新编译即可。
3.编译
在build文件夹下执行sudo make
,可以开多线程编译-j8
,具体多少线程看机器CPU核数和内存够不够。编译完成且没有错误执行sudo make install -j4
,过程不长,可以不用开多线程,随便啦
4.验证
查看引用目录和库,输出较不带拓展库的OpenCV多了很多,如果这个生效不出意外就没问题了,程序测试就自己写去了
pkg-config opencv4 --cflags --libs