GPU導入
ここではFACE01でGPUのパワーが引き出せるよう設定を行います。
作業はUbuntu20.04をベースに行いますが、Windows10の設定でもご参考になると思います。
まず(1)推奨される導入方法を記載します。この場合、自動判別されたバージョンのライブラリやディスプレイドライバがインストールされます。
次に、ディスプレイドライバや関連するライブラリを消去した上で、それらを(2)個別に正しくインストールする作業手順を記載します。
これはドライバのバージョンアップや強制再起動などの理由でまれにシステムに不具合が生じる可能性があり、対処として自動判別に頼らず人が正しく情報を整理して、不具合が起こらない組み合わせを選択する必要があるためです。
機器に搭載されているGPUチップの種類からディスプレイドライバのバージョンや必要なライブラリのバージョンを、複数の選択肢の中から正しく選択する作業手順となります。
記載している情報は私が推奨する作業手順であり、正確な情報は「NVIDIA Accelerated Linux Graphics Driver README and Installation Guide」にあります。ご参照ください。
目次
(1) 推奨される導入方法
Ubuntu 20.04でのデバイスドライバ導入は以下のようになります。
公開鍵の取得とドライバ導入方法
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt-get update
$ sudo apt-get -y install cuda
$ apt-get install -y nvidia-cuda-toolkit
$ apt-get install -y libcudnn8
$ apt-get install -y libcudnn8-dev
$ apt-get install -y libcublas
少し前とやり方が変わっています。(CUDA Toolkit 11.8 Downloadsを参照ください。)
参考のため少し前のやり方を載せます。
# wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
# mv cuda-ubuntu2004.pin \
# /etc/apt/preferences.d/cuda-repository-pin-600
# apt-key adv --fetch-keys \
# https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
# add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
# apt update && apt upgrade -y
# 推奨バージョンの確認
# ubuntu-drivers devices
# ドライバインストール
# ubuntu-drivers autoinstall
導入方法や公開鍵が変わっていますので注意してください。
ディスプレイドライバや関連するライブラリを消去する
# sudo apt-get purge *nvidia-*
# sudo apt-get purge cuda-*
(2) 個別に正しくインストールする作業手順
必要となるライブラリやディスプレイドライバのバージョンを個別に正しくインストールするには、以下に記載するステップを踏みます。
- 以下の情報を確認
- 確認した情報をもとに導入
- ディスプレイドライバ
- CUDA Toolkit
- cuBLAS, cuDNN
- Pythonライブラリ再インストール
用語
簡単な用語の説明を記載します。正確な情報は上述の通り「NVIDIA Accelerated Linux Graphics Driver README and Installation Guide」をご参照ください。
アーキテクチャ
Nvidia社が出しているGPUの「世代」

GPU Compute Capability
そのGPUチップの性能を表した数値。「SM バージョン」というバージョン番号で表現されます。このバージョン番号は、GPUハードウェアでサポートされている機能を識別し現在のGPUカードで使用できるハードウェア機能や命令を判断するために使用されます。
Nvidia用ディスプレイドライバ
GPUを使用するためのドライバ
CUDA Toolkit
GPUを汎用目的に使用するために必要なライブラリ
cuDNN, cuBLAS
深層学習用ライブラリ, 行列計算用ライブラリ
情報を確認
アーキテクチャを調べるには
List of Nvidia graphics processing unitsからお使いのGPUカードを検索してください。例えばGeForce 1660tiならば以下の画像のように表示されますので「アーキテクチャ = Turing」と分かります。

ディスプレイドライバのバージョンを知るには
このURLにアクセスして持っているビデオカードやOSの種類を選択して検索ボタンを押すと、どのドライバが良いか結果を出してくれます。ダウンロードタイプは「製品ブランチ」を選んでください。


赤線が引いてある箇所をみると「515.76」であることが分かります。
GPU Compute Capabilityを知るには
GPUs supportedの項のテーブルから検索します。

たとえばGeForce GTX 1660 Tiなら「7.5」であることが分かります。

