AIチームの大澤です.
AIモデルの学習をする上でGPU環境は欠かせないものですが,構築する上ではCUDA cuDNN Tensorflowなどを環境に合わせて適切なバージョンを入れないと動かなかったりするので大変です.
また,他にもちょっとしたことでインストールが上手く行かなかったりGPUを認識してくれなかったりすることがあるのも厄介なところです. 今回は新しいPCでYOLO v3を動かすためのGPU環境を構築したため,その手順を残しておきたいと思います.
0. まずはじめに
CUDA cuDNN TensorFlowをそれぞれどのバージョンの組み合わせにするのが良いかということですが,それに関しては以下のページに早見表が載っているので,この組み合わせでインストールをするのが良いとのことです.
今回は以下の組み合わせで導入し,YOLO v3を動かすところまで行いました. またpython環境が整っていないまっさらな状態なので,pythonもインストールしていきます.
- tensorflow-2.2.0
- CUDA 10.1
- cuDNN 7.6
- Python 3.8
その他情報
やることはこちらのとおりです.
- NVIDIAドライバをインストール
- CUDAをインストール
- cuDNNをダウンロード
- pythonをインストール
- 仮想環境(venv)を作成
- tensorflowをインストール
- YOLO v3を動かす
1.NVIDIAドライバをインストールする
インストールの前に,次のソフトウェアが入っている場合はアンインストールします.
大体のGPUマシンはゲーミングPC扱いになっており,ゲームに最適な設定でGPUを動かすためにGeForce Experienceというツールが入っているようです.こちらが入っていると,CUDAのインストールが上手く行かない場合があるとのこと. (参考:https://webbigdata.jp/study/post-9499)
ちなみに私の場合はNVIDIA FrameView SDKが見当たらなかったので,それ以外の2つをアンインストールしました.
それではNVIDIAのドライバをダウンロードしてきます.
自身の環境にあったドライバを選択します.私の場合は以下です. ダウンロードタイプはStudioドライバーで良いかと思います.
ダウンロードができたら無心でインストールをします.
2.CUDAをインストールする
CUDAをダウンロードします.
組み合わせ早見表によると10.1を入れる必要があるとのことなので,「CUDA Toolkit 10.1」をクリックします.
「Select Target Platform」は画像のようにしました.
こちらもダウンロードができたら無心でインストールをします.
3.cuDNNのダウンロード
cuDNNをダウンロードしていきます.今までの中で一番面倒です. というのも,メンバーシップ登録をしないとダウンロードさせてくれないからです.
Download cuDNN → Join now でメールアドレスを登録をしましょう.
無事にメンバーシップ登録が終わったらログインをし,cuDNNをダウンロードします. 早見表によるとcuDNNは7.6を入れる必要があります.そして今回CUDAは10.1なので, 「Download cuDNN v7.6.0 (May 20, 2019), for CUDA 10.1」をダウンロードしました.
zipファイルになっていると思うので,解凍をします.
解凍されたcudaフォルダには後ほどパスを通すので,参照しやすいところに置いておきたいです.Cドライブ直下にtoolsというフォルダを作り,その中に入れることにします.
パスの設定
ここでパスの設定を行います.以下の4行を環境変数に追加します.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\CUPTI\lib64 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include C:\tools\cuda\bin
4.Pythonのインストール
以下のURLからpythonをインストールします. 早見表ではPython3.8が対応しているとのことなので,今回はPython 3.8.8をインストールしました.
http:// https://www.python.org/downloads/
インストールができたら確認のため,コマンドプロンプトでpython -V
を実行してみます.
Pythonのバージョンが表示されるはずですが,私は表示されませんでした.
Pathが通ってなさそうなので,以下の2つをシステム環境変数へ追加します.
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python38 C:\Users\ユーザー名\AppData\Local\Programs\Python\Python38\Scripts
PC再起動後,コマンドプロンプトで再びpython -V
のコマンドを実行.
python 3.8.8
と表示されました.これでPythonのインストールは完了です.
5.仮想環境を作成(venv)
pythonで機械学習を行う際には様々なライブラリを使用しますが,そのライブラリのバージョンもプロジェクトによって異なる場合がよくあります.
「プロジェクトAはver.1.0で動くけど,プロジェクトBはver.2.0じゃないと動かない」となるのは面倒です. なのでプロジェクト毎に仮想環境を作り,プロジェクトAの仮想環境にはver.1.0を,プロジェクトBの仮想環境にはver.2.0のライブラリを入れてあげればいいよねということで,仮想環境を作成していきます.
公式でサポートされているので簡単です. まず,プロジェクト用のフォルダを作成します.今回はデスクトップにProjectフォルダを作り,その中にYOLOフォルダを作成しました.このYOLOフォルダ内に仮想環境を作成し,今後はその中で作業していきます.
デスクトップ └─ Project └─ YOLO
コマンドプロンプトを開き,cdコマンドでYOLOフォルダに移動します.
cd C:¥Users¥<ユーザー名>¥Desktop¥Project¥YOLO
ここでpython -m venv env
を実行します.
YOLOフォルダ内に「env」というフォルダが作成されればOKです.
引き続きコマンドプロンプトでenv¥Scripts¥activate
を実行すると仮想環境をアクティベートすることができます.deactivate
で仮想環境から抜けます.
これでYOLOフォルダ内に仮想環境を作成できました.
再度env¥Scripts¥activate
で仮想環境をアクティベートしたらtensorflowを入れていきます.
これ以降は仮想環境を立ち上げた状態で進めていきます.
6.tensorflow v2.2.0をインストール
ではpip install tensorflow==2.2.0
でインストールします.
終了したらtensorflowがGPUを認識するか確認をします.
コマンドプロンプトにpython
と入力し,対話モードでpythonを実行します.
次に以下の2行を入力します.
import tensorflow as tf tf.test.is_gpu_available()
出力にTrueと出れば認識できているので,exit()
と入力して対話モードを終了します.(参考:https://www.dan-myblog.com/post/52/)
最後にYOLOv3(GPU)の設定を行います.
7.YOLO v3を動かす
ソースファイルのダウンロード
YOLOv3をダウンロードします.git cloneでもzipファイルをダウンロードでもどちらでも構いません.
ダウンロードしたyolov3-tf2-masterフォルダ以下のファイル群を,上で作成した仮想環境内に配置する.
フォルダ構成 YOLO(仮想環境) ├── envフォルダ ├── yolov3-tf2-masterの中身一式 ︙
モデルのダウンロード
こちらからモデルをダウンロードし,dataフォルダに配置します. https://pjreddie.com/media/files/yolov3.weights
以下のコマンドでconvert.pyを実行します.*2
python convert.py --weights ./data/yolov3.weights --output ./checkpoints/yolov3.tf
モデルの変換ができたらYOLOを実行してみます. webカメラで検出を行いたいので,以下のコマンドを入力します.
python detect_video.py --video 0
うまくいっていればこれでYOLOが実行できているはずです. 私もかなり調べながら環境を構築しましたが,もう同じことはしたくないので備忘録も兼ねてこちらに残しておきます.
お疲れさまでした.
*1:ちなみにRTX30*系だとCUDA 11.系しか対応していないそうです.[参考:https://teratail.com/questions/331673]
*2:以下のページのReadMeにコマンドの説明が書いてありますhttps://github.com/zzh8829/yolov3-tf2