通常通过执行大规模矩阵运算来执行图像处理。因此,我一直认为,如果可以在GPU上执行OpenCV,则可以加快处理大图像的速度。稍后,我将尝试这种假设检验,但是首先,我在Anaconda上安装了OpenCV,可以在GPU上执行它。这个过程是艰巨的过程,因此我将其作为备忘录。 (感谢@ jun0_0的合作)
施工环境
-
Docker上的Jupyter Notebook服务器(带有Anaconda的Python3.8)
- 基本图像:jupyter / tensorflow-notebook
- 容器上的来宾操作系统:Ubuntu 20.04 LTS
- 容器上的CUDA版本:CUDA 10.1
- 容器上cuDNN的版本:cuDNN 8.0.5
-
主机规格
- 作业系统:Ubuntu 18.04 LTS
- CPU:酷睿i9 10900K
- 内存:32GB
- GPU:NVIDIA Geforce RTX 2080 SUPER
(参考)安装普通版
作为参考,描述了OpenCV Python普通版的安装方法和安装版本。
1 | pip install opencv-python |
1 2 | $ pip list | grep opencv opencv-python 4.4.0.46 |
2020/12/12后记:如何安装cuDNN 8.0.5
作为参考,发布了使用apt安装cuDNN的方法,但如果使用该方法,则CUDA11的版本将安装在Ubuntu 20.04上,并且OpenCV构建将无法正常工作。这有点费力,但是我想描述一下如何在CUDA 10.1中安装cuDNN 8.0.5。 (假定在主机上针对显示GUI图像的部分执行以下过程)
登录到NVIDIA的cuDNN下载页面
由于某些原因,必须在NVIDIA注册为免费用户后才能使用cuDNN。注册后登录下载页面。如果可以登录,请检查
在容器上下载cuDNN源@
根据您先前复制的URL在容器上执行以下命令。显然,根据我的实验,我发现每次下载cuDNN的网址都是临时生成的。因此,它每次执行时都会更改。以下是从该实验中获得的示例。
命令示例
1 | $ wget https://developer.download.nvidia.com/compute/machine-learning/cudnn/secure/8.0.5/10.1_20201106/cudnn-10.1-linux-x64-v8.0.5.39.tgz?aETIwrQU2RxM4D_RJoUh5zjSiyOAY2-mOJHEHPYOUXEaHcRx-hfW3aT2yZVZeES5BP_xDT8WvHE8BPlYcfzhgKjyguMS55LYmVnTUbbRy-_uxiyNaLzfzyzE52wmfoyc7rR5z6mbNma5B5jSYS1zg_4XInwSc5tuqdsqxHqPI8I2axdqbdw5iqYLMiCl9SuNftkG-vrNbUNxLMk -O cudnn-10.1-linux-x64-v8.0.5.39.tgz |
解压缩并存储源
解压缩
tgz文件并将其存储在指定目录中。解压缩后,将创建cuda目录。
1 | tar xvf cudnn-10.1-linux-x64-v8.0.5.39.tgz |
<详细信息>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | cuda ├── include │ ├── cudnn_adv_infer.h │ ├── cudnn_adv_train.h │ ├── cudnn_backend.h │ ├── cudnn_cnn_infer.h │ ├── cudnn_cnn_train.h │ ├── cudnn.h │ ├── cudnn_ops_infer.h │ ├── cudnn_ops_train.h │ └── cudnn_version.h ├── lib64 │ ├── libcudnn_adv_infer.so -> libcudnn_adv_infer.so.8 │ ├── libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.0.5 │ ├── libcudnn_adv_infer.so.8.0.5 │ ├── libcudnn_adv_train.so -> libcudnn_adv_train.so.8 │ ├── libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.0.5 │ ├── libcudnn_adv_train.so.8.0.5 │ ├── libcudnn_cnn_infer.so -> libcudnn_cnn_infer.so.8 │ ├── libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.0.5 │ ├── libcudnn_cnn_infer.so.8.0.5 │ ├── libcudnn_cnn_train.so -> libcudnn_cnn_train.so.8 │ ├── libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.0.5 │ ├── libcudnn_cnn_train.so.8.0.5 │ ├── libcudnn_ops_infer.so -> libcudnn_ops_infer.so.8 │ ├── libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.0.5 │ ├── libcudnn_ops_infer.so.8.0.5 │ ├── libcudnn_ops_train.so -> libcudnn_ops_train.so.8 │ ├── libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.0.5 │ ├── libcudnn_ops_train.so.8.0.5 │ ├── libcudnn.so -> libcudnn.so.8 │ ├── libcudnn.so.8 -> libcudnn.so.8.0.5 │ ├── libcudnn.so.8.0.5 │ └── libcudnn_static.a └── NVIDIA_SLA_cuDNN_Support.txt 2 directories, 32 files |
详细信息>
将cuDNN的源复制到指定目录。
1 | sudo cp -R cuda/lib64/* /usr/local/cuda/lib64/ |
1 | sudo cp cuda/include/* /usr/local/cuda/include/ |
带有CUDA构建的OpenCV Python
然后,构建OpenCV源代码,以便可以在Anaconda环境中的Python中使用带有CUDA的主要主题OpenCV Python,并生成可在GPU上使用的可执行文件。
安装版本
所需的应用程序
首先,安装构建所需的应用程序。
1 2 3 4 | sudo apt update && sudo apt upgrade -y && \ sudo apt install -y wget git build-essential zlib1g-dev libcurl4-gnutls-dev \ make ccache qt5-qmake gcc-8 g++-8 libavcodec-dev libavformat-dev \ libavutil-dev libswscale-dev libjpeg-turbo8-dev libwebp-dev libtiff-dev |
将gcc-8,g -8设置为默认的C编译器
在Ubuntu 20.04上,默认安装gcc和g的版本9。但是,此后要构建的某些源仅与版本8兼容,因此我们将降级。
<详细信息> <摘要>检查默认版本摘要>
默认情况下安装版本9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) $ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.3.0-17ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-HskZEa/gcc-9-9.3.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) |
详细信息>
1 | sudo ln -fs /usr/bin/g++-8 /usr/bin/g++ |
1 | sudo ln -fs /usr/bin/gcc-8 /usr/bin/gcc |
<详细信息> <摘要>设置后确认摘要>
确认变更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 8.4.0-3ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 8.4.0 (Ubuntu 8.4.0-3ubuntu2) $ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 8.4.0-3ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 8.4.0 (Ubuntu 8.4.0-3ubuntu2) |
详细信息>
卸载安装在Anaconda
上的libtiff
在构建时发生冲突?它以错误结束。 (有关详细信息,请参见参考资料)
1 | conda uninstall libtiff |
CMake
的源代码构建和安装
CMake从源代码构建最新版本。看来,如果它是可以从apt安装的稳定版本,则可能会以错误结尾。 (有关详细信息,请参见参考资料)
1 | git clone --depth 1 https://github.com/Kitware/CMake.git |
1 | cd CMake |
1 | ./configure --system-curl --system-zlib |
<详细信息> <摘要>(参考)执行结果(部分摘录) summary>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ ./configure --system-curl --system-zlib --------------------------------------------- CMake 3.19.20201128, Copyright 2000-2020 Kitware, Inc. and Contributors Found GNU toolchain C compiler on this system is: gcc C++ compiler on this system is: g++ Makefile processor on this system is: make g++ has setenv g++ has unsetenv g++ does not have environ in stdlib.h g++ has stl wstring g++ has <ext/stdio_filebuf.h> --------------------------------------------- ... ... ... --------------------------------------------- CMake has bootstrapped. Now run make. |
详细信息>
1 | make |
<详细信息> <摘要>(参考)执行结果(部分摘录) summary>
1 2 3 4 5 6 7 8 9 10 11 12 | $ make ... ... ... Scanning dependencies of target pseudo_iwyu [ 99%] Building C object Tests/RunCMake/CMakeFiles/pseudo_iwyu.dir/pseudo_iwyu.c.o [100%] Linking C executable pseudo_iwyu [100%] Built target pseudo_iwyu Scanning dependencies of target foo [100%] Building CXX object Tests/FindPackageModeMakefileTest/CMakeFiles/foo.dir/foo.cpp.o [100%] Linking CXX static library libfoo.a [100%] Built target foo |
详细信息>
1 | sudo make install |
<详细信息> <摘要>(参考)执行结果(部分摘录) summary>
1 2 3 4 5 | $ sudo make install ... -- Installing: /usr/local/share/bash-completion/completions/cmake -- Installing: /usr/local/share/bash-completion/completions/cpack -- Installing: /usr/local/share/bash-completion/completions/ctest |
详细信息>
安装Intel MKL,IPP,TBB,DAAL,MPI
还要安装Intel库以加快速度。
返回主目录
1 | cd |
1 | wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB | sudo apt-key add - |
<详细信息>
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ wget -O - https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB | sudo apt-key add - --2020-11-28 14:43:52-- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB Resolving apt.repos.intel.com (apt.repos.intel.com)... 23.33.53.192 Connecting to apt.repos.intel.com (apt.repos.intel.com)|23.33.53.192|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1914 (1.9K) [binary/octet-stream] Saving to: ‘STDOUT’ - 100%[=============================================================================>] 1.87K --.-KB/s in 0s 2020-11-28 14:43:52 (183 MB/s) - written to stdout [1914/1914] OK |
1 | sudo wget https://apt.repos.intel.com/setup/intelproducts.list -O /etc/apt/sources.list.d/intelproducts.list |
<详细信息>
执行结果 summary>
1
2
3
4
5
6
7
8
9
10
11
$ sudo wget https://apt.repos.intel.com/setup/intelproducts.list -O /etc/apt/sources.list.d/intelproducts.list
--2020-11-28 14:45:36-- https://apt.repos.intel.com/setup/intelproducts.list
Resolving apt.repos.intel.com (apt.repos.intel.com)... 23.33.53.192
Connecting to apt.repos.intel.com (apt.repos.intel.com)|23.33.53.192|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 278 [binary/octet-stream]
Saving to: ‘/etc/apt/sources.list.d/intelproducts.list’
/etc/apt/sources.list.d/intelproducts.l 100%[=============================================================================>] 278 --.-KB/s in 0s
2020-11-28 14:45:37 (27.7 MB/s) - ‘/etc/apt/sources.list.d/intelproducts.list’ saved [278/278]
详细信息>
1
sudo apt update
2020/12/12后记:出现冲突警告时
如果出现以下警告(这次假定将不使用英特尔Python,因此没有问题)
1
W: Conflicting distribution: https://apt.repos.intel.com/intelpython binary/ InRelease (expected binary/ but got )
1
sudo vim /etc/apt/sources.list.d/intelproducts.list
注释掉并保存为以下内容
1
# deb https://apt.repos.intel.com/intelpython binary/
检查可以安装的最新版本
1
sudo apt install intel-mkl-64bit intel-ipp-64bit intel-tbb intel-daal-64bit intel-mpi
<详细信息> <摘要>(参考)执行结果 summary>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
$ sudo apt install intel-mkl-64bit intel-ipp-64bit intel-tbb intel-daal-64bit intel-mpi
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package intel-mkl-64bit is a virtual package provided by:
intel-mkl-64bit-2020.4-912 2020.4-912
intel-mkl-64bit-2020.3-111 2020.3-111
intel-mkl-64bit-2020.2-108 2020.2-108
intel-mkl-64bit-2020.1-102 2020.1-102
intel-mkl-64bit-2020.0-088 2020.0-088
intel-mkl-64bit-2019.5-075 2019.5-075
intel-mkl-64bit-2019.4-070 2019.4-070
intel-mkl-64bit-2019.3-062 2019.3-062
intel-mkl-64bit-2019.2-057 2019.2-057
intel-mkl-64bit-2019.1-053 2019.1-053
intel-mkl-64bit-2019.0-045 2019.0-045
intel-mkl-64bit-2018.4-057 2018.4-057
intel-mkl-64bit-2018.3-051 2018.3-051
intel-mkl-64bit-2018.2-046 2018.2-046
intel-mkl-64bit-2018.1-038 2018.1-038
intel-mkl-64bit-2018.0-033 2018.0-033
You should explicitly select one to install.
Package intel-ipp-64bit is a virtual package provided by:
intel-ipp-64bit-2020.3-912 2020.3-912
intel-ipp-64bit-2020.2-108 2020.2-108
intel-ipp-64bit-2020.1-102 2020.1-102
intel-ipp-64bit-2020.0-088 2020.0-088
intel-ipp-64bit-2019.5-075 2019.5-075
intel-ipp-64bit-2019.4-070 2019.4-070
intel-ipp-64bit-2019.3-062 2019.3-062
intel-ipp-64bit-2019.2-057 2019.2-057
intel-ipp-64bit-2019.1-053 2019.1-053
intel-ipp-64bit-2019.0-045 2019.0-045
intel-ipp-64bit-2018.4-057 2018.4-057
intel-ipp-64bit-2018.3-051 2018.3-051
intel-ipp-64bit-2018.2-046 2018.2-046
intel-ipp-64bit-2018.1-038 2018.1-038
intel-ipp-64bit-2018.0-033 2018.0-033
You should explicitly select one to install.
Package intel-tbb is a virtual package provided by:
intel-tbb-2020.3-912 2020.3-912
intel-tbb-2020.3-108 2020.3-108
intel-tbb-2020.2-102 2020.2-102
intel-tbb-2020.0-088 2020.0-088
intel-tbb-2019.8-075 2019.8-075
intel-tbb-2019.6-070 2019.6-070
intel-tbb-2019.4-062 2019.4-062
intel-tbb-2019.2-057 2019.2-057
intel-tbb-2019.2-053 2019.2-053
intel-tbb-2019.0-045 2019.0-045
intel-tbb-2018.6-057 2018.6-057
intel-tbb-2018.4-051 2018.4-051
intel-tbb-2018.2-046 2018.2-046
intel-tbb-2018.0-033 2018.0-033
You should explicitly select one to install.
Package intel-daal-64bit is a virtual package provided by:
intel-daal-64bit-2020.3-912 2020.3-912
intel-daal-64bit-2020.2-108 2020.2-108
intel-daal-64bit-2020.1-102 2020.1-102
intel-daal-64bit-2020.0-088 2020.0-088
intel-daal-64bit-2019.5-075 2019.5-075
intel-daal-64bit-2019.4-070 2019.4-070
intel-daal-64bit-2019.3-062 2019.3-062
intel-daal-64bit-2019.2-057 2019.2-057
intel-daal-64bit-2019.1-053 2019.1-053
intel-daal-64bit-2019.0-045 2019.0-045
intel-daal-64bit-2018.3-051 2018.3-051
intel-daal-64bit-2018.2-046 2018.2-046
intel-daal-64bit-2018.1-038 2018.1-038
intel-daal-64bit-2018.0-033 2018.0-033
You should explicitly select one to install.
Package intel-mpi is a virtual package provided by:
intel-mpi-2019.9-912 2019.9-912
intel-mpi-2019.8-108 2019.8-108
intel-mpi-2019.7-102 2019.7-102
intel-mpi-2019.6-088 2019.6-088
intel-mpi-2019.6-085 2019.6-085
intel-mpi-2019.5-075 2019.5-075
intel-mpi-2019.4-070 2019.4-070
intel-mpi-2019.3-062 2019.3-062
intel-mpi-2019.2-057 2019.2-057
intel-mpi-2019.1-053 2019.1-053
intel-mpi-2019.0-045 2019.0-045
intel-mpi-2018.4-057 2018.4-057
intel-mpi-2018.3-051 2018.3-051
intel-mpi-2018.2-046 2018.2-046
You should explicitly select one to install.
E: Package 'intel-mkl-64bit' has no installation candidate
E: Package 'intel-ipp-64bit' has no installation candidate
E: Package 'intel-tbb' has no installation candidate
E: Package 'intel-daal-64bit' has no installation candidate
E: Package 'intel-mpi' has no installation candidate
详细信息>
1
sudo apt install -y intel-mkl-64bit-2020.4-912 intel-ipp-64bit-2020.3-912 intel-tbb-2020.3-912 intel-daal-64bit-2020.3-912 intel-mpi-2019.9-912
1
sudo vim /etc/ld.so.conf
添加以下内容
1
2
3
4
5
/opt/intel/daal/lib/intel64
/opt/intel/ipp/lib/intel64
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
/opt/intel/tbb/lib/intel64/gcc4.8
1
sudo /sbin/ldconfig
OpenCV源代码构建
从GitHub克隆OpenCV源代码并执行构建。您可以使用--depth 选项减少克隆所需的时间。 (参考)
1
git clone --depth 1 https://github.com/opencv/opencv.git
1
git clone --depth 1 https://github.com/opencv/opencv_contrib.git
1
cd opencv
1
mkdir build
1
cd build/
声明以下环境变量。 (这些是您这次构建的环境中的值。请根据您实际构建的环境进行修改。您可以使用ls /usr/local 检查CUDA目录。)
1
2
3
export CUDA_PATH="/usr/local/cuda-10.1" \
export CFLAGS="-I/usr/local/cuda-10.1/include -I/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/include" \
export LDFLAGS="-L/usr/local/cuda-10.1/lib64"
执行以下操作:这将生成构建所需的Makefile。 (这些选项只是您这次构建的环境的值。-D CUDA_ARCH_PTX=7.5 是RTX2000系列的值。参考)
-
2020年12月12日可选的小修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/opt/conda/lib \
-D OPENCV_EXTRA_MODULES_PATH=/home/jovyan/opencv_contrib/modules \
-D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \
-D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/libopenblas.so \
-D INSTALL_TESTS=ON \
-D INSTALL_C_EXAMPLES=ON \
-D WITH_PYTHON=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python3 \
-D PYTHON_LIBRARY=/opt/conda/lib \
-D PYTHON_INCLUDE_DIR=/opt/conda/include \
-D PYTHON_PACKAGES_PATH=/opt/conda/lib/python3.8/site-packages \
-D PYTHON_NUMPY_INCLUDE_DIR=/opt/conda/pkgs/numpy-1.19.4-py38hf0fd68c_1/lib/python3.8/site-packages/numpy/core/include/ \
-D WITH_MKL=ON \
-D WITH_CUDA=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D WITH_CUDNN=ON \
-D WITH_NVCUVID=ON \
-D OPENCV_DNN_CUDA=ON \
-D BUILD_opencv_cudaimgproc=ON \
-D BUILD_EXAMPLES=ON .. \
-D CUDA_ARCH_PTX=7.5
<详细信息> <摘要>(参考)执行结果(部分摘录) summary>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
...
...
...
-- Disabled: cudaimgproc world
-- Disabled by dependency: cudaoptflow
-- Unavailable: alphamat cnn_3dobj cvv freetype hdf java js julia matlab ovis python2 sfm viz
-- Applications: tests perf_tests examples apps
-- Documentation: NO
-- Non-free algorithms: NO
--
-- GUI:
-- GTK+: NO
-- VTK support: NO
--
-- Media I/O:
-- ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
-- JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
-- WEBP: /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x020e)
-- PNG: build (ver 1.6.37)
-- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
-- JPEG 2000: build (ver 2.3.1)
-- OpenEXR: build (ver 2.3.0)
-- HDR: YES
-- SUNRASTER: YES
-- PXM: YES
-- PFM: YES
--
-- Video I/O:
-- DC1394: NO
-- FFMPEG: YES
-- avcodec: YES (58.54.100)
-- avformat: YES (58.29.100)
-- avutil: YES (56.31.100)
-- swscale: YES (5.5.100)
-- avresample: NO
-- GStreamer: NO
-- v4l/v4l2: YES (linux/videodev2.h)
--
-- Parallel framework: pthreads
--
-- Trace: YES (with Intel ITT)
--
-- Other third-party libraries:
-- Intel IPP: 2020.0.0 Gold [2020.0.0]
-- at: /home/jovyan/opencv/build/3rdparty/ippicv/ippicv_lnx/icv
-- Intel IPP IW: sources (2020.0.0)
-- at: /home/jovyan/opencv/build/3rdparty/ippicv/ippicv_lnx/iw
-- Lapack: YES (/opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so /opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so /opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so -lpthread -lm -ldl)
-- Eigen: NO
-- Custom HAL: NO
-- Protobuf: build (3.5.1)
--
-- NVIDIA CUDA: YES (ver 10.1, CUFFT CUBLAS FAST_MATH)
-- NVIDIA GPU arch: 30 35 37 50 52 60 61 70 75
-- NVIDIA PTX archs: 75
--
-- cuDNN: NO
--
-- OpenCL: YES (no extra features)
-- Include path: /home/jovyan/opencv/3rdparty/include/opencl/1.2
-- Link libraries: Dynamic load
--
-- Python 3:
-- Interpreter: /opt/conda/bin/python3 (ver 3.8.6)
-- Libraries: /opt/conda/lib/libpython3.8.so (ver 3.8.6)
-- numpy: /opt/conda/lib/python3.8/site-packages/numpy/core/include (ver 1.19.4)
-- install path: lib/python3.8/site-packages/cv2/python-3.8
--
-- Python (for build): /opt/conda/bin/python3
--
-- Java:
-- ant: NO
-- JNI: NO
-- Java wrappers: NO
-- Java tests: NO
--
-- Install to: /opt/conda/lib
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jovyan/opencv/build
详细信息>
运行构建。您可以根据CPU内核数来增加线程数。由于这次使用的机器的CPU(Core i9 10900K)是10Core20Thread,因此我们将使用一半的10个线程执行构建。您可以使用lscpu 命令检查CPU内核/线程数。
1
2
3
4
5
6
7
8
9
10
11
12
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 20
On-line CPU(s) list: 0-19
Thread(s) per core: 2
Core(s) per socket: 10
...
...
...
1
make -j10
<详细信息> <摘要>(参考)执行结果 summary>
1
2
3
4
5
$ make -j10
...
...
...
[100%] Built target opencv_python3
详细信息>
最后安装。使用-E 选项执行sudo 命令,以便即使具有root特权也可以继承设置的环境变量。
1
sudo -E make install
<详细信息> <摘要>(参考)执行结果(部分摘录) summary>
1
2
3
4
5
6
7
$ sudo -E make install
...
...
...
-- Installing: /opt/conda/lib/share/opencv4/samples/python/video_threaded.py
-- Installing: /opt/conda/lib/share/opencv4/samples/python/video_v4l2.py
-- Installing: /opt/conda/lib/share/opencv4/samples/python/watershed.py
详细信息>
1
sudo /sbin/ldconfig
最后,在Anaconda的默认site-packages目录上创建一个符号链接。现在,您可以在Python上使用import cv2 进行导入(因为由于某些原因目录结构被重复)。
1
sudo ln -s /opt/conda/lib/lib/python3.8/site-packages/cv2 /opt/conda/lib/python3.8/site-packages/cv2
使用Python确认安装完成
执行以下命令,并确认已成功安装带有CUDA的OpenCV Python。 (已安装比正常安装更高的版本)
1
python -c "import cv2; print( cv2.__version__ )"
执行结果
1
2
$ python -c "import cv2; print( cv2.__version__ )"
4.5.1-pre
概要
带有CUDA的OpenCV Python已构建/安装,因此可以在Anaconda环境中使用GPU进行图像处理。我将尝试验证将来可以达到多少速度。
参考
-
编译并安装OpenCV 4.3.0(最新版本),兼容CUDA(使用源代码)(在Ubuntu上)
-
安装Intel MKL,IPP,TBB,DALL,MPI(性能库)(在Ubuntu上)
-
在pyenv环境中安装OpenCV
-
在Ubuntu上启用CUDA的情况下构建OpenCV
-
OpenCV安装(CUDA)(Ubuntu)
-
在Fedora上安装OpenCV-Python
-
如何使用find命令
-
让我们使用cudacodec模块
1 2 3 4 5 6 7 8 9 10 11 | $ sudo wget https://apt.repos.intel.com/setup/intelproducts.list -O /etc/apt/sources.list.d/intelproducts.list --2020-11-28 14:45:36-- https://apt.repos.intel.com/setup/intelproducts.list Resolving apt.repos.intel.com (apt.repos.intel.com)... 23.33.53.192 Connecting to apt.repos.intel.com (apt.repos.intel.com)|23.33.53.192|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 278 [binary/octet-stream] Saving to: ‘/etc/apt/sources.list.d/intelproducts.list’ /etc/apt/sources.list.d/intelproducts.l 100%[=============================================================================>] 278 --.-KB/s in 0s 2020-11-28 14:45:37 (27.7 MB/s) - ‘/etc/apt/sources.list.d/intelproducts.list’ saved [278/278] |
1 | sudo apt update |
1 | W: Conflicting distribution: https://apt.repos.intel.com/intelpython binary/ InRelease (expected binary/ but got ) |
1 | sudo vim /etc/apt/sources.list.d/intelproducts.list |
1 | # deb https://apt.repos.intel.com/intelpython binary/ |
1 | sudo apt install intel-mkl-64bit intel-ipp-64bit intel-tbb intel-daal-64bit intel-mpi |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | $ sudo apt install intel-mkl-64bit intel-ipp-64bit intel-tbb intel-daal-64bit intel-mpi Reading package lists... Done Building dependency tree Reading state information... Done Package intel-mkl-64bit is a virtual package provided by: intel-mkl-64bit-2020.4-912 2020.4-912 intel-mkl-64bit-2020.3-111 2020.3-111 intel-mkl-64bit-2020.2-108 2020.2-108 intel-mkl-64bit-2020.1-102 2020.1-102 intel-mkl-64bit-2020.0-088 2020.0-088 intel-mkl-64bit-2019.5-075 2019.5-075 intel-mkl-64bit-2019.4-070 2019.4-070 intel-mkl-64bit-2019.3-062 2019.3-062 intel-mkl-64bit-2019.2-057 2019.2-057 intel-mkl-64bit-2019.1-053 2019.1-053 intel-mkl-64bit-2019.0-045 2019.0-045 intel-mkl-64bit-2018.4-057 2018.4-057 intel-mkl-64bit-2018.3-051 2018.3-051 intel-mkl-64bit-2018.2-046 2018.2-046 intel-mkl-64bit-2018.1-038 2018.1-038 intel-mkl-64bit-2018.0-033 2018.0-033 You should explicitly select one to install. Package intel-ipp-64bit is a virtual package provided by: intel-ipp-64bit-2020.3-912 2020.3-912 intel-ipp-64bit-2020.2-108 2020.2-108 intel-ipp-64bit-2020.1-102 2020.1-102 intel-ipp-64bit-2020.0-088 2020.0-088 intel-ipp-64bit-2019.5-075 2019.5-075 intel-ipp-64bit-2019.4-070 2019.4-070 intel-ipp-64bit-2019.3-062 2019.3-062 intel-ipp-64bit-2019.2-057 2019.2-057 intel-ipp-64bit-2019.1-053 2019.1-053 intel-ipp-64bit-2019.0-045 2019.0-045 intel-ipp-64bit-2018.4-057 2018.4-057 intel-ipp-64bit-2018.3-051 2018.3-051 intel-ipp-64bit-2018.2-046 2018.2-046 intel-ipp-64bit-2018.1-038 2018.1-038 intel-ipp-64bit-2018.0-033 2018.0-033 You should explicitly select one to install. Package intel-tbb is a virtual package provided by: intel-tbb-2020.3-912 2020.3-912 intel-tbb-2020.3-108 2020.3-108 intel-tbb-2020.2-102 2020.2-102 intel-tbb-2020.0-088 2020.0-088 intel-tbb-2019.8-075 2019.8-075 intel-tbb-2019.6-070 2019.6-070 intel-tbb-2019.4-062 2019.4-062 intel-tbb-2019.2-057 2019.2-057 intel-tbb-2019.2-053 2019.2-053 intel-tbb-2019.0-045 2019.0-045 intel-tbb-2018.6-057 2018.6-057 intel-tbb-2018.4-051 2018.4-051 intel-tbb-2018.2-046 2018.2-046 intel-tbb-2018.0-033 2018.0-033 You should explicitly select one to install. Package intel-daal-64bit is a virtual package provided by: intel-daal-64bit-2020.3-912 2020.3-912 intel-daal-64bit-2020.2-108 2020.2-108 intel-daal-64bit-2020.1-102 2020.1-102 intel-daal-64bit-2020.0-088 2020.0-088 intel-daal-64bit-2019.5-075 2019.5-075 intel-daal-64bit-2019.4-070 2019.4-070 intel-daal-64bit-2019.3-062 2019.3-062 intel-daal-64bit-2019.2-057 2019.2-057 intel-daal-64bit-2019.1-053 2019.1-053 intel-daal-64bit-2019.0-045 2019.0-045 intel-daal-64bit-2018.3-051 2018.3-051 intel-daal-64bit-2018.2-046 2018.2-046 intel-daal-64bit-2018.1-038 2018.1-038 intel-daal-64bit-2018.0-033 2018.0-033 You should explicitly select one to install. Package intel-mpi is a virtual package provided by: intel-mpi-2019.9-912 2019.9-912 intel-mpi-2019.8-108 2019.8-108 intel-mpi-2019.7-102 2019.7-102 intel-mpi-2019.6-088 2019.6-088 intel-mpi-2019.6-085 2019.6-085 intel-mpi-2019.5-075 2019.5-075 intel-mpi-2019.4-070 2019.4-070 intel-mpi-2019.3-062 2019.3-062 intel-mpi-2019.2-057 2019.2-057 intel-mpi-2019.1-053 2019.1-053 intel-mpi-2019.0-045 2019.0-045 intel-mpi-2018.4-057 2018.4-057 intel-mpi-2018.3-051 2018.3-051 intel-mpi-2018.2-046 2018.2-046 You should explicitly select one to install. E: Package 'intel-mkl-64bit' has no installation candidate E: Package 'intel-ipp-64bit' has no installation candidate E: Package 'intel-tbb' has no installation candidate E: Package 'intel-daal-64bit' has no installation candidate E: Package 'intel-mpi' has no installation candidate |
1 | sudo apt install -y intel-mkl-64bit-2020.4-912 intel-ipp-64bit-2020.3-912 intel-tbb-2020.3-912 intel-daal-64bit-2020.3-912 intel-mpi-2019.9-912 |
1 | sudo vim /etc/ld.so.conf |
1 2 3 4 5 | /opt/intel/daal/lib/intel64 /opt/intel/ipp/lib/intel64 /opt/intel/lib/intel64 /opt/intel/mkl/lib/intel64 /opt/intel/tbb/lib/intel64/gcc4.8 |
1 | sudo /sbin/ldconfig |
1 | git clone --depth 1 https://github.com/opencv/opencv.git |
1 | git clone --depth 1 https://github.com/opencv/opencv_contrib.git |
1 | cd opencv |
1 | mkdir build |
1 | cd build/ |
1 2 3 | export CUDA_PATH="/usr/local/cuda-10.1" \ export CFLAGS="-I/usr/local/cuda-10.1/include -I/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/include" \ export LDFLAGS="-L/usr/local/cuda-10.1/lib64" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/opt/conda/lib \ -D OPENCV_EXTRA_MODULES_PATH=/home/jovyan/opencv_contrib/modules \ -D OpenBLAS_INCLUDE_DIR=/usr/include/x86_64-linux-gnu \ -D OpenBLAS_LIB=/usr/lib/x86_64-linux-gnu/libopenblas.so \ -D INSTALL_TESTS=ON \ -D INSTALL_C_EXAMPLES=ON \ -D WITH_PYTHON=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_opencv_python2=OFF \ -D BUILD_opencv_python3=ON \ -D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python3 \ -D PYTHON_LIBRARY=/opt/conda/lib \ -D PYTHON_INCLUDE_DIR=/opt/conda/include \ -D PYTHON_PACKAGES_PATH=/opt/conda/lib/python3.8/site-packages \ -D PYTHON_NUMPY_INCLUDE_DIR=/opt/conda/pkgs/numpy-1.19.4-py38hf0fd68c_1/lib/python3.8/site-packages/numpy/core/include/ \ -D WITH_MKL=ON \ -D WITH_CUDA=ON \ -D CUDA_FAST_MATH=ON \ -D WITH_CUBLAS=ON \ -D WITH_CUDNN=ON \ -D WITH_NVCUVID=ON \ -D OPENCV_DNN_CUDA=ON \ -D BUILD_opencv_cudaimgproc=ON \ -D BUILD_EXAMPLES=ON .. \ -D CUDA_ARCH_PTX=7.5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | ... ... ... -- Disabled: cudaimgproc world -- Disabled by dependency: cudaoptflow -- Unavailable: alphamat cnn_3dobj cvv freetype hdf java js julia matlab ovis python2 sfm viz -- Applications: tests perf_tests examples apps -- Documentation: NO -- Non-free algorithms: NO -- -- GUI: -- GTK+: NO -- VTK support: NO -- -- Media I/O: -- ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11) -- JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80) -- WEBP: /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x020e) -- PNG: build (ver 1.6.37) -- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0) -- JPEG 2000: build (ver 2.3.1) -- OpenEXR: build (ver 2.3.0) -- HDR: YES -- SUNRASTER: YES -- PXM: YES -- PFM: YES -- -- Video I/O: -- DC1394: NO -- FFMPEG: YES -- avcodec: YES (58.54.100) -- avformat: YES (58.29.100) -- avutil: YES (56.31.100) -- swscale: YES (5.5.100) -- avresample: NO -- GStreamer: NO -- v4l/v4l2: YES (linux/videodev2.h) -- -- Parallel framework: pthreads -- -- Trace: YES (with Intel ITT) -- -- Other third-party libraries: -- Intel IPP: 2020.0.0 Gold [2020.0.0] -- at: /home/jovyan/opencv/build/3rdparty/ippicv/ippicv_lnx/icv -- Intel IPP IW: sources (2020.0.0) -- at: /home/jovyan/opencv/build/3rdparty/ippicv/ippicv_lnx/iw -- Lapack: YES (/opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so /opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so /opt/intel/mkl/lib/intel64/libmkl_intel_lp64.so /opt/intel/mkl/lib/intel64/libmkl_sequential.so /opt/intel/mkl/lib/intel64/libmkl_core.so -lpthread -lm -ldl) -- Eigen: NO -- Custom HAL: NO -- Protobuf: build (3.5.1) -- -- NVIDIA CUDA: YES (ver 10.1, CUFFT CUBLAS FAST_MATH) -- NVIDIA GPU arch: 30 35 37 50 52 60 61 70 75 -- NVIDIA PTX archs: 75 -- -- cuDNN: NO -- -- OpenCL: YES (no extra features) -- Include path: /home/jovyan/opencv/3rdparty/include/opencl/1.2 -- Link libraries: Dynamic load -- -- Python 3: -- Interpreter: /opt/conda/bin/python3 (ver 3.8.6) -- Libraries: /opt/conda/lib/libpython3.8.so (ver 3.8.6) -- numpy: /opt/conda/lib/python3.8/site-packages/numpy/core/include (ver 1.19.4) -- install path: lib/python3.8/site-packages/cv2/python-3.8 -- -- Python (for build): /opt/conda/bin/python3 -- -- Java: -- ant: NO -- JNI: NO -- Java wrappers: NO -- Java tests: NO -- -- Install to: /opt/conda/lib -- ----------------------------------------------------------------- -- -- Configuring done -- Generating done -- Build files have been written to: /home/jovyan/opencv/build |
1 2 3 4 5 6 7 8 9 10 11 12 | $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian Address sizes: 39 bits physical, 48 bits virtual CPU(s): 20 On-line CPU(s) list: 0-19 Thread(s) per core: 2 Core(s) per socket: 10 ... ... ... |
1 | make -j10 |
1 2 3 4 5 | $ make -j10 ... ... ... [100%] Built target opencv_python3 |
1 | sudo -E make install |
1 2 3 4 5 6 7 | $ sudo -E make install ... ... ... -- Installing: /opt/conda/lib/share/opencv4/samples/python/video_threaded.py -- Installing: /opt/conda/lib/share/opencv4/samples/python/video_v4l2.py -- Installing: /opt/conda/lib/share/opencv4/samples/python/watershed.py |
1 | sudo /sbin/ldconfig |
1 | sudo ln -s /opt/conda/lib/lib/python3.8/site-packages/cv2 /opt/conda/lib/python3.8/site-packages/cv2 |
1 | python -c "import cv2; print( cv2.__version__ )" |
1 2 | $ python -c "import cv2; print( cv2.__version__ )" 4.5.1-pre |