从源码安装 CV2 以支持 CUDA

从源码安装 CV2 以支持 CUDA#

软件环境#

本教程在 WSL2 Ubuntu 20.04 上测试通过。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

$ whereis cuda
cuda: /usr/lib/cuda /usr/include/cuda.h /usr/local/cuda

$ dpkg -l | grep cudnn
ii  cudnn                                        9.8.0-1                               amd64        NVIDIA CUDA Deep Neural Network library (cuDNN)
ii  cudnn9                                       9.8.0-1                               amd64        NVIDIA CUDA Deep Neural Network library (cuDNN)
ii  cudnn9-cuda-12                               9.8.0.87-1                            amd64        NVIDIA cuDNN for CUDA 12
ii  cudnn9-cuda-12-8                             9.8.0.87-1                            amd64        NVIDIA cuDNN for CUDA 12.8
ii  libcudnn9-cuda-12                            9.8.0.87-1                            amd64        cuDNN runtime libraries for CUDA 12.8
ii  libcudnn9-dev-cuda-12                        9.8.0.87-1                            amd64        cuDNN development headers and symlinks for CUDA 12.8
ii  libcudnn9-samples                            9.8.0.87-1                            all          cuDNN samples
ii  libcudnn9-static-cuda-12                     9.8.0.87-1                            amd64        cuDNN static libraries for CUDA 12.8

