はじめに
本稿では前回までに引き続き、Azure Batch AIでCNTKのサンプルジョブを実行してみます。
今回は、BatchAIクラスターでのジョブ実行を試してみます。
Batch AIサンプルジョブ実行
今回は、Github上でMicrosoftが公開しているサンプルプログラムを利用して、MNISTデータセットを使ったCNNの学習処理を行うジョブを作成してみます。
ジョブ実行手順
1. サンプルプログラムのデータをダウンロード
i. こちらからMNISTデータセットのファイルをダウンロードします。
※Zipファイルになっており、展開するとTrain-28x28_cntk_text.txt、Test-28x28_cntk_text.txtの2ファイルが入っています。
ii. こちらからConvNet_MNIST.cntkを取得します。
※こちらの「Clone or download」ボタンから、関連ファイル一式をまとめてダウンロードできます。
2. プログラムとデータをAzure File Storageにアップロード
i. Azure File Storageにディレクトリ作成
前回作成したファイル共有に、ディレクトリを3つ作成します。(「external」「cntk_samples」「mnist_dataset」)
ii. mnist_datasetに1-i.で取得したTrain-28x28_cntk_text.txt、Test-28x28_cntk_text.txtを、cntk_samplesに1-ii.で取得したConvNet_MNIST.cntkを、それぞれアップロードします。
3. ジョブの作成・実行
i. まず、ポータルの[すべてのサービス]→[バッチ AI]→[概要]→前回作成したBatch AIクラスター名を選択します。
ii. [概要]→[+追加 Batch AI ジョブ]から、ジョブを作成します。
iii. ジョブ名称(任意の名称)を入力し、サブスクリプション・優先度・ノード数・利用するBatch AIクラスター(前回の手順で作成したもの)を選択します。
※実験名は空欄でも実行できます。
iv. [ツールの種類]で「CNTK」を選択すると、CNTK実行のための設定項目が表示されます。
・ [言語の種類]では、今回BrainScriptを利用するので「BrainScript」を選択します。
・ [構成ファイル]では、実行するCNTKファイルのパスを入力します。
(今回は「\$AZ_BATCHAI_INPUT_CONFIG/Convnet_MNIST.cntk」と入力します。)
・ [コマンドライン引数]では、CNTKファイル実行時の引数を指定します。
(今回は、「rootDir=. dataDir=\$AZ_BATCHAI_INPUT_DATASET outputDir=\$AZ_BATCHAI_OUTPUT_MODEL」と入力します。)
※「\$AZ_BATCHAI_INPUT_CONFIG」「\$AZ_BATCHAI_INPUT_DATASET」「\$AZ_BATCHAI_OUTPUT_MODEL」については、後述します。
v. 標準出力の出力先と入力ディレクトリ(CNTKファイルやデータセットの参照先)を指定します。
今回は、
・ ID: CONFIG、 パスプレフィックス:\$AZ_BATCHAI_MOUNT_ROOT/external、パスのサフィックス: cntk_samples
・ ID: DATASET、 パスプレフィックス:\$AZ_BATCHAI_MOUNT_ROOT/external、パスのサフィックス: mnist_dataset
の2つを登録します。
※IDは $AZ_BATCHAI_(INPUT or OUTPUT)_[ID名]として、変数に追加されます。
※パスのサフィックスは、2.で作成したディレクトリ名です。
※[追加]ボタン押下後、ID/パスが空欄だと[選択]を押せないケースがあるようです。
その場合、ID/パスのところに任意の適当な文字を入れておくと、[選択]を押せるようになります。
(実際に登録されるのは、入力欄の下に表示された項目のみです。)
vi. 出力ディレクトリ(モデルファイルの出力先)を指定します。
vii. コンテナーの設定で、CNTK実行環境のコンテナイメージを選択します。
今回は、「microsoft/cntk:2.1-gpu-python3.5-cuda8.0-cudnn6.0」のイメージを選択します。
[OK]ボタンを押すと、ジョブが登録され、クラスタ上で実行されます。
※クラスターメニューの[ジョブ]から、登録したジョブ名を選択すると、実行状況を確認することが出来ます。
ファイル共有を確認すると、サブスクリプションID名のディレクトリが作成されており、その下層をたどっていくと、出力されたモデルファイルやログが格納されています。
これまで、CNTKを呼び出すにはpython等で色々コードを書く必要がありましたが、BatchAIではGUIが拡充されており、
コードをあまり書かなくても、モデル作成まで実施できるようになっています。
クラスタの増減も簡単にできる為、DeepLearningをちょっと試してみたい、という時にはかなり便利かもしれません。
補足
クラスタを使わないときは、Batch AIのクラスターメニュー→[スケール]から、[ノードのターゲット数]を「0」に指定するとノードが削除されるため、ノードの課金が停止されます。
※[ノードのターゲット数]が1以上だと、ノード数分の課金がかかり続けるので注意が必要です。
(特に、GPUを使えるNシリーズは単価が高いのでご注意ください..)