• ubuntu16安装cuda,cudnn,gpu版opencv


    1,安装预操作

    1,有木有显卡

    ##查看有没有显卡
    lspci | grep -i nvidia

    返回:看不大懂,大意是有的

    01:00.0 VGA compatible controller: NVIDIA Corporation Device 1c82 (rev a1)
    01:00.1 Audio device: NVIDIA Corporation Device 0fb9 (rev a1)

    2,查看是不是受到支持的系统

    uname -m && cat / etc / * release
    ##返回:x86_64...大约是没问题

    3,查看是否有gcc

    gcc --version
    #c语言编译器,我理解的

    4,查看内核标头

    uname -r    ##返回:4.15.0-54-generic

    话说,内核的头文件和开发包好像还可以安装,命令如下:

    sudo apt-get install linux-headers  - $(uname -r)

    我自己运行的时候返回的信息是这样的,估计是没装,原版没问题

    返回:
    正在读取软件包列表... 完成
    正在分析软件包的依赖关系树       
    正在读取状态信息... 完成       
    注意,根据正则表达式 '4.15.0-54-generic' 选中了 'linux-modules-extra-4.15.0-54-generic'
    注意,根据正则表达式 '4.15.0-54-generic' 选中了 'linux-image-unsigned-4.15.0-54-generic'
    注意,根据正则表达式 '4.15.0-54-generic' 选中了 'linux-modules-4.15.0-54-generic'
    注意,根据正则表达式 '4.15.0-54-generic' 选中了 'linux-headers-4.15.0-54-generic'
    注意,根据正则表达式 '4.15.0-54-generic' 选中了 'linux-image-4.15.0-54-generic'
    虚拟软件包 linux-headers 由下面的软件包提供:
      linux-headers-4.15.0-29-generic 4.15.0-29.31~16.04.1
      linux-headers-4.15.0-54-generic 4.15.0-54.58~16.04.1
      linux-headers-4.4.0-21-lowlatency 4.4.0-21.37
      linux-headers-4.4.0-21-generic 4.4.0-21.37
    请您明确地选择安装其中一个。
    
    E: 软件包 linux-headers 没有可安装候选

    2,开始安装cuda

    安装新的之前,要彻底卸载原版,我自己新装的16.04的系统第一次装cuda,所以不知道咋卸载,有需求的小伙伴们自己想办法卸载吧

    装驱动:

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install nvidia-410    
    #本人在装其中一个的时候有报错,后经过修改源文件以后,安装成功了,修改源文件请先备份。自己找找教程吧。我的教程链接失效了
    sudo reboot
    nvidia-settings
    ##返回:nvidia英伟达驱动界面
    ##以上代码的意思是:加入英伟达官方ppa源,刷新软件库并且更新驱动,安装本地下载的410驱动,查看是否安装成功,重启

    装cuda,软件包自己下吧:

    sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
    #安装deb包
    sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
    #选择本地仓库进行安装时安装gpg的密钥,返回ok
    sudo apt-get update
    sudo apt-get install cuda

    cuda添加到环境变量:参考教程

    vim .bashrc  ##编辑.bashrc文件,在最后一行添上:export PATH=$PATH:/usr/local/cuda-10.0/bin 等号两边没空格,保存
    ##重启终端,输入echo $PATH得到想要的环境变量
    ##后来又在bashrc中加入了两行:
    ##总之bashrc的最后三行现在是这样的:
    export PATH=$PATH:/usr/local/cuda-10.0/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
    export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-10.0

    如何证明cuda安装成功:

    nvcc --version
    #返回:
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2018 NVIDIA Corporation
    Built on Sat_Aug_25_21:08:01_CDT_2018
    Cuda compilation tools, release 10.0, V10.0.130

    3,安装cudnn

    ##cuda和cudnn是对应起来的,别的不知,cuda10对应的是cudnn7.5
    tar xvf cudnn-10.0-linux-x64-v7.5.0.56.tar
    sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include/
    sudo cp cuda/lib64/* /usr/local/cuda-10.0/lib64/
    #基本内容是解压cudnn的tar包。然后把需要的头文件,库文件等复制到该有的地方去

    安装成功:

    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
    ##返回:
    #define CUDNN_MAJOR 7
    #define CUDNN_MINOR 5
    #define CUDNN_PATCHLEVEL 0
    --
    #define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

    4,安装opencv4.1(注意,先下载好opencv4.1和opencv4.1_contrib,这俩是严格对应的)

    opencv依赖:

    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev 
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev  
    sudo apt-get install git cmake build-essential  
    #一通装以后没报错

    安装opencv:

    cd ~/daqing_opencv/opencv-4.1.0/build
    ##如果没有build就建一个,执行:
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 

    不好意思,这个不行,因为我想装的是支持gpu的opencv,而cmake的过程中没有:NVIDIA CUDA:                   YES 的字样,而且gpu支持的opencv需要contrib模块,所以我们必需要指定。

    rm -rf *    #情空刚刚编译的数据,重装
    ##执行: cmake
    -D CMAKE_BUILD_TYPE=RELEASE -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=/home/center/daqing_opencv/opencv_contrib-4.1.0/modules -D BUILD_EXAMPLES=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D WITH_FFMPEG=ON -D WITH_LIBV4L=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D WITH_ZLIB=ON -D BUILD_PNG=ON -D BUILD_JPEG=ON -D BUILD_TIFF=ON -D WITH_CUDA=ON -D WITH_OPENCL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=/usr/local -DPYTHON3_EXECUTABLE=$(which python) -DPYTHON3_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") -DPYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") ..

    返回结果中,有一段是这样的:

    这次返回的结果中有一段是这样的:
    
    --   NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
    --     NVIDIA GPU arch:             30 35 37 50 52 60 61 70 75
    --     NVIDIA PTX archs:
    -- 
    --   OpenCL:                        YES (no extra features)
    --     Include path:                /home/center/daqing_opencv/opencv-4.1.0/3rdparty/include/opencl/1.2
    --     Link libraries:              Dynamic load
    -- 
    --   Python 3:
    --     Interpreter:                 /usr/bin/python (ver 3.5.2)
    --     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.2)

    很明显这就基本看起来没问题了,注意编译的时候的几个参数:

    OPENCV_EXTRA_MODULES_PATH=‘...’  指定contrib模块位置

    BUILD_opencv_python3=ON    想要python3可以import cv2的话就选它

    CMAKE_INSTALL_PREFIX='...'    库文件和头文件生成在哪里,其他参数不细说了

    ##编译完了,装吧
    make -j8    #8个进程一块装100%,貌似成功
    sudo make install
    ##如何证明成功了
    python3中可以 import cv2并且打印版本,估计是可以了

    5,开发自己的项目去了

    g++ test.cpp -o test `pkg-config --cflags --libs opencv`
    这样编译的opencv应该是能跑起来,但是很悲催的是。这个跑得版本不是我自己安装的版本,鬼知道这个opencv 2.4.9.1是个啥
    pkg-config --cflags --libs opencv
    打出来一堆库和目录,得,那我自己的文件在哪里呢?编译的时候我写了一个参数,-D CMAKE_INSTALL_PREFIX=/usr/local,实践证明,它在我的/usr/local中,包括lib,share,include等。总之刚生成文件就是opencv的。
    那么,只剩下两个问题了,一,改pkg的配置 二,g++编译的时候指到lib和include中,加油

    首先用4.1.0运行一个最简单的显示图片的程序,显示图片的源码是test1.out
    系统自带的opencv2.4编译是这样的:g++ test1.cpp `pkg-config --cflags --libs opencv` -o test1.out
    而opencv4.1.0的编译命令是这样的:

    g++ test1.cpp -I /usr/local/include/opencv4 -L /usr/local/lib/*.so -o test2.out -std=c++11

    但是这样并不能直接运行,因为缺少动态库,所谓缺少倒不是真的缺少,而是不在环境变量或者说是当前文件夹下,所以我的解决方法是把opencv4的lib库添加到环境变量中去,添加方式:

    sudo vim /etc/ld.so.conf
    在其中添加一句 /usr/local/lib 保存,
    使刚刚的配置生效:sudo ldconfig
    (插一句,系统提示/sbin/ldconfig.real: /usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudnn.so.7 不是符号连接
    不明所以,故而忽略)

    基本的程序能跑起来啦,耶耶耶!其实用cmake工具会更加方便,但是我总觉得g++比较有操控感,可能是项目还是太小吧

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/0-lingdu/p/11778455.html
Copyright © 2020-2023  润新知