$ dpkg -l | grep cuda
ii  cuda                                         12.8.1-1                              amd64        CUDA meta-package
ii  cuda-12-8                                    12.8.1-1                              amd64        CUDA 12.8 meta-package
ii  cuda-cccl-12-8                               12.8.90-1                             amd64        CUDA CCCL
ii  cuda-command-line-tools-12-8                 12.8.1-1                              amd64        CUDA command-line tools
ii  cuda-compiler-12-8                           12.8.1-1                              amd64        CUDA compiler
ii  cuda-crt-12-8                                12.8.93-1                             amd64        CUDA crt
ii  cuda-cudart-12-8                             12.8.90-1                             amd64        CUDA Runtime native Libraries
ii  cuda-cudart-dev-12-8                         12.8.90-1                             amd64        CUDA Runtime native dev links, headers
ii  cuda-cuobjdump-12-8                          12.8.90-1                             amd64        CUDA cuobjdump
ii  cuda-cupti-12-8                              12.8.90-1                             amd64        CUDA profiling tools runtime libs.
ii  cuda-cupti-dev-12-8                          12.8.90-1                             amd64        CUDA profiling tools interface.
ii  cuda-cuxxfilt-12-8                           12.8.90-1                             amd64        CUDA cuxxfilt
ii  cuda-demo-suite-12-8                         12.8.90-1                             amd64        Demo suite for CUDA
ii  cuda-documentation-12-8                      12.8.90-1                             amd64        CUDA documentation
ii  cuda-driver-dev-12-8                         12.8.90-1                             amd64        CUDA Driver native dev stub library
ii  cuda-drivers-570                             570.124.06-0ubuntu1                   amd64        CUDA Driver meta-package, branch-specific
ii  cuda-gdb-12-8                                12.8.90-1                             amd64        CUDA-GDB
ii  cuda-keyring                                 1.1-1                                 all          GPG keyring for the CUDA repository
ii  cuda-libraries-12-8                          12.8.1-1                              amd64        CUDA Libraries 12.8 meta-package
ii  cuda-libraries-dev-12-8                      12.8.1-1                              amd64        CUDA Libraries 12.8 development meta-package
ii  cuda-nsight-12-8                             12.8.90-1                             amd64        CUDA nsight
ii  cuda-nsight-compute-12-8                     12.8.1-1                              amd64        NVIDIA Nsight Compute
ii  cuda-nsight-systems-12-8                     12.8.1-1                              amd64        NVIDIA Nsight Systems
ii  cuda-nvcc-12-8                               12.8.93-1                             amd64        CUDA nvcc
ii  cuda-nvdisasm-12-8                           12.8.90-1                             amd64        CUDA disassembler
ii  cuda-nvml-dev-12-8                           12.8.90-1                             amd64        NVML native dev links, headers
ii  cuda-nvprof-12-8                             12.8.90-1                             amd64        CUDA Profiler tools
ii  cuda-nvprune-12-8                            12.8.90-1                             amd64        CUDA nvprune
ii  cuda-nvrtc-12-8                              12.8.93-1                             amd64        NVRTC native runtime libraries
ii  cuda-nvrtc-dev-12-8                          12.8.93-1                             amd64        NVRTC native dev links, headers
ii  cuda-nvtx-12-8                               12.8.90-1                             amd64        NVIDIA Tools Extension
ii  cuda-nvvm-12-8                               12.8.93-1                             amd64        CUDA nvvm
ii  cuda-nvvp-12-8                               12.8.93-1                             amd64        CUDA Profiler tools
ii  cuda-opencl-12-8                             12.8.90-1                             amd64        CUDA OpenCL native Libraries
ii  cuda-opencl-dev-12-8                         12.8.90-1                             amd64        CUDA OpenCL native dev links, headers
ii  cuda-profiler-api-12-8                       12.8.90-1                             amd64        CUDA Profiler API
ii  cuda-runtime-12-8                            12.8.1-1                              amd64        CUDA Runtime 12.8 meta-package
ii  cuda-sanitizer-12-8                          12.8.93-1                             amd64        CUDA Sanitizer
ii  cuda-toolkit-12-8                            12.8.1-1                              amd64        CUDA Toolkit 12.8 meta-package
ii  cuda-toolkit-12-8-config-common              12.8.90-1                             all          Common config package for CUDA Toolkit 12.8.
ii  cuda-toolkit-12-config-common                12.8.90-1                             all          Common config package for CUDA Toolkit 12.
ii  cuda-toolkit-config-common                   12.8.90-1                             all          Common config package for CUDA Toolkit.
ii  cuda-tools-12-8                              12.8.1-1                              amd64        CUDA Tools meta-package
ii  cuda-visual-tools-12-8                       12.8.1-1                              amd64        CUDA visual tools
ii  cudnn9-cuda-12                               9.8.0.87-1                            amd64        NVIDIA cuDNN for CUDA 12
ii  cudnn9-cuda-12-8                             9.8.0.87-1                            amd64        NVIDIA cuDNN for CUDA 12.8
ii  libcudart10.1:amd64                          10.1.243-3                            amd64        NVIDIA CUDA Runtime Library
ii  libcudnn9-cuda-12                            9.8.0.87-1                            amd64        cuDNN runtime libraries for CUDA 12.8
ii  libcudnn9-dev-cuda-12                        9.8.0.87-1                            amd64        cuDNN development headers and symlinks for CUDA 12.8
ii  libcudnn9-static-cuda-12                     9.8.0.87-1                            amd64        cuDNN static libraries for CUDA 12.8
ii  nvidia-cuda-dev                              10.1.243-3                            amd64        NVIDIA CUDA development files
ii  nvidia-cuda-doc                              10.1.243-3                            all          NVIDIA CUDA and OpenCL documentation
ii  nvidia-cuda-gdb                              10.1.243-3                            amd64        NVIDIA CUDA Debugger (GDB)
ii  nvidia-cuda-toolkit                          10.1.243-3                            amd64        NVIDIA CUDA development toolkit

安装教程#

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cudnn
sudo apt-get -y install cudnn-cuda-12
wget https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-9.2.0.82_cuda12-archive.tar.xz
tar -xvf cudnn-linux-x86_64-9.2.0.82_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

mkdir -p opencv
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -D WITH_CUDA=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=8.6 \
    -D CUDA_ARCH_PTX="" \
    -D CUDA_NVCC_FLAGS="-gencode arch=compute_50,code=sm_50" \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
    -D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so \
    -D CUDNN_INCLUDE_DIR=/usr/local/cuda/include \
    -D WITH_CUBLAS=ON \
    -D WITH_NVCUVID=ON \
    -D BUILD_opencv_python3=ON \
    -D WITH_FFMPEG=ON \
    -D WITH_GSTREAMER=ON \
    -D WITH_V4L=ON \
    -D BUILD_opencv_videoio=ON \
    -D BUILD_EXAMPLES=OFF ..
make -j$(nproc)
sudo make install

Note

compute_50,code=sm_50 通过 nvcc --help | grep compute 来检查是否存在。

删除 pip 安装的 opencv,以防止冲突:

pip uninstall opencv-python
pip uninstall opencv-python-headless