Azure + Tensorflow + Kerasで画像認識やってみた part1
「Azure VMのGPUマシンにてKerasを使ってCNNで画像認識をしてみた」です。
最終目的はCTスキャンで取得したDICOMファイルを投げたら、臓器や骨ごとにラベリングした3Dモデルを返すことです。
が、とりあえずお約束のMNIST(エムニストと読むらしい)をやってみます。
目次
はじめに
画像認識を始めようと思い色々調べてみて判明したことを簡単に羅列します。
手法について
- 画像認識には色々な手段があり、ディープラーニング(層の深いニューラルネット)はその一手法
- よく聞くCNNはディープラーニングの一種であり、画像認識で目覚しい結果を出した
ライブラリについて
- ディープラーニングライブラリにはTensorflow、Theanoなどの選択肢があるがいずれも学習コストが高い
- 自由度は下がるが、KerasやChainerだと初心者にも比較的敷居が低い
- KerasはTesorflow、Theanoのラッパー
マシンについて(GPU)
- ディープラーニングでは計算量が膨大なのでGPUを使用する
- 並列計算できることでCPUより圧倒的に早い
- クラウドGPUとしてAzure Virtual Machine、AWS EC2が選択肢に挙げられる
- Azure Virtual Machineは分単位の課金なので個人でも気軽に始められる
- Microsoftの勉強会に参加すると無料でクレジットをプレゼントしてくれたりする
- Azure Virtual Machineには様々なシリーズがあり、GPUを使えるのはNシリーズである
- NシリーズにはNV、NC、NC2など色々あるが、とりあえずは一番安いのを使えば良い
- 違いを知りたい方はこちらの記事にまとめました
AzureでGPUインスタンス作成
Azureにログイン
Virtual Machinesを選択します
左上の追加ボタンから新しいVMを作成します
OSは「Ubuntu 16.04 LTS」を選択しました。
デプロイモデルはデフォルトの「Resource Manager」にして作成をクリック。
2017/05 情報
今回GPUを使用したNC, NVシリーズを使用するのですが、こちらに
現時点では、Linux GPU ドライバーのサポートは、Azure NC VM でのみご利用いただけます。
とあります。2017年5月現在NCシリーズは東日本、西日本リージョンでは利用できないので、「リージョン別のAzure製品」から利用可能な地域を選択する必要があります。
2017/12/26 追記
こちらでもまとめたようにNVシリーズにこだわる必要はないです。
NCシリーズで妥協すれば東日本リージョンでもOKです。
ちなみに現在のリージョン別 対応表。
SSHの応答速度的に快適さを求めるなら東日本でNVシリーズ
安さを求めるなら米国東部、米国西部2あたりでNCシリーズ
こんなところでしょうか。
お試し段階では何日もVM立てっぱなしってわけでもないので、東日本が快適かなと思います。
名前、ユーザー名、パスワード(or SSH鍵)、Resource groupをよしなに入力します。
ディスクの種類はHDDにします。
「東日本」を選択して「OK」(画像は米国西部2になっていますが)。
「サイズの選択」画面に移るので、「すべて表示」。
NVシリーズを選択します。
2017/05 情報
先の
現時点では、Linux GPU ドライバーのサポートは、Azure NC VM でのみご利用いただけます。
という文言が気になりますが、進めます。
こちらのチュートリアルはNVシリーズも対象にしていますが、やはりNVシリーズは推奨ではないようです。
Regarding the question of running GPU compute for deep learning on NV-Series, the GPU team has indicated that is not recommended. Bottom line is: Big GPU Computes (like deep learning) should only be done on NC-Series. NV is for visualization and graphics. See this blog for more details on NV vs NC series
可能ならばNCシリーズを使うべきなのでしょうが、今回はテストということもありますし、NVシリーズをディープラーニングに活用する勉強会を公式が主催しているようなので、このまま進めます。
2017/12/26 追記
上記イベントで聞いてみたところ、問題ないみたいです。
StorageをHDDに変更して、OK。STEP4の内容を確認してOK。
インスタンスが起動するまでしばらく待ちます。
IPアドレスは起動の度に変更されてしまうのでDNSを割り当てます。
こちらの動画を見れば設定方法がわかります。
SSH接続します(一回米国リージョンでインスタンス作ったけどSSH接続の速さが全然違う。。。)。
NVIDIAのGPUを確認
lspci | grep -i NVIDIA
1d25:00:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M60] (rev a1)
おっけーですね。
さてGPUを利用するにはドライバなどをインストールする必要があります。
Microsoftのブログに簡単なセットアップの方法が紹介されています。
こちらを参考に進めていきます。
まず、シェルスクリプトなどが入ったリポジトリをクローンしてきます。
git clone https://github.com/leestott/Azure-GPU-Setup.git
ドライバのインストールやらがまとめてシェルにされています。詳しい中身を見たければGithubへどうぞ。
まず一個目を実行。
./gpu-setup-part1.sh
NVIDIAドライバなどをインストールしたのち、自動で再起動がかかります。
ちょっと待ってから再起動が終わる頃合いを見て改めてSSH接続します(ちなみにAzureのダッシュボード上ではrunningになっていても再起動が終わってなかったりする)。
3分も待てば十分だと思います。
で、次は
./gpu-setup-part2.sh
で良いはずなのですが、ここでエラー。
You need to download cudnn-8.0 manually! Specifically, place it at: /home/xxx/gpu-setup/cudnn-8.0-linux-x64-v5.1.tgz
どこかでこけたのでしょうか?手動でダウンロードしてきます。
https://developer.nvidia.com/rdp/cudnn-download
こうしている間にも課金が。。。
急いでダウンロード。
FTPポート開けたりとかやり方調べるのに時間がかかりそうだったので、scpでインスタンスに送ります。
指定されたディレクトリに移動して、気を取り直して、
./gpu-setup-part2.sh
CUDA関連のものをインストールします。5分ぐらいかかりました。
終わったら、
source ~/.bashrc
テストコードを実行します。
python gpu-test.py
The TensorFlow library wasn't compiled to use ...
あたりが怪しい。
参考サイトではこうなる模様。
調べてみると問題なさそう?
参考: Tensorflow 1.0でGPU利用 with AWS
釈然としませんが、実際に何か学習させてみればわかるでしょう。
セットアップが終わったら実際に使うまでVMを停止しておきましょう。
つけっぱで課金されたらもったいないです。
次回
長くなってしまったので、MNISTを実際に試してみるのはpart2に続きます。
参考
初級: 人工知能は人間を超えるか
人工知能、機械学習、ディープラーニング、そこらへんのバズワードをさっくり知りたい人向け。
人工知能が普及したらどうなるのか、読み物として面白いです。
ゴリゴリ開発したい人には向いてないです。
中級: Pythonによるスクレイピング&機械学習
スクレイピングでデータを集めて、自分で学習させるところまで学べます。
全編が機械学習というわけではありませんが、実践的に機械学習を使って何かをしようとした時に付随して必要になる知識を勉強するのに役立ちます。
「機械学習のアルゴリズム自体を構築したい」という人より、「機械学習を使って何かしたい」という人におすすめ。
上級: ゼロから作るDeep Learning
学びの深い一冊です。ディープラーニングの中身を細かく解剖し、一つずつ自分で構築します。
Tensorflowなどのライブラリを使わないので、これらのライブラリの中身がどうなっているかということも学べます。
機械学習をブラックボックスではなくしっかり理解したい人向けです。