openVINO 2022.1 (Ubuntu 20.04)でNCS2を使う

openVINO 2022.1 (Ubuntu 20.04)でNCS2を使うためのメモ

概要

openVINO 2022.1ではpypiからモジュールインストールするだけで使えるようになったのだけれど(python使用時)、
NCS2を使用しようとすると以下のようなエラーが発生します。

RuntimeError: Cannot load library 'libopenvino_intel_myriad_plugin.so: libopenvino_intel_myriad_plugin.so: cannot open shared object file: No such file or directory

どうやらNCS2(myriad)用のshared libraryがないらしい。
インストールミスか?と思ったけど、pypiのインストールファイル確認してみたけど、やっぱり入っていない。

[!NOTE] whlファイルの拡張子をzipに変更するとファイルの中身を確認できる

そこで、ソースからNCS2用のshared libraryをbuildしてみる。

準備

参考: BuildingForLinux

今回はWSL2の仮想マシンでbuildしてみることにする。
また、NCS2用のshared libraryだけが目的なので、pythonモジュールとかはbuildしていない。
たぶん、ちゃんとCMAKEのオプション設定すればbuild時間が短くなるかもしれないけど、そこはお手軽最優先で。

[!NOTE] 色々とbuildのために``apt install`するので、WSL2上のcloneした仮想マシンで実行した。
NCS2はWSL2上で使えないけど、buildするだけなら大丈夫みたい。
仮想マシンはUbuntu22.04を使用。 たぶん、20.04でも同様と思われる。
まぁ、Docker使えという説もある…

ソース取得

openVINOのリポジトリからソース取得。
例によって--depth 1をつけてディスク容量&通信時間節約。
今回はcontribは使わない。

git -C /work  clone  -b 2022.1.0 --depth 1 https://github.com/openvinotoolkit/openvino.git
git -C /work/openvino submodule update --init --recursive --depth 1
cd /work/openvino

[!NOTE] これ書いてる時点で2022.1.1がリリースされているけど、-bオプション変えればOKでしょう。 たぶん。。。

必要なモジュールのインストール

必要なモジュールはスクリプトファイルにまとめられているので、それを実行するだけ。

bash install_build_dependencies.sh 

cmakeのバージョン3.17以上が必要なので、cmakeがそれ以下だとcmakeをソースからbuildしてくれる。
Ubuntu22.04のデフォルト状態だとcmakeのバージョンは3.16なのでbuildが実行される。
ちょっと時間がかかるけど、気長にお待ちください。

build

準備ができたので、buildを実行。

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release .. 2>&1 | tee cmake.log
make --jobs=$(nproc --all) 2>&1 | tee make.log

あとはひたすら待つ。
(うちの環境では1時間くらいだったかな)

ターゲットマシンにコピー

makeが終わると、以下のファイルが出来ているはず。
この2つをNCS2を使用するターゲットマシンにコピーする。

ターゲットマシンのコピー先はopenVINOモジュールのインストール先のopenvino/libs/ディレクトリの下。
libopenvino.soなど、soファイルが並んでいるはず。

なお、openVINOモジュールのインストール先は以下のようなコマンドで確認できる。

 pip list -v | grep "^openvino"

コピーの方法はエクスプローラでもrcpでも何でもよい。 エクスプローラなど、Windows経由でコピーすると実行属性が落ちてしまうけど、
そもそも実行属性必要ないので気にしなくて良いです。

テスト

NCS2を使用してプログラム実行してみて、エラーにならずに実行できればOK。

つぶやき

でも、なんでNCS2用のライブラリ入ってないんだろ?
単なる入れ忘れ? サポート終了目前?