はじめに
機械学習・深層学習をする際は、まずグラフィックボード入りの端末や仮想マシンを準備して、必要に応じてクラスタ構成を組む、等のインフラ側の準備が必要ですが、最近これらのインフラ構築を簡略化するサービスが出始めています。
今回は、それらのサービスのうち、Azure Batch AIを利用して、深層学習プログラムを実行してみたいと思います。
※Batch AIのサービス利用開始までの準備作業手順が多いため、準備編とジョブ実行編に分けて掲載します。
Azure Batch AIとは?
Microsoft Azure上で、深層学習・機械学習向けの仮想インフラ構築が出来るサービスです。2017年5月に "Azure Batch AI Training" (Private Preview)という名称で発表されていましたが、2017年10月にPublic Previewとなった際に名称変更されたようです。
(本稿ではこれ以降、「Batch AI」と記載します。)
[参考]
・ https://azure.microsoft.com/ja-jp/updates/public-preview-azure-batch-ai/
・ https://docs.microsoft.com/en-us/azure/batch-ai/
Batch AI でできること
Batch AIでは、機械学習・深層学習のトレーニングやモデル作成を行う為のリソース管理とジョブスケジューリングの機能を利用することができます。
[参考]
・ https://docs.microsoft.com/ja-jp/azure/batch-ai/overview
主な機能は下記の通りです。
- リソース管理
* VMクラスタの作成(VMはGPU有り/CPUのみのどちらも選択可能。)
* クラスタの自動or手動スケーリング
* VM間のSSH通信設定とリモートアクセス
* (Azure Storageへ出力する場合)streamingを含む各種ログ・出力ファイルへのアクセスが可能(出力ログ/stdout/stderr/モデル)
- ジョブ実行管理
* バッチジョブの実行、繰り返し、インタラクティブトレーニング
* 優先度を考慮したジョブキュー設定が可能
* 低優先度VM(共有インスタンス)やリザーブドインスタンスが利用可能。(ジョブ優先度に応じて使い分け、コスト抑制が可能)
* VM障害発生時に再起動とジョブステータス提供が可能
- サポートされるリソース
* 深層学習・機械学習フレームワーク
+ CNTK、TensorFlow、Chainer等をサポート
* ストレージ
+ Azure Files、マネージドNFSサーバ等をストレージとして利用可能
+ リモートファイル共有をVMやコンテナからマウント可能
* 管理プログラム開発
+ Azure CLI、Batch AI SDK(Python・C#・Java)での開発が可能
+ Azureポータルの監視機能を利用可能
+ Microsoftの各種AI(開発)ツールとの統合
+ 認証・役割ベースのアクセス制御としてAzure Active Directoryを利用可能
Batch AI利用のための準備
前提条件
Batch AIを利用するためには、下記が必要となります。
1. Azureサブスクリプション:無料トライアルサブスクリプション、MSDN、各種有償サブスクリプションのどれでも可。
2. Azure-Python SDK (azure-mgmt-batchai)もしくはAzure CLI 2.0:Python Jupyter notebookを使用する場合はAzure-Python SDK、コマンドラインから実行したい場合はAzure CLI 2.0を使用します。 インストール方法は、それぞれのリンク先をご参照ください。
3. Azure Storageアカウント: 作成方法はこちらをご参照ください。※本稿時点(2018年3月)ではBatch AIを利用可能なリージョンが限られているので、米国東部リージョンなどでの作成をおススメします。
Batch AIのサービスを利用するための準備
Batch AIを利用するためには、(利用するサブスクリプションに対して初回のみ)下記手順を実行する必要があります。
BatchAIリソースプロバイダの登録
1. Azureポータルにログインします。
2. [すべてのサービス]→[サブスクリプション]を選択します。
3. BatchAIで利用するサブスクリプションを選択し、メニューから[リソースプロバイダ]を選択します。
4. [Microsoft.BatchAI]と[Microsoft.Batch]の[登録]をそれぞれクリックすると、サブスクリプションにリソースプロバイダが登録されます。
(リソースプロバイダは種類が多いですが、検索窓に"Batch"等の単語を入力して絞り込むことが可能です。)
※プロバイダの登録には最大15分程度かかります。
登録完了すると、[状態]の項目が[Registering]→[Registered]となります。
サービスプリンシパル認証の資格情報を作成する
Python SDKを利用する場合、アカウント認証ではなく、サービスプリンシパル認証を利用する必要があります。
設定手順は下記の通りです。
1. Azureポータルにログインします。
2. [すべてのサービス]→[Azure Active Directory]を選択します。
3. Azure Active Directoryの[プロパティ]を選択し、ディレクトリIDをコピーします。
4. Azure Active Directoryのメニューから、[アプリの登録]→[+新しいアプリケーションの登録]を選択します。
5. アプリケーションの名前(任意の名称でOK)とURL(とりあえず架空のURLでも作成可能)を入力します。
[アプリケーションの種類]は[Webアプリ/API]を選択します。
各項目を設定したら、[作成]を選択します。
6. Azure Active Directoryのアプリケーション登録から、アプリケーションを選択します。
※上記で作成したアプリがリストに表示されない場合は、プルダウンメニューから[すべてのアプリ]を選択してください。
7. 作成したアプリを選択すると、アプリケーションの概要が表示されるので、
「アプリケーションID」の項目をコピーします。これがAzure Active DirectoryクライアントIDです。
8. 作成したアプリの認証キーを生成するため、[設定]→[キー]を選択します。
9. キーの[説明] (任意の名称)と[有効期限] (1年/2年/期限なし)を入力します。入力したら、[保存]を選択します。
10. キーを保存すると、キーの値が表示されます。(図のグレーの箇所に表示されます。)
画面遷移してしまうと、後からキーの値を再表示することが出来ないため、この場で忘れずにキーの値をコピーしてください。
11. 作成したアプリにサブスクリプションのロールを割り当てます。([すべてのサービス]→[サブスクリプション]を選択します。)
12. Azure Batch AIに使用するサブスクリプションを選択し、[アクセス制御(IAM)]→[追加]を選択します。
13. [アクセス許可の追加]にて、[役割]に[共同作成者]、[アクセスの割り当て先]に[Azure ADのユーザー、グループ、またはアプリケーション]を選択します。
[選択]の項目に、上記で作成したアプリの名称を入力すると、下のリスト領域にアプリが表示されるので、そちらを選択します。
(アプリ名の先頭数文字を入力するだけで検索可能です。また、リスト領域にはADユーザー等が表示されますが、アプリは[選択]から検索をかけないと表示されないようです。)
14. 「保存」を選択してロールの割り当てを完了します。
15. [アクセス制御(IAM)]画面に戻ると、上記で割り当てたロールのリストに、今回作成したアプリが表示されます。
※上記で取得したAzure Active DirectoryクライアントIDとアプリケーションキーを、Pythonプログラム内での認証に利用します。
サブスクリプションにBatch AIの"Network共同作成者"ロールを付与する
1. BatchAIで利用するサブスクリプションを選択し、メニューから「アクセス制御(IAM)」→「+追加」を選択します。
2. [アクセス許可の追加]にて、[役割]に[ネットワーク共同作成者]、[アクセスの割り当て先]に[Azure ADのユーザー、グループ、またはアプリケーション]を選択します。
3. [選択]の項目に文字("Microsoft Azure BatchAI"の先頭数文字)を入力すると、下のリスト領域にアプリが表示されるので、その中から[Microsoft Azure BatchAI]を選択します。
(こちらも上記と同じく、[選択]から検索をかけないとリスト領域に表示されないようです。)
4. 「Save」を選択すると、ロールが割り当てられます。
Batch AI開発環境の準備
Batch AI管理クライアントのインストール
コマンドプロンプト等から下記コマンドを使用して、Batch AI管理クライアントをインストールします。
(事前にPythonをインストールしておく必要があります。)
pip install azure-mgmt-batchai
Azure Python SDKをインストールする
Batch AIではAzureの各種サービス(Azureストレージ、資格情報など)のAPIを利用するため、Azure Python SDKのパッケージをインストールする必要があります。
※インストール方法はこちらをご参照ください
Jupyterノートブックをインストールする
Jupyter Notebookをこちらからインストールするか、下記コマンドを実行してください。
python -m pip install jupyter
ここまででBatch AIを利用するための準備は完了です。
クラスタ作成~ジョブの実行については、次回に記載します。
次回
Azure Batch AIのクラスタを作成し、サンプルジョブを実行してみます。