避免安装cuda后更新liunx内核引发的cuda驱动错误
sudo apt update && sudo apt full-upgrade -y
dpkg --get-selections | grep linux
终端显示:
binutils-x86-64-linux-gnu install
console-setup-linux install
libselinux1:amd64 install
libselinux1-dev:amd64 install
linux-base install
linux-firmware install
linux-generic install
linux-generic-hwe-20.04 install
linux-headers-5.13.0-44-generic install
linux-headers-5.13.0-51 install
linux-headers-5.13.0-51-generic install
linux-headers-generic install
linux-headers-generic-hwe-20.04 install
linux-hwe-5.13-headers-5.13.0-44 install
linux-hwe-5.13-headers-5.13.0-74 install
linux-image-5.13.0-44-generic install
linux-image-5.13.0-51-generic install
linux-image-generic install
linux-image-generic-hwe-20.04 install
linux-libc-dev:amd64 install
linux-modules-5.13.0-44-generic install
linux-modules-5.13.0-74-generic install
linux-modules-5.13.0-51-generic install
linux-modules-extra-5.13.0-44-generic install
linux-modules-extra-5.13.0-51-generic install
linux-signed-generic-hwe-20.04 install
linux-sound-base install
pptp-linux install
util-linux install
sudo apt-get remove \
linux-headers-5.13.0-44 \
linux-headers-5.13.0-44-generic \
linux-image-5.13.0-44-generic \
linux-modules-5.13.0-44-generic \
linux-modules-extra-5.13.0-44-generic
卸载后,再重新检查一下现有的内核:
dpkg --get-selections | grep linux
状态为 deinstall
即已经卸载,如果觉得看着不舒服的话可以使用 purge
连配置文件里一起彻底删除,清理内核列表
sudo apt-get purge \
linux-headers-5.13.0-44 \
linux-headers-5.13.0-44-generic \
linux-image-5.13.0-44-generic \
linux-modules-5.13.0-44-generic \
linux-modules-extra-5.13.0-44-generic
最后,更新 GRUB
:
sudo update-grub
sudo apt-mark hold linux-headers-5.13.0-51
sudo apt-mark hold linux-headers-5.13.0-51-generic
sudo apt-mark hold linux-image-5.13.0-51-generic
sudo apt-mark unhold linux-headers-5.13.0-51
sudo apt-mark unhold linux-headers-5.13.0-51-generic
sudo apt-mark unhold linux-image-5.13.0-51-generic
配置完后建议重启机器:
sudo reboot now
在系统的软件和更新中找到附加驱动的选项。选择 nvidia-driver-510
,勾选后直接点击应用更改。
我这里直接提供预先下载好的cuda11.3+cudnn8.2.1
。百度网盘
sudo sh cuda_11.3.1_465.19.01_linux.run
会等上一段时间,跟着提示操作就行。
最后按如下步骤操作
最后
sudo nano ~/.bashrc
写入
export CUDA_HOME=/usr/local/cuda-11.3
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.3/lib64
更新~/.bashrc
source ~/.bashrc
验证:
nvcc -V
安装正确情况如下:
l@l-GF63-Thin-9SC:~/Desktop$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
sudo dpkg -i libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb
sudo dpkg -i libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb
sudo dpkg -i libcudnn8-samples_8.2.1.32-1+cuda11.3_amd64.deb
安装一些必要的库:
sudo apt-get install libfreeimage3 libfreeimage-dev freeglut3 freeglut3-dev libglfw3-dev -y
测试
sudo cp -r /usr/src/cudnn_samples_v8 ~/Desktop
cd mnistCUDNN && sudo make -j2 && ./mnistCUDNN
sudo apt-get update sudo apt-get upgrade -y
sudo apt-get install build-essential cmake cmake-gui unzip pkg-config -y
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libgtk2.0-dev libv4l-dev libxvidcore-dev libx264-dev libtbb2 libtbb-dev libdc1394-22-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libjasper-dev libgtk-3-dev libatlas-base-dev liblapacke-dev gfortran python3-dev ffmpeg -y && sudo apt autoremove -y
如果出现 E: 无法定位软件包 libjasper-dev
问题,执行一下如下指令
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
再次运行安装Opencv相关依赖的命令即可。
百度网盘
1.CMake
在终端打开cmake-gui:
sudo apt-get install cmake-gui
分别配置 source
和build
路径,source
是opencv
的源码路径,build
是前面新建的build
文件夹路径。
安装过程中会出现
然后点击Configure
,在弹出的窗口中保持默认选项,最后 Finish
。
有些文件无法下载的情况。
这是由于无法正常访问 https://raw.githubusercontent.com 网站,可以通过修改 hosts 文件的方式来解决:
(1)使用 sudo nano /etc/hosts,打开hosts文件。
(2)在文件中尾添加185.199.109.133 raw.githubusercontent.com。
可在https://ipaddress.com/website/raw.githubusercontent.com中选取最优的配置。
(3)sudo systemctl restart NetworkManager.service重启网络服务,使上述修改生效。
(4)ping raw.githubusercontent.com,如果能 ping 通,且延时不大,则说明能正常访问。
-- IPPICV: Downloading
-- ippicv_2020_lnx_intel64_20191018_general.tgz from https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz
-- found Intel IPP (ICV version): 2020.0.0 [2020.0.0 Gold]
-- at: /home/l/opencv-4.6.0/build/3rdparty/ippicv/ippicv_lnx/icv
-- found Intel IPP Integration Wrappers sources: 2020.0.0
-- at: /home/l/opencv-4.6.0/build/3rdparty/ippicv/ippicv_lnx/iw
在正常的理想网络状况下,所有的文件都会被正确的下载完成,但是免不了一些意外情况。配置下载过程中还可能会出现: face_landmark_model.dat
下载缺失的情况,原因就是这个文件太大了,下载过程中网速也慢。下载过程中经常会出错。
为了能够更好跳过痛苦的折磨,这里提供一下我下载好的数据文件。
注意带“.”文件会被隐藏。注意你下载保存的位置
。
下载完成后直接解压即可到了你的 opencv
文件目录即可,我的目录如下:
sudo unzip -d /home/l/opencv-4.6.0/ .cache.zip
勾选下面的编译选项:
WITH_CUDA
BUILD_CUDA_STUBS
OPENCV_DNN_CUDA
ENABLE_FAST_MATH
CMAKE_BUILD_TYPE
中添加 Release
CMAKE_INSTALL_PREFIX
中添加路径 /usr/local
OPENCV_EXTRA_MODULES_PATH
中添加
opencv_contrib-4.6.0
中的 modules
的路径:
/home/l/opencv-4.6.0/opencv_contrib-4.6.0/modules
再点击 Configure
,结束后勾选 CUDA_FAST_MATH
,在 CUDA_ARCH_BIN
中选择保留需要的算力值,可以在通过此页面查询显卡对应的算力值,这里保留了7.0;7.5,最后再点击进行一次Configure
如上图中成功的显示 CUDA
和CUDNN
的版本即可,然后点击Generate
,结束后关闭cmake-gui。
2.make
执行下面的命令,等待很长一段时间:
cd /home/l/opencv-4.6.0/build
sudo make -j$(nproc)
3.安装
sudo make install
4.环境配置
sudo echo “include /etc/ld.so.conf.d/*.conf” /etc/ld.so.conf && sudo echo “include /usr/local/lib” /etc/ld.so.conf
sudo ldconfig
sudo echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" /etc/bash.bashrc && sudo echo "export PKG_CONFIG_PATH" /etc/bash.bashrc
source /etc/bash.bashrc
结构如下:
.
├── 1.jpg
├── CMakeLists.txt
└── test.cpp
test.cpp如下:
#include
#include
using namespace std;
int main(int argc, char** argv)
{
cv::Mat src = cv::imread("1.jpg"); //读取图像,CPU内存读取
cv::resize(src, src, cv::Size(0, 0), 0.8, 0.8, cv::INTER_CUBIC);//resize
cv::imshow("input image", src);
cv::cuda::GpuMat G_image(src); //还有一种赋值方法,如**释的部分
//cv::cuda::GpuMat G_image;
//G_image.upload(src);
cv::cuda::GpuMat gray;
cv::cuda::cvtColor(G_image, gray, cv::COLOR_BGR2GRAY);//cuda版本里也有cvtColor这个API
cv::Mat c_gray;
gray.download(c_gray); //创建一个CPU mat对象后,由于imshow无法显示GMat对象,所以需要从GMat中取出来赋给CMat对象
cv::resize(c_gray, c_gray, cv::Size(0, 0), 1.1, 1.1, cv::INTER_CUBIC);//resize
cv::imshow("gray", c_gray); //imshow显示不了GMat对象
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
CMakeLists.txt如下:
# cmake version
cmake_minimum_required(VERSION 3.8)
# project name
PROJECT(HELLO)
# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")
# find OpenCV
FIND_PACKAGE(OpenCV REQUIRED)
# show the message of OpenCV
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " headers: ${OpenCV_INCLUDE_DIRS}")
message(STATUS " libraries: ${OpenCV_LIBS}")
# link headers
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(test ${SRC_LIST})
# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(test ${OpenCV_LIBS})
接着:
cmake . && sudo make j2 && ./test
结果:
表明安装成功。
进入前面建立的build文件夹,打开终端:
sudo make uninstall
cd ..
sudo rm -r build
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
cd /usr/
find . -name "*opencv*" | xargs sudo rm -rf
参考pytorch官网。
我这里采用的pip安装。没有使用Anaconda或者Miniconda的需要自己配置一下pip。
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113