Рубрики
Без рубрики

Использование OpenCV в подсистеме Windows для Linux

Я не собираюсь прогуляться по всей истории об использовании поддержки GPU Opencv в Python на WSL … Помечено с OpenCV, WSL, Python, GPU.

Я не собираюсь прогуляться по всей истории об использовании поддержки 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, replacing  with 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://dev.to/naruaika/using-opencv-on-windows-subsystem-for-linux-1ako”