Я не собираюсь прогуляться по всей истории об использовании поддержки GPU OpenCV в Python на WSL2, потому что я не был очень хорошим рассказчиком. Но скорее, я собираюсь рассказать вам, что интересные отрывки были пользователем Федора с весной на моем шаге. Давайте будем готовы летать к небу!
Обратите внимание, что важно понимать, как он работает, как показано на блог NVIDIA .
Во-первых, На момент написания, по умолчанию не поддерживает GPU для WSL2. Итак, нам пришлось подписаться как Windows Insider Участник, сделайте обновление из системных настроек, а затем перезагрузите нашу машину.
Во-вторых, Мы должны были войти в нашу учетную запись разработчика NVIDIA, установить Драйвер NVIDIA для CUDA на WSL а затем перезагрузите еще раз.
> nvidia-smi.exe Fri Nov 20 23:08:43 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 465.12 Driver Version: 465.12 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 GeForce GTX 1050 WDDM | 00000000:01:00.0 Off | N/A | | N/A 50C P8 N/A / N/A | 75MiB / 4096MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ ...
В-третьих, Нам пришлось установить CUDA Toolkit вместе с CUDNN а затем добавьте его в системный путь Fedora;
$ curl https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run -o cuda_11.1.1_455.32.00_linux.run ... $ sudo sh cuda_11.1.1_455.32.00_linux.run ... $ curl https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.0.5/11.1_20201106/RHEL8_1-x64/libcudnn-8.0.5.39-1.cuda11.1.x86_64.rpm -o libcudnn8-8.0.5.39-1.cuda11.1.x86_64.rpm ... $ sudo rpm -ivh libcudnn8-8.0.5.39-1.cuda11.1.x86_64.rpm ... $ echo 'export PATH="/usr/local/cuda-11.1/bin:$PATH"' >> ~/.zshrc # or .bashrc if you are using BASH $ echo 'export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64"' >> ~/.zshrc $ source ~/.zshrc
В-четвертых, Мы должны были убедиться, что мы установили все следующие необходимые инструменты сборки;
$ sudo dnf install -y cmake python-devel ffmpeg-devel gstreamermm-devel ...
В-пятых, Настоятельно рекомендуется устанавливать OpenCV в виртуальную среду, а не напрямую в систему. Итак, нам нужно создать один и не забывать установить numpy
модуль в нем;
$ python3.8 -m pip install virtualenv # Fedora 33 has made Python 3.9 the default ... $ pwd # just to see where we are /home/naru $ cd Researches # or wherever you have decided $ python3.8 -m virtualenv venv # or whatever name you have preferred $ source venv/bin/activate $ pip install numpy ...
Шестой, Нам пришлось скачать OpenCV с дополнительными модулями исходных кодов и их извлекать;
$ cd .. $ mkdir Downloads $ cd Downloads $ curl -L https://github.com/opencv/opencv/archive/4.5.0.tar.gz | tar xz ... $ curl -L https://github.com/opencv/opencv_contrib/archive/4.5.0.tar.gz | tar xz ...
Как только все было настроен, мы были готовы к реальному путешествию, начиная сюда!
Седьмое, Мы собираемся скомпилировать все необходимое. Но нам нужно отрегулировать аргументы в соответствии с нашей системой:
Cuda_arch_bin
Определяет версию архитектуры NVIDIA GPU. Увидимся на Официальный сайт ОтказOpenc_extra_modules_path
Указывает путь к исходному коду дополнительных модулей относительнопостроить
каталог. Также возможно использовать абсолютный путь.Python_executable
Определяет, какой интерпретатор Python мы собираемся использовать.Python3_numpy_include_dirs
определяет, гдеnumpy
Модуль установлен.Cmake_install_prefix
Определяет путь установки префикса, где размещены файлы, которые будут скомпилированы.../opencv-4.5.0
Определяет путь к исходному коду основных модулей.
$ mkdir --parents build $ cd build $ cmake -D CUDA_ARCH_BIN=6.1 \ > -D WITH_CUDA=ON \ > -D WITH_CUDNN=ON \ > -D OPENCV_DNN_CUDA=ON \ > -D ENABLE_FAST_MATH=1 \ > -D CUDA_FAST_MATH=1 \ > -D WITH_CUBLAS=1 \ > -D OPENCV_ENABLE_NONFREE=ON \ > -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.0/modules \ > -D PYTHON_EXECUTABLE=$HOME/Researches/venv/bin/python \ > -D PYTHON3_NUMPY_INCLUDE_DIRS=$HOME/Researches/venv/lib64/python3.8/site-packages/numpy/core/include \ > -D CMAKE_INSTALL_PREFIX=$HOME/Researches/venv \ > -D CUDNN_LIBRARY=/usr/lib64/libcudnn.so.8 \ > -D CUDNN_INCLUDE_DIR=/usr/include \ > ../opencv-4.5.0 ... $ make ...
Получите чашку кофе или два. Но я бы предпочел чай для кофе. Хахаха … Как только это сделало, восьмой, Установите его с помощью простой команды;
$ sudo make install ...
Тада! Мы сделали! Вы можете запустить его и посмотреть, все работает! Ну, мне не хватает опыта, чтобы дать вам примеры использования любых модулей CUDA OPENCV.
>>> import cv2 >>> cv2.cuda.getDevice() 0 >>> cv2.cuda.getCudaEnabledDeviceCount() 1
Девятый, К сожалению, в данный момент нет аудио и видео поддержки для WSL2 по умолчанию. Но мы могли бы попытаться взломать несколько вещей, чтобы сделать это! Есть руководство по Ubuntu Wiki для этого. Просто на данный момент мне не очень нужен какой-либо доступ к устройству аудио/видео ввода. Может быть когда-нибудь в ближайшее время, я сделаю сообщение об этом. Но я серьезно сомневаюсь, что буду.
Во-первых, Мы не могли полагаться на NVIDIA-SMI
Но несколько. Он был нарушен во многих аспектах как на Windows, так и на WSL2. Во всяком случае, если вы хотите, но не смог найти nvidia-smi.exe
Команда, просто добавьте C: \ Program Files \ Nvidia Corporation \ NVSMI
В системный путь Windows, а затем снова открывайте подсказку Windows PowerShell или Command. Все еще действительно, нет смысла, имея его в окнах!
Во-вторых, Мы могли бы осознавать сообщение об ошибке, который столкнулся с нашим миром после установки Toolkit CUDA. Он сказал нам, что он не смог установить драйвер CUDA. Но нет необходимости беспокоиться даже ни малейшего бита. Нам это не нужно, и никогда не будет.
=========== = Summary = =========== Driver: Not Selected Toolkit: Installed in /usr/local/cuda-11.1/ Samples: Installed in /home/naru/, but missing recommended libraries Please make sure that - PATH includes /usr/local/cuda-11.1/bin - LD_LIBRARY_PATH includes /usr/local/cuda-11.1/lib64, or, add /usr/local/cuda-11.1/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.1/bin ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 455.00 is required for CUDA 11.1 functionality to work. To install the driver using this installer, run the following command, replacingwith the name of this run file: sudo .run --silent --driver Logfile is /var/log/cuda-installer.log
В-третьих, Возможно, мы могли быть запутаны, поскольку мы не смогли найти libcudnn * .so. *
Файлы на /usr/local/cuda-11.1/Lib64
После установки libcudnn * .rpm
файл. Причина этого является файл RPM, установил все скомпилированные файлы библиотеки в другой каталог, I.E. /usr/lib64
Отказ
$ rpm -qlp libcudnn8-8.0.5.39-1.cuda11.1.x86_64.rpm ... /usr/lib64/libcudnn.so.8 /usr/lib64/libcudnn.so.8.0.5 /usr/lib64/libcudnn_adv_infer.so.8 /usr/lib64/libcudnn_adv_infer.so.8.0.5 /usr/lib64/libcudnn_adv_train.so.8 /usr/lib64/libcudnn_adv_train.so.8.0.5 /usr/lib64/libcudnn_cnn_infer.so.8 /usr/lib64/libcudnn_cnn_infer.so.8.0.5 /usr/lib64/libcudnn_cnn_train.so.8 /usr/lib64/libcudnn_cnn_train.so.8.0.5 /usr/lib64/libcudnn_ops_infer.so.8 /usr/lib64/libcudnn_ops_infer.so.8.0.5 /usr/lib64/libcudnn_ops_train.so.8 /usr/lib64/libcudnn_ops_train.so.8.0.5
Если нам не понравилось это поведение, мы могли бы скачать Архивный файл вместо этого, а затем извлечь его вручную;
$ curl https://developer.nvidia.com/compute/machine-learning/cudnn/secure/8.0.5/11.1_20201106/cudnn-11.1-linux-x64-v8.0.5.39.tgz -o cudnn-11.1-linux-x64-v8.0.5.39.tgz ... $ tar -xzvf cudnn-11.1-linux-x64-v8.0.5.39.tgz ... $ sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.1/include $ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.1/lib64 $ sudo chmod a+r /usr/local/cuda-11.1/include/cudnn*.h /usr/local/cuda-11.1/lib64/libcudnn*
В-четвертых, Чтобы перечислить все доступные параметры сборки OpenCV, поскольку мы можем захотеть настроить больше, мы могли бы запустить Cmake -la
;
$ cmake -LA ... BUILD_CUDA_STUBS:BOOL=OFF BUILD_DOCS:BOOL=OFF BUILD_EXAMPLES:BOOL=OFF BUILD_IPP_IW:BOOL=ON BUILD_ITT:BOOL=ON BUILD_JASPER:BOOL=OFF BUILD_JAVA:BOOL=ON BUILD_JPEG:BOOL=OFF BUILD_LIST:STRING= BUILD_OPENEXR:BOOL=OFF BUILD_OPENJPEG:BOOL=OFF BUILD_PACKAGE:BOOL=ON BUILD_PERF_TESTS:BOOL=ON BUILD_PNG:BOOL=OFF BUILD_PROTOBUF:BOOL=ON BUILD_SHARED_LIBS:BOOL=ON BUILD_TBB:BOOL=OFF BUILD_TESTS:BOOL=ON BUILD_TIFF:BOOL=OFF BUILD_USE_SYMLINKS:BOOL=OFF BUILD_WEBP:BOOL=OFF BUILD_WITH_DEBUG_INFO:BOOL=OFF BUILD_WITH_DYNAMIC_IPP:BOOL=OFF BUILD_ZLIB:BOOL=OFF ...
- https://docs.microsoft.com/en-us/windows/win32/direct3d12/gpu-cuda-in-wsl
- https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
Оригинал: “https://dev.to/naruaika/using-opencv-on-windows-subsystem-for-linux-1ako”