顔認証に GPU の導入!環境設定

グラフィックカード

画像の処理に於いて GPU の活用は当たり前になっています。
もともと Face01 シリーズは CPU だけでも処理が行えるように設計してあります。

今回は Face01 シリーズで GPU を用いるための環境設定をご紹介します。

全ての資料は Nvidia の公式サイトに詳細に載っています。以下これを原典と呼称します。

  • CUDA Tool Kit の導入についてはこちら
  • 過去のバージョンの CUDA Tool Kit のアーカイブはこちら&action=edit
  • cuDNN の導入についてはこちら
    予め会員登録が必要。
  • 過去のバージョンの cuDNN のダウンロードはこちら
  • cuDNN のサポート状況確認についてはこちら
  • Compute Capability について確認する場合はこちら

なお、古い GPU や極めて安価な GPU に関してはサポートしていると上記サイトに載っていても実際にはエラーになってしまう事が分かりました。すなわち

  • CUDA のインストールができない
    → gcc のバージョンが新しすぎてサポートしていない場合や gcc のバージョンを古いものに変えても ‘cc1plus’ が存在しないのでコンパイルできないとエラーが出てしまう
    /usr/include/crt/host_config.h:138:2: error: #error — unsupported GNU version! gcc versions later than 8 are not supported!*** 138 | #error — unsupported GNU version! gcc versions later than 8 are not supported!
    host_config.h の 138 行目をコメントアウトすることでインストールそのものができる場合もあるが CUDA 11 以外はエラーが出てしまう
    gcc-7: error trying to exec ‘cc1plus’: execvp: そのようなファイルやディレクトリはありません、というエラーが出る
    →リポジトリを登録しても原典にある組み合わせでパッケージ管理システムでインストールできない
  • CUDA のエラーが出てしまいプログラムが動作しない
    →CUDA 、cuDNN がインストールできても dlib をソースからインストールするとセグメンテーションエラーが出てしまう
    →cudaOccupancyMaxPotentialBlockSize(&num_blocks,&num_threads,K) エラーでプログラムが止まってしまう
     例)sm_35 対応の keplar では cuDNN 8 及び CUDA 11 のインストールはできるが実際には動作しない
       これらは非推奨であり将来的に廃止される。
       nvcc warning : The ‘compute_35’, ‘compute_37’, ‘compute_50’, ‘sm_35’, ‘sm_37’ and ‘sm_50’ architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

などが挙げられます。特に Ubuntu 20.04 において GT 710 のようなグラフィックボードはサポート対象になっていても正常に動作しません。(2020年9月17日現在)
Ubuntu 18.04 のサポート期限は 2023 年 4 月なのでそれまでそのままで使用するか、Ubuntu 20.04 や早めにサポートが切れてしまう Xubuntu 18.04 から Xubuntu 20.04 へ移行の場合はサポートされている新しいグラフィックボードを購入して最新の CUDA 11 系列を使用することになります。

しかしながら Dlib などのライブラリは 20.04 において2020年9月17日現在様々なバグ取り中であるので安易な導入は控えたほうがよろしいかと思います。

マシンの情報収集

CUDA 環境を構築するにあたってまず該当マシンの情報を収集します。具体的には下記のバージョンです。

  • kernel
    $ uname -a
  • GCC
    $ gcc –version
  • Glibc
    $ ldd –version

原典から引用します。

Some actions must be taken before the CUDA Toolkit and Driver can be installed on Linux:
Verify the system has a CUDA-capable GPU.

Verify the system is running a supported version of Linux.

Verify the system has gcc installed.

Verify the system has the correct kernel headers and development packages installed.

Download the NVIDIA CUDA Toolkit.

Handle conflicting installation methods.

Pre-installation Actions

この他に
Index of /compute/cuda/repos/ubuntu1804/x86_64
のサイトに羅列してあるたくさんのファイルを見ながら以下のような操作をします。

があります。

Ubuntu 18.04 においての CUDA インストール手順についてはこちらをご覧ください。

パッケージ管理システムでインストールする場合、メタパッケージを使用しないでください。メタパッケージでは常に最新のバージョンがインストールされます。これは synaptic であってもコマンドラインにしても同じです。

synaptic パッケージマネージャから「再読込」をしてください。
端末の場合は
$ sudo apt-get update
と入力します。

下図のように異なるバージョンの CUDA が存在するとその後のライブラリインストールの際失敗することがあります。原典を参考に必ずいずれかのバージョンに固定してください。

synaptic で cuda を選択
synaptic で cuda を選択
synaptic で cuDNN を選択
synaptic で cuDNN を選択

