仮想化かもしれない

何かをしたときの記録を許される(と思う)範囲で公開します。ぜんぶ個人の見解。不定期更新。仮想化、GPU、Ubuntuなど多めかも。

仮想GPUで、GUIから実行できる画像分類の学習・推論をやってみた (NVIDIA DIGITS)

NVIDIA vGPU を自由に使える環境を手に入れたので、

Deep Learning の実行を試してみることに。

環境はこんなかんじ。

f:id:a-koda:20211020110834p:plain

 

ワークロードは手軽さ&初めて見る人へのわかりやすさを考えて、

NVIDIA DIGITSを利用した画像分類をチョイス。

9割がたの操作をGUIからできるDeep Learning試行用ツール。

※画バレ

f:id:a-koda:20211020121927p:plain

 

コンテナなどの無料リポジトリ NGC (NVIDIA GPU Cloud) からNVIDIA-DIGITSを取得。

https://ngc.nvidia.com/catalog/containers/nvidia:digits


$ sudo docker pull nvcr.io/nvidia/digits:21.09-tensorflow-py3

 

しばらく待って確認。赤字のように出たらOK。

$ sudo docker images

REPOSITORY                  TAG                    IMAGE ID       CREATED       SIZE
nvcr.io/nvidia/digits       21.09-tensorflow-py3   22d4b7c5ed49   6 weeks ago   14.6GB


イメージをとってこれたので、さっそく起動。
$ nvidia-docker run --name digits -d -p 8888:5000 -v /home/user01/digits:/data nvcr.io/nvidia/digits:21.09-tensorflow-py3

DIGITSのWeb GUIはコンテナ内で5000番ポートを使って起動するので、

これをコンテナ外、つまりUbuntu VMの8888番にバインド。

Ubuntu VMにDIGITS用データ置き場 /home/user01/digits を作成し、

コンテナ内の /data にマウント。

これで  /home/user01/digits に置いたデータはコンテナ内でも参照できる。

 

GUIにアクセスしてみる。

http:// VMのIPアドレス>:8888

f:id:a-koda:20211020122415p:plain

今回は0-9の手書き数字の分類ができるモデルの学習に使えるオープンデータである

MNISTの画像を拝借。

http://yann.lecun.com/exdb/mnist/

f:id:a-koda:20211020122555p:plain

画像はこちらから→ https://ja.wikipedia.org/wiki/MNIST%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9#/media/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:MnistExamples.png



 

データ置き場に画像を配置。WinSCPなどで。

DIGITSの画像分類のデータセットの特徴:

たとえばディレクトリ"dog"をつくってその中に画像を放り込み、

データセット作成を実行すると、自動的にそれらの画像へタグ"dog"をつけてくれる。

テキストファイルでリストを作ったりする必要はない。

Tensorflowなどでやるようにコード実行してデータセット作る流れに慣れていると、

なんだか冗長な手順な気がするかもだが、わかりやすいといえばわかりやすいか。

今回は0-9の分類なので、フォルダの中身は以下のとおり。

f:id:a-koda:20211020123210p:plain    f:id:a-koda:20211020123048p:plain

データセット作成へ。ターゲットとして↑のMNISTのディレクトリを指定。

グレースケールで、ピクセルはMNISTなので28x28で。他はデフォルト。

f:id:a-koda:20211020123824p:plain

 

データセットができた。

f:id:a-koda:20211020124741p:plain

モデルの作成へ。

f:id:a-koda:20211020124754p:plain

f:id:a-koda:20211025104706p:plain

 

オプションはEpochのみ変更(30->5)。他はデフォルト。

モデル名の入力とデータセットの選択は必須なので注意。

 

学習開始。進捗が表示される。

f:id:a-koda:20211025104734p:plain


完了。オレンジ・赤の線画accuracy、つまりモデルの精度を表す値。
けっこうよさそう。

f:id:a-koda:20211025104928p:plain

GUIからできる推論を試してみる。まずファイルをアップロード。ここから。

f:id:a-koda:20211025105414p:plain

ちなみに、事前にペイントでこんなかんじに手書き数字をつくっておいた。
ファイル名:jimae01.jpg

f:id:a-koda:20211025105501p:plain


jimae01.jpgをアップロード。

f:id:a-koda:20211025105523p:plain


Classify One をクリックして推論を実行。

f:id:a-koda:20211025105627p:plain


別ウインドウが立ち上がり推論が開始される。
少し待つと結果が返ってくる。もう少し確信をもってほしいけど、いちおう正解。

f:id:a-koda:20211025110001p:plain





やりかたさえ確立してしまえば、ここまで実行するのは極めて簡単。

あとはデータセットやネットワーク、パラメータを変更して色々試すのがよさそう。
ちなみに今回、TensorFlowが備わっているDIGITSコンテナを利用したが、
フレームワークは他にCaffeも選べる模様。いずれそっちもやってみたい。