こちらの記事を参考に日本リージョンに合わせて設定を行います。細かい点が知りたい場合は以下リンクを参照してください。
キーワード
まずは今回使う各単語をさっくり端的に説明します。参考リンクを貼って置くので詳しいことを知りたい方はリンク先を参照してください。GPUとは
CPUと比較して並列処理が得意。もともと画像処理がメインの仕事だったが、大量に計算をする機械学習で活躍する。
Azureとは
Microsoftが提供するクラウドサービス。仮想環境にサーバを立てることなどができる。
Tensorflowとは
Googleが開発したディープラーニング用のライブラリ。
ビッグデータを分散学習するDeep LearningライブラリTensorFlowとは
Kerasとは
TensorflowやTheaoなど初心者には手を出しにくいライブラリを簡単に扱えるようにするラッパーライブラリ。
Deep learningで画像認識⑤〜Kerasで畳み込みニューラルネットワーク vol.1〜
MNISTとは
手書き文字の画像データセットで、画像認識を試す際によく使われます。
Azure VMでGPUインスタンスを作成
AzureのVirtual Machineを立てます。
GPUを使えるインスタンスは限られているので気をつけましょう。日本では今の所NVシリーズから選ばなくてはいけません。
Nシリーズについては先日NVIDIA, Microsoft主催のローンチイベントに参加して詳しくまとめたので詳しく知りたい方は以下の記事をご確認ください。
するとVMの画面が開かれるので、左上の「追加」ボタンからVMを作成します。
「Ubuntu 16.04 LTS」にします。
注意点ですが、「VMディスクの種類」はSSDからHDDに変更します。
1つ前の設定で東日本リージョンを選んだ場合はNVシリーズから選択します。
2017年6月現在、NVシリーズには「NV6」、「NV12」、「NV24」の3種類があります。
数字が大きいほどコア、RAMなど性能が高くなりますが、その分利用料も高くなるので用途に合わせて使いましょう。
今回のようにとりあえず使ってみる場合はNV6で十分です。
しばらく時間がかかるので待ちます。
Tensorflowセットアップ
この間に後ほど使うものを準備します。
NVIDIAのサイトからcuDNNをダウンロードします。
ダウンロードリンクは以下のものですが、まずはメンバー登録する必要があります。リンク先の指示に従ってください。
CUDAやcuDNNについては以下のリンクを参照ください。
「cuDNN v5.1 Library for Linux」をダウンロードします。
ダウンロードが終わる頃にはインスタンスが起ち上がっていると思います。
以降の作業はインスタンスにSSH接続して行います。
Microsoft社員のLee StottさんがGithubに公開しているシェルスクリプトを使います。
Githubからcloneしてきて、まずはpart1を実行します。
ドライバなどのインストールを自動で行ってくれます。
git clone https://github.com/leestott/Azure-GPU-Setup.git ./gpu-setup-part1.sh
gpu-setup/ ディレクトリに先ほどNVIDIAからダウンロードしたcudnn-8.0-linux-x64-v5.1.tgzをscpなりftpなりで置きましょう。
part2を実行します。
./gpu-setup-part2.sh
テストコードを実行してみます。
source ~/.bashrc python gpu-test.py
これでセットアップ完了です。
GPUマシンが用意でき、TensorflowでGPUを利用することができるようになりました。
Python環境、Kerasセットアップ
次はKerasを用意してMNISTを実行してみます。
今回はpyenvも併用します。
sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev cd /usr/local/bin git clone git://github.com/yyuu/pyenv.git ./pyenv sudo mkdir -p ./pyenv/versions ./pyenv/shims echo 'export PYENV_ROOT="/usr/local/bin/pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc
続いてpyenvを使ってanacondaをインストールします。
利用するバージョンをanacondaに変更して、pipでtensorflowとkerasをインストールします。
pyenv install anaconda3-4.3.0 pyenv rehash pyenv global anaconda3-4.3.0 pip install tensorflow-gpu keras
準備が完了したので、以下のサイトを参考にMNISTを実行します。
Python: Keras/TensorFlow の学習を GPU で高速化する (Mac OS X)
まずは対話モードを開いて、MNISTのデータセットをダウンロードします。
python >>> from keras.datasets import mnist >>> mnist.load_data()
次にサンプルプログラムをダウンロードします。
参考サイトの忠告通りにリソースの解放を追記します。
curl -O https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py echo 'K.clear_session()' >> mnist_cnn.py
プログラムを実行しましょう。
timeコマンドを使うことで実行に要した時間を計測できます。
time python mnist_cnn.py
ちなみに同様にMac book Proでプログラムを実行したところ1時間ほどかかりました。
約30分の1と、圧倒的ですね。
以上、クラウドのGPUを使ってディープラーニングを行う環境構築についてまとめました。
未だ気軽に購入するには高価なGPUですが、クラウドなら利用した時間分の課金で済みます。
AzureのNV6ならば¥162.18/時間です(東日本リージョン)。
ちょっと試してみるには経済的に済みますのでおすすめです。
ただし、使い終わったVMを停止するのを忘れないようにしましょう。
うっかり付けっ放しで放置したら、1日につき4000円弱が飛んでいきます。