NVIDIA 公式サイト登録とダウンロード

NVIDIA の公式サイトから cuDNN をダウンロード出来るよう登録を済ませてください。
注意書きがありますが、おひとりさま一回限りのダウンロード許可となっています。実際には何度もダウンロードできます。試行錯誤の際、異なるバージョンの cuDNN が必要になることがあるので deb パッケージではなく tar 形式のものをダウンロードすることをおすすめします。

NVIDIA 登録サイト
NVIDIA 登録サイト
cuDNN をダウンロードする
cuDNN をダウンロードする
*** LICENSE AGREEMENT ***
By using this software you agree to fully comply with the terms and
conditions of the EULA (End User License Agreement). The EULA is located
at /usr/local/cuda-10.0/doc/EULA.txt. The EULA can also be found at
http://docs.nvidia.com/cuda/eula/index.html. If you do not agree to the
terms and conditions of the EULA, do not use the software.
CUDA のデモが見られる
CUDA のデモが見られる
CUDA のデモ
CUDA のデモ

「demo_suit」の中には上の図のように波をシミュレーションするプログラムもあります。ゲームなんかではおなじみですね。

Dlib の再インストール

端末から操作します。

$ pip3 uninstall dlib
Uninstalling dlib-19.19.0:
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/DESCRIPTION.rst
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/INSTALLER
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/METADATA
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/RECORD
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/WHEEL
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/metadata.json
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/top_level.txt
/home/terms/.local/lib/python3.6/site-packages/dlib.cpython-36m-x86_64-linux-gnu.so
Proceed (y/n)? y
Successfully uninstalled dlib-19.19.0
terms@terms-comp:~$ pip3 install dlib --verbose
Collecting dlib
1 location(s) to search for versions of dlib:

Dlib の最新版を git clone します。
github のここのページに書いてあるとおりにインストールしてください。
(CMake や build-essential などはインストール済みとします)
最後に

$ python3 setup.py install

あるいは

$ python3 setup.py install --user --record files.txt -f clean --all

オプションを調べるには $ python3 setup.py –help 。

このページも参考にしてください。

インストールが失敗した、正しく動作しない、などの場合は再インストールします。その際は $ python3 setup.py –help などでオプションを指定してください。具体的には

$ python3 setup.py install --record files.txt

としてから

$ cat files.txt | xargs rm -fr
$ cd ../
$ rm -fr dlib

としてインストールされたファイルを除去します。
予めダウンロードしていた Dlib ファイルを任意のディレクトリ(ホームディレクトリなど)にコピーしそのディレクトリに入って

$ python3 setup.py install --user --record files.txt -f clean --all

の様にインストールします。–user オプションをつけることによってホームディレクトリ以下にインストールすることができます。

まとめ

以上です。
かなり端折りましたが順番通りやっていただければ GPU に対応した Dlib をインストールすることが出来ます。

CUDA 関連のインストールは鬼門で、かなり多くの方がインストールで躓きます。ですので必ず原典を参考に、インストール前処理、インストール手順、インストール後処理をきちんと行いましょう。
また原典に沿ったインストール手順をしても非推奨のもの ( sm_XX が低いもの、即ち古いグラフィックカード ) ではインストールに失敗するか CUDA を利用するライブラリがエラーを吐きます。最新の OS で運用するのであればグラフィックカードの更新も考えておくと良いでしょう。

ちなみに GPU を使用すると下の図のように GPU Utilization の値が上がります。
検証に使った PC のグラフィックカードは GeForce GT 710 でローエンドになります。

GPU Utilization の値が上がっている図
GPU Utilization の値が上がっている図

この状態で動く Face01 は体感で分かるほど性能が上がります。

深層学習を使った顔位置判定をプログラム側に施すと、GPU Utilization が 100% になってしまい効果が十分に引き出せません。この様なローエンドのグラフィックカードではなく、相応のグラフィックカードが必要になりますが、この機能をオンにすることでより多人数の集団でも顔を認識させる事が出来るようになります。

下に GPU 使用時の Face01 の動作の様子を動画で載せました。
CUDA 環境でライブラリが統一されるとこのように動きが滑らかになります。
顔認証は画像解析ですから、やはり環境としては GPU と何らかの GPGPU フレームワークを使うのが吉です。
個人的にはベンダーロックインされる CUDA より他もあるじゃないか…とは思うのですが、一番盛り上がっているのが CUDA ですから仕方のないことかも知れません。

GPU 使用時のデモ動画

以上です

最後までお読み頂きありがとうございました。

Follow me!