少ないリソースを酷使する

低レイヤーとレトロPC(PC98,MSX)が好きな情報学生

OpenVINOでIntel HD Graphicsを活用する(導入編)

OpenVINOを導入する.
備忘録的なので多少雑なのは許してほしい.

OpenVINOって?

この記事を見てる人はこの説明はいらなそうだが...
端的に言えば,学習済モデルをインポートして,色んなハード上で(+ハードに最適化された実装で)推論を走らせるツールキットである.
ツールキットなんで細かく説明すれば色々入っているが,ざっくりそんなかんじ.
詳しくは以下の記事がとっても優しく解説してくれている.
https://jellyware.jp/kurage/openvino/c01_overview.html

環境

PC : インテル® NUC キット NUC8i3BEH
CPU: インテル® Core™ i3-8109U プロセッサー
OS : Ubuntu 18.04.5 LTS (x86_64)
OpenVINO tool kit: 2020.4 Release

安全のために

安全な環境構築には保険が大切.
よってまずは,TimeshiftでPCのホットバックアップを取る.
あとは

$ sudo apt update
$ sudo apt upgrade

を実行した後に,何なら再起動もしよう.
多少手間かもしれないが,何度もパッケージ依存関係の崩壊で研究室の実験用マシン環境を汚してきた自分は念の為これを行う.
(本当はDockerとかの上に構築したいくらい)

OpenVINO導入の手順書

基本的には公式のドキュメントにめちゃくちゃ優しく説明されている.
よって,実際はこれのとおりやるだけなんだけど,今回は有効ハードをIntel_HD_Graphics,OSをLinuxに限定して必要な部分の手順だけまとめる.
後で自分が参照しやすくていいね.

OpenVINOのDownload

Linux用のチュートリアルを読んでいく.
んで,#install-openvinoにダウンロードリンクが書いてるからそこに飛ぶ.
具体的にはここからダウンロードできるらしい.
環境はLinuxを選択して,Register & Downloadを押す.
個人情報など聞かれるので素直に答えるとダウンロードページに飛べる.
カスタマイズパッケージとフルパッケージが選べるらしいが,この違いはオンライン・インストーラかどうかということらしい.
私はフルパッケージをダウンロードした.
ダウンロードボタンはtgzファイルへの直リンクっぽいので,リンクさえコピーすればcurlとかでダウンロードできる.CUI環境にも優しい.

さて,あとはよくある手順で解凍してディレクトリ移動を行う.

$ cd ~/Downloads/
$ tar -xvzf l_openvino_toolkit_p_<version>.tgz
$ cd l_openvino_toolkit_p_<version>

Installする

インストールウィザードをGUIで実行するかCUIで実行するか選べるらしい.優しいね.
私はなんとなくCUIのインストールウィザードを使ってみることにした.
必ずroot権限でinstall.shを起動すること.

$ sudo ./install.sh

1. Welcome

f:id:T-takeda:20200828153406p:plain 親切丁寧な対話型ウィザードが起動するので,基本的に指示に従ってぽちぽちするだけ.
CUIウィザードは翻訳にかけやすくていいなと思った.

3. Prerequisites

f:id:T-takeda:20200828153519p:plain f:id:T-takeda:20200828153530p:plain 途中で「前提環境が足りない」みたいなことが言われるが,足りない部分は最終的に勝手にインストールされていた.(これで正しいのか...?)

5. Configuration

f:id:T-takeda:20200828153555p:plain 以下のものはカスタムインストールしない限り基本勝手に入れてくれるらしい.

  • Model Optimizer
  • Inference Engine
  • Drivers and runtimes for OpenCL™ version 2.1
  • Intel® Media SDK
  • OpenCV
  • Inference Engine Code Samples
  • Demo Applications
  • Additional Tools
  • Documentation for Pre-Trained Models

インストール容量は850MBくらい.

6. First Part of Installation is Complete

最後まで優しい.
f:id:T-takeda:20200828153618p:plain

外部の依存ソフトウェアをインストールする

ウィザードの最後に「これをやってね」とやることを示してくれたが,ちょっとまって欲しい.
追加でインストールすると便利なライブラリがあるらしい.
入れない理由もないので入れておこう.

$ cd /opt/intel/openvino/install_dependencies
$ sudo -E ./install_openvino_dependencies.sh

Intel-optimized build of OpenCV library とは...

環境変数を設定する

下記を実行すると一時的に環境変数が設定されるらしい.

$ source /opt/intel/openvino/bin/setupvars.sh
[setupvars.sh] OpenVINO environment initialized

起動するたびに毎回設定するんはだるいから.bashrcに書こうね.
(私はzshなので.zshrc)

$ echo 'source /opt/intel/openvino/bin/setupvars.sh' >> ~/.bashrc

公式チュートリアルでは編集にviが使われている...