CUDA Toolkitのバージョンを知るには
cuDNN Support Matrixを参照してアーキテクチャから調べます。下の図は「Turing」で調べた結果です。CUDA Compute CapabilityはGPU Compute Capabilityのことです。上述したとおり「7.5」なのでここでは複数のバージョンを選べるよということになります。

どれを選ぶかは上述した「ドライバのバージョン」を参考にします。
Table 3. CUDA Toolkit and Corresponding Driver Versionsを参照してください。

ちなみにこのページは頻繁に更新されリンクも途切れやすくなっています。もしご自身のブックマークがリンク切れになった場合は「CUDA Toolkit Documentation」をキーワードとして検索してください。


上の図より、ディスプレイドライバ「515.76」に対応するCUDA ToolkitのバージョンはCUDA 11.7であることが分かりました。
参考として2022年10月30日時点での対応表を下に転載します。
CUDA Toolkit | Toolkit Driver Version | |
---|---|---|
Linux x86_64 Driver Version | Windows x86_64 Driver Version | |
CUDA 11.8 GA | >=520.61.05 | >=522.06 |
CUDA 11.7 Update 1 | >=515.48.07 | >=516.31 |
CUDA 11.7 GA | >=515.43.04 | >=516.01 |
CUDA 11.6 Update 2 | >=510.47.03 | >=511.65 |
CUDA 11.6 Update 1 | >=510.47.03 | >=511.65 |
CUDA 11.6 GA | >=510.39.01 | >=511.23 |
CUDA 11.5 Update 2 | >=495.29.05 | >=496.13 |
CUDA 11.5 Update 1 | >=495.29.05 | >=496.13 |
CUDA 11.5 GA | >=495.29.05 | >=496.04 |
CUDA 11.4 Update 4 | >=470.82.01 | >=472.50 |
CUDA 11.4 Update 3 | >=470.82.01 | >=472.50 |
CUDA 11.4 Update 2 | >=470.57.02 | >=471.41 |
CUDA 11.4 Update 1 | >=470.57.02 | >=471.41 |
CUDA 11.4.0 GA | >=470.42.01 | >=471.11 |
CUDA 11.3.1 Update 1 | >=465.19.01 | >=465.89 |
CUDA 11.3.0 GA | >=465.19.01 | >=465.89 |
CUDA 11.2.2 Update 2 | >=460.32.03 | >=461.33 |
CUDA 11.2.1 Update 1 | >=460.32.03 | >=461.09 |
CUDA 11.2.0 GA | >=460.27.03 | >=460.82 |
CUDA 11.1.1 Update 1 | >=455.32 | >=456.81 |
CUDA 11.1 GA | >=455.23 | >=456.38 |
CUDA 11.0.3 Update 1 | >= 450.51.06 | >= 451.82 |
CUDA 11.0.2 GA | >= 450.51.05 | >= 451.48 |
CUDA 11.0.1 RC | >= 450.36.06 | >= 451.22 |
CUDA 10.2.89 | >= 440.33 | >= 441.22 |
CUDA 10.1 (10.1.105 general release, and updates) | >= 418.39 | >= 418.96 |
CUDA 10.0.130 | >= 410.48 | >= 411.31 |
cuDNNのバージョンを知るには
上述の「Table 1. Supported NVIDIA Hardware and CUDA Version」からcuDNNのバージョンは「8.6.0」ということが分かります。

集めた情報のまとめ
以上の作業から必要となるバージョンはこのようになります。
- ディスプレイドライバのバージョン
- 515.76
- CUDA Toolkitのバージョン
- 11.7
- cuDNNのバージョン
- 8.6.0
これをもとにそれぞれのインストールを行います。
もしインストールをした後で再び問題が発生するならディスプレイドライバのバージョンを下げてみてください。実際私の場合は以下の条件でインストールし直しました。
- ディスプレイドライバのバージョン
- 510.85.02
- CUDA Toolkitのバージョン
- 11.6
- cuDNNのバージョン
- 8.6.0
それぞれのインストール
それぞれのインストールはUbuntuであればSynapticから簡単に行うことが出来ます。

インストールが終わったら下のようにして確認しておくと良いでしょう。

