Ubuntu20.04安装cuda10.1和opencv3.2.0

Ubuntu20.04安装cuda10.1和opencv3.2.0

我的电脑用的是RTX 2080 Ti的显卡,系统用的是今年最新的ubuntu20.04的系统,在新的系统上安装cuda和opncv。

以前ubuntu18上也安装过,但是这次在安装的过程中遇到了很多新问题,其实基本上都是版本过新导致的,可能是cuda版本新,可能是opencv版本新,每次遇到这种问题,网上的说可以降低版本。这都是扯淡,怎么不说把gpu拿出来呢,都不用配环境了。所以我整理了一下自己遇到的问题,都是直接解决版本问题的,以供参考。

这篇文章的主要解决问题是解决版本问题,所以只是简单介绍安装流程,不详细,但是我会留出借鉴的文章,里面都很详细。

安装nvidia驱动

一般新系统的nvidia驱动都是旧版本的,需要更新驱动的版本。使用指令

nvidia-smi

如果报错,证明nvidia驱动版本不对,需要更新驱动。如果不报错,证明驱动可用。

ubuntu20系统提供了驱动更新的功能,系统里面有一个additional drivers,用这个更新最新驱动就行了,避免上nvidia的官网(贼慢)。

安装cuda

接下来安装cuda,我安装的版本是cuda10.1,由于cuda10.1不支持gcc-9,但是ubuntu默认的是gcc-9,所以gcc要降级。
首先安装

sudo apt-get install gcc-7 g++-7

设置默认的gcc

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50

这时gcc降级就已经完成了,可以输入一下指令查看

sudo update-alternatives --config gcc

下面这个是我借鉴的文章
Ubuntu 20.04 CUDA&cuDNN安装方法

接下来上nvidia的官网,下载cuda,选择自己安装的版本下载。
nvidia的官网下载速度不慢,就是页面加载太慢,翻墙可能有用,翻墙后用chrome,不行就只能等等了,趁这个时间,可以注册或登录nvidia的帐号,因为接下来下载cuDNN要用。

下载好以后,输入指令

sudo sh cuda_10.2.89_440.33.01_linux.run

接下来的安装不难,不赘述。

配置环境变量

输入gedit ~/.bashrc命令打开文件,在文件结尾加入:

export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存后输入

source ~/.bashrc

更新环境

安装cuDNN

在官网上下载cuDNN,需要登录。
按照自己的cuda版本选择cuDNN。
解压之后,复制文件:
cuda/include/cudnn.h文件复制到/usr/local/cuda/include文件夹
cuda/lib64/下所有文件复制到/usr/local/cuda/lib64文件夹
由于需要复制权限,所以需要使用指令。
详情可以看这篇文章Ubuntu20.04安装cuda10.1

安装opencv

主要的版本问题都是在安装opencv是出现的。以下通过问题说明修改。
具体的安装流程可以看文章ubuntu安装opencv的正确方法

  1. 报错
-- ICV: Downloading ippicv_linux_20151201.tgz...
CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):
  file DOWNLOAD HASH mismatch

    for file: [/home/danalelixin/Desktop/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz]
      expected hash: [808b791a6eac9ed78d32a7666804320e]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [7;"Couldn't connect to server"]

就是这个ippicv_linux_20151201的问题,有的时候是下载不了,被墙了,有的时候,就算连接上了,文件的MD5也不对,所以我们就自己到网上找资源,修改文件中的MD5。

将下载好的ippicv_linux_20151201.tgz文件放在opencv文件夹下。
修改3rdparty/ippicv/downloader.cmake文件,将22行的数字改成报错信息中的actual hash,我的就是将808b791a6eac9ed78d32a7666804320e改成d41d8cd98f00b204e9800998ecf8427e。

  1. 报错
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)

这个就是版本问题,cuda9开始就已经不再支持2.0架构了,所以必须要改代码:

  1. 打开文件FindCUDA.cmake
    找到行
find_cuda_helper_libs(nppi)

替换成

  find_cuda_helper_libs(nppial)
  find_cuda_helper_libs(nppicc)
  find_cuda_helper_libs(nppicom)
  find_cuda_helper_libs(nppidei)
  find_cuda_helper_libs(nppif)
  find_cuda_helper_libs(nppig)
  find_cuda_helper_libs(nppim)
  find_cuda_helper_libs(nppist)
  find_cuda_helper_libs(nppisu)
  find_cuda_helper_libs(nppitc)

找到行

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")

改成

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")

找到行

unset(CUDA_nppi_LIBRARY CACHE)

替换成

unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)
  1. 打开文件OpenCVDetectCUDA.cmake
    找到下面几行
  set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Fermi")
    set(__cuda_arch_bin "2.0")
  elseif(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")

改成

  set(__cuda_arch_ptx "")
  if(CUDA_GENERATION STREQUAL "Kepler")
    set(__cuda_arch_bin "3.0 3.5 3.7")
  elseif(CUDA_GENERATION STREQUAL "Maxwell")
    set(__cuda_arch_bin "5.0 5.2")
  1. 打开opencv\modules\cudev\include\opencv2\cudev\common.hpp
    添加
#include <cuda_fp16.h>
  1. 报错
nvcc fatal   : Unsupported gpu architecture 'compute_20'
CMake Error at cuda_compile_generated_gpu_mat.cu.o.cmake:206 (message):
  Error generating
  /home/danalelixin/Desktop/opencv-3.2.0/build/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_gpu_mat.cu.o

老毛病,还是cuda9不支持2.0架构了。
使用以下make指令,重新make

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CUDA_nppi_LIBRARY=true -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..

  1. 报错
opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1313:21: error: ‘CODEC_FLAG_GLOBAL_HEADER’ was not declared in this scope
         c->flags |= CODEC_FLAG_GLOBAL_HEADER;

opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp:1525:35: error: ‘AVFMT_RAWPICTURE’ was not declared in this scope

就是ffmpeg新版本对老版本中的一些关键字的支持变了。
打开文件opencv/modules/videoio/src/cap_ffmpeg_impl.hpp ,在里面添加

#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020

重新make,有的时候添加语句后,还是没用,可能是添加在文件中的位置不对,换一个位置就好了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 1. 首先,您需要下载CUDA 10.1的安装包。您可以从NVIDIA官网下载,也可以使用以下命令从终端下载: ``` wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run ``` 2. 下载完成后,您需要在终端中运行以下命令以安装CUDA 10.1: ``` sudo sh cuda_10.1.243_418.87.00_linux.run ``` 3. 在安装过程中,您需要按照提示进行操作。请注意,您需要选择自定义安装选项,并选择要安装的组件。 4. 安装完成后,您需要将CUDA添加到系统路径中。您可以通过编辑~/.bashrc文件并添加以下行来完成此操作: ``` export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} ``` 5. 最后,您需要重新启动终端以使更改生效。您可以通过运行以下命令来验证CUDA是否已正确安装: ``` nvcc -V ``` 如果您看到CUDA版本信息,则表示安装成功。 ### 回答2: 首先,为了安装cuda 10.1,您需要确保您的系统满足以下要求: 操作系统:Ubuntu 18.04或Ubuntu 20.04 CUDA兼容的英伟达显卡 安装步骤如下: 1. 更新系统 在安装前,最好更新您的Ubuntu系统。 ```shell sudo apt update sudo apt upgrade ``` 2. 下载cuda 10.1 从英伟达官网上下载cuda 10.1。 ```shell wget https://developer.nvidia.com/cuda-10.1-download-archive-base ``` 3. 安装依赖项 在安装cuda 10.1之前,必须安装一些依赖项。 ```shell sudo apt install build-essential freeglut3-dev libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev ``` 4. 执行cuda 10.1安装程序 ```shell sudo sh cuda_10.1.243_418.87.00_linux.run ``` 此命令会启动cuda 10.1安装程序。通过按下ENTER键接受英费米许可证,并接受所有默认设置。 5. 更新PATH 接下来,您需要将CUDA添加到系统路径中。请注意,这里的路径取决于您安装CUDA的位置。 ```shell echo 'export PATH=/usr/local/cuda-10.1/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` 6. 验证CUDA安装 为了验证CUDA是否正确安装,请运行以下命令: ```shell nvcc -V ``` 如果显示cuda 10.1的版本号,那么您已成功安装cuda 10.1。 7. 安装缺少的依赖项 如果nvcc -V命令返回以下错误: ```shell nvcc: error while loading shared libraries: libnvidia-fatbinaryloader.so.418.87.00: cannot open shared object file: No such file or directory ``` 这意味着一些缺少的依赖项需要安装。 ```shell sudo apt install libnvidia-compute-418 ``` 现在,您已经成功地将CUDA 10.1安装在您的Ubuntu 20.04系统上,并可以开始使用您的CUDA加速应用程序! ### 回答3: Ubuntu 20.04与CUDA 10.1兼容性非常好。安装CUDA需要几步基本操作。这里我给出一些详细步骤供参考: 第一步:安装驱动 首先,在终端中运行以下命令: sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get install nvidia-driver-450 此时系统将自动安装最新的Nvidia驱动程序。 第二步:下载CUDA 10.1 可以直接从Nvidia的官网下载CUDA 10.1。在下载之前,需要选择Linux操作系统、x86_64架构以及Ubuntu 20.04版本。 下载完成后,在终端中进入文件目录,运行以下命令: sudo sh cuda_10.1.243_418.87.00_linux.run 此时系统将安装CUDA 10.1,并提示用户选择自定义安装或快速安装。 如果选择自定义安装,用户可以选择安装相应的组件。安装完成之后,需要运行以下命令: echo 'export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc 重新启动终端。 第三步:验证安装 在终端中运行以下命令: nvcc --version 如果命令成功执行,则说明CUDA 10.1已经成功安装。 以上就是在Ubuntu 20.04上安装CUDA 10.1的步骤。需要注意的是,在安装CUDA之前,需要确保系统中安装了适当的驱动程序和依赖项。另外,用户还需要根据自己的需求选择安装相应的组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值