最後に,不安な人はprintenv環境変数を確認しよう.

$ printenv | grep openvino

モデルオプティマイザーを構成する

モデルオプティマイザーなるものを使うと,CaffeやTensorFlowなど主要なフレームワークで学習した,学習済モデルをインポートできるらしい.
OpenVINOではインポートしたいフレームワークごとに,それに対応したモデルオプティマイザーが用意されている.
個別に必要なものだけをセットアップすることも可能だが,今回はサポートしているモデルオプティマイザーをすべて入れる.

$ cd /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites
$ sudo ./install_prerequisites.sh

インストール容量は80MBちょっとだった.

とりあえず動作確認

かんたんなデモを実行してOpenVINOが動くことを確認しましょう.
以下のフォルダにいくつかデモが入っている.

$ cd /opt/intel/openvino/deployment_tools/demo

CUI環境なら以下の画像分類デモが良いでしょう.
車の画像(car.png)を入力に推論を実行する.

$ ./demo_squeezenet_download_convert_run.sh

...

Top 10 results:

Image /opt/intel/openvino/deployment_tools/demo/car.png

classid probability label
------- ----------- -----
817     0.6853030   sports car, sport car
479     0.1835197   car wheel
511     0.0917197   convertible
436     0.0200694   beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon
751     0.0069604   racer, race car, racing car
656     0.0044177   minivan
717     0.0024739   pickup, pickup truck
581     0.0017788   grille, radiator grille
468     0.0013083   cab, hack, taxi, taxicab
661     0.0007443   Model T

[ INFO ] Execution successful

GUI環境なら以下のデモが良いでしょう.
ナンバープレートを含む特定の車両属性を識別する.

./demo_security_barrier_camera.sh

f:id:T-takeda:20200828154138p:plain 終了するときは画像ビューアウィンドウを閉じる.

GPU(Intel_HD_Graphics)を使うようにする

OpenVINOがIntel_HD_Graphicsを使えるようにセットアップしてあげる.
基本的には以下の手順だけ.簡単.

$ cd /opt/intel/openvino/install_dependencies/
$ sudo -E su
$ ./install_NEO_OCL_driver.sh

が,こんなエラーが出るかも知れません.
私は出ました.

Intel OpenCL graphics driver installer
Looking for previously installed user-mode driver...
dpkg-query: intel-opencl に一致するパッケージが見つかりません
dpkg-query: intel-ocloc に一致するパッケージが見つかりません
dpkg-query: intel-gmmlib に一致するパッケージが見つかりません
Found intel-igc-core installed, uninstalling...
dpkg: 依存関係の問題により、intel-igc-core の削除ができません:
 intel-igc-opencl は以下に依存 (depends) します: intel-igc-core (= 1.0.10-2407).

dpkg: パッケージ intel-igc-core の処理中にエラーが発生しました (--purge):
 依存関係の問題 - 削除しません
処理中にエラーが発生しました:
 intel-igc-core
ERROR: unable to remove intel-igc-core
       please resolve it manually and try to launch the script again.

同じ問題にぶち当たった人の記事↓
https://openvino.jp/configuration-ubuntu1804/
この記事では過去にOpenVINOをインストールしていた場合、依存関係で同じエラーが出るとされているが,私は過去にOpenVINOをInstallした記憶がない...はて?
ともかく,上記の記事の解決方法(手動でintel-igc-openclを削除)は効いたのでよしとしよう.

$ dpkg -r intel-igc-opencl
$ ./install_NEO_OCL_driver.sh

正常に完了すると以下のような忠告?が出るが,公式チュートリアルでは「無視していいよ」とのことなので何もしなくていい.

Installation completed successfully.

Next steps:
Add OpenCL users to the video group: 'sudo usermod -a -G video USERNAME'
   e.g. if the user running OpenCL host applications is foo, run: sudo usermod -a -G video foo
   Current user has been already added to the video group

If you use 8th Generation Intel® Core™ processor, you will need to add:
   i915.alpha_support=1
   to the 4.14 kernel command line, in order to enable OpenCL functionality for this platform.

GPUが使えるか動作確認

FPSで性能差が比較しやすいので,車両属性を識別のデモがいいだろう.
optionに-d GPUを指定して実行する.

$ ./demo_security_barrier_camera.sh -g GPU

途中で長いロードが入るが動いているので安心して結果を待とう.
f:id:T-takeda:20200828154250p:plain

CPU実行より,3.5倍以上のFPSが出ている.
GPUが有効になっていることは明らかだね.(ログにもちゃんとGPUを使っていることは出ている)

まとめ

OpenVINOを導入した.
Intel_HD_GraphicsをGPGPU用途で簡単に扱えるようになったので嬉しいね.
余裕があればOpenVINOで他の学習済モデルを実行する(応用編)の執筆もするかもしれない.
以上.