Pythonライブラリの再インストール
GPUに対応させるためPythonライブラリの再インストールを行います。
requirements.txtから一括インストールする前にdlibが正しくインストールできるかチェックしてください。dlibが正しくインストールできればGPU関連ライブラリ・ドライバの導入が成功した証明になります。
# Deactivate
deactivate
# Remove venv dirs
rm -rf ~/bin/FACE01/bin
rm -rf ~/bin/FACE01/share
rm -rf ~/bin/FACE01/lib64
rm -rf ~/bin/FACE01/include
rm -rf ~/bin/FACE01/lib
# Remove pip cache dir
rm -rf ~/.cache/pip
# Re-Make virtual environment
python3 -m venv ./
# Activate
. bin/activate
# Upgrade modules pip, setuptools, wheel
pip install -U pip setuptools wheel
# Install dlib
pip install dlib
dlibが正しくインストールできたかチェックします。
$ cd bin/FACE01
$ ~/bin/FACE01 . bin/activate
(FACE01)
$ ~/bin/FACE01 python
Python 3.8.10 (default, Jun 22 2022, 20:18:18)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dlib
>>> dlib.DLIB_USE_CUDA
True
>>>
「True」と表示されたらOKです。

Falseと表示された場合はインストールしたバージョンが正しく動作していません。ディスプレイドライバのバージョンを下げてその場合の正しい組み合わせを試してみてください。
dlibのインストールチェックが正しく終了したら一括インストールを行います。
$ ~/bin/FACE01 pip install -r requirements.txt

Successfully built GPUtil memory-profiler pyqrcode
Installing collected packages: PySimpleGUI, pyqrcode, mpmath, mojimoji, GPUtil, flatbuffers, urllib3, typing_extensions, tornado, sympy, six, pyparsing, psutil, protobuf, Pillow, numpy, kiwisolver, idna, humanfriendly, fonttools, cycler, charset-normalizer, certifi, attrs, absl-py, snakeviz, requests, python-dateutil, packaging, opencv-python, opencv-contrib-python, nptyping, memory-profiler, contourpy, coloredlogs, onnxruntime, matplotlib, mediapipe
Successfully installed GPUtil-1.4.0 Pillow-9.1.1 PySimpleGUI-4.60.1 absl-py-1.3.0 attrs-22.1.0 certifi-2022.9.24 charset-normalizer-2.0.12 coloredlogs-15.0.1 contourpy-1.0.6 cycler-0.11.0 flatbuffers-22.10.26 fonttools-4.38.0 humanfriendly-10.0 idna-3.4 kiwisolver-1.4.4 matplotlib-3.6.1 mediapipe-0.8.10 memory-profiler-0.60.0 mojimoji-0.0.12 mpmath-1.2.1 nptyping-2.2.0 numpy-1.22.4 onnxruntime-1.12.0 opencv-contrib-python-4.6.0.66 opencv-python-4.6.0.66 packaging-21.3 protobuf-3.20.1 psutil-5.9.1 pyparsing-3.0.9 pyqrcode-1.2.1 python-dateutil-2.8.2 requests-2.28.0 six-1.16.0 snakeviz-2.1.1 sympy-1.11.1 tornado-6.2 typing_extensions-4.2.0 urllib3-1.26.9
(FACE01)
上のように表示されたら一括インストール終了です。
サンプルスクリプトの実行
FACE01ライブラリが正しく動作するかサンプルスクリプトの動作検証をしてください。
~/bin/FACE01/ $ cd example/
(FACE01)
~/bin/FACE01/example $ python ~/bin/FACE01/example/display_GUI_window.py
[2022-10-31 07:39:46,273] [face01lib.load_priset_image] [load_priset_image.py] [INFO] Loading npKnown.npz
菅義偉
similarity 99.1%
coordinate (138, 240, 275, 104)
time 2022,10,31,07,39,47,935344
output
-------
麻生太郎
similarity 99.6%
coordinate (125, 558, 261, 422)
time 2022,10,31,07,39,47,935344
output
-------

まとめ
GPUを使った開発環境を整えるのはとっつきにくいと思われるかもしれませんが、慣れてしまえば突然のトラブルにも対処できます。ぜひ挑戦してみてください。
最後までお読み頂きありがとうございました。