LoginSignup
5
5

More than 5 years have passed since last update.

Azure Batch AIでCNTKのサンプルプログラムを動かしてみる(その1:BatchAI準備編)

Posted at

はじめに

機械学習・深層学習をする際は、まずグラフィックボード入りの端末や仮想マシンを準備して、必要に応じてクラスタ構成を組む、等のインフラ側の準備が必要ですが、最近これらのインフラ構築を簡略化するサービスが出始めています。
今回は、それらのサービスのうち、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. [すべてのサービス]→[サブスクリプション]を選択します。
   04_BatchAI_01_事前準備_12_サブスクリプション選択.png
 3. BatchAIで利用するサブスクリプションを選択し、メニューから[リソースプロバイダ]を選択します。
 4. [Microsoft.BatchAI]と[Microsoft.Batch]の[登録]をそれぞれクリックすると、サブスクリプションにリソースプロバイダが登録されます。
  (リソースプロバイダは種類が多いですが、検索窓に"Batch"等の単語を入力して絞り込むことが可能です。)
   04_BatchAI_02_事前準備_02_リソースプロバイダ登録.png
  ※プロバイダの登録には最大15分程度かかります。
    04_BatchAI_02_事前準備_03_リソースプロバイダ登録2.PNG
   登録完了すると、[状態]の項目が[Registering]→[Registered]となります。
    04_BatchAI_02_事前準備_04_リソースプロバイダ登録3.PNG

サービスプリンシパル認証の資格情報を作成する

Python SDKを利用する場合、アカウント認証ではなく、サービスプリンシパル認証を利用する必要があります。
設定手順は下記の通りです。
  1. Azureポータルにログインします。
  2. [すべてのサービス]→[Azure Active Directory]を選択します。
    04_BatchAI_01_事前準備_02_AAD選択.png
  3. Azure Active Directoryの[プロパティ]を選択し、ディレクトリIDをコピーします。
    04_BatchAI_01_事前準備_03_AAD_ID取得.png
  4. Azure Active Directoryのメニューから、[アプリの登録]→[+新しいアプリケーションの登録]を選択します。
    04_BatchAI_01_事前準備_04_AAD_新規アプリ作成.png
  5. アプリケーションの名前(任意の名称でOK)とURL(とりあえず架空のURLでも作成可能)を入力します。
    [アプリケーションの種類]は[Webアプリ/API]を選択します。
    各項目を設定したら、[作成]を選択します。
    04_BatchAI_01_事前準備_05_AAD_新規アプリ作成2.png
  6. Azure Active Directoryのアプリケーション登録から、アプリケーションを選択します。
    ※上記で作成したアプリがリストに表示されない場合は、プルダウンメニューから[すべてのアプリ]を選択してください。
    04_BatchAI_01_事前準備_06_AAD_作成アプリ選択1.png
    04_BatchAI_01_事前準備_07_AAD_作成アプリ選択2.png
  7. 作成したアプリを選択すると、アプリケーションの概要が表示されるので、
    「アプリケーションID」の項目をコピーします。これがAzure Active DirectoryクライアントIDです。
    04_BatchAI_01_事前準備_08_AAD_アプリID取得.png
  8. 作成したアプリの認証キーを生成するため、[設定]→[キー]を選択します。
    04_BatchAI_01_事前準備_09_AAD_アプリキー取得.png

  9. キーの[説明] (任意の名称)と[有効期限] (1年/2年/期限なし)を入力します。入力したら、[保存]を選択します。
    04_BatchAI_01_事前準備_10_AAD_アプリキー取得2.png
  10. キーを保存すると、キーの値が表示されます。(図のグレーの箇所に表示されます。)
    画面遷移してしまうと、後からキーの値を再表示することが出来ないため、この場で忘れずにキーの値をコピーしてください。
    04_BatchAI_01_事前準備_11_AAD_アプリキー取得3.png
  11. 作成したアプリにサブスクリプションのロールを割り当てます。([すべてのサービス]→[サブスクリプション]を選択します。)
    04_BatchAI_01_事前準備_12_サブスクリプション選択.png
  12. Azure Batch AIに使用するサブスクリプションを選択し、[アクセス制御(IAM)]→[追加]を選択します。
    04_BatchAI_01_事前準備_13_サブスクリプションIAM追加.png
  13. [アクセス許可の追加]にて、[役割]に[共同作成者]、[アクセスの割り当て先]に[Azure ADのユーザー、グループ、またはアプリケーション]を選択します。
    [選択]の項目に、上記で作成したアプリの名称を入力すると、下のリスト領域にアプリが表示されるので、そちらを選択します。
    (アプリ名の先頭数文字を入力するだけで検索可能です。また、リスト領域にはADユーザー等が表示されますが、アプリは[選択]から検索をかけないと表示されないようです。)
    04_BatchAI_01_事前準備_14_サブスクリプションIAM追加2.png
  14. 「保存」を選択してロールの割り当てを完了します。
    04_BatchAI_01_事前準備_15_サブスクリプションIAM追加3.png
  15. [アクセス制御(IAM)]画面に戻ると、上記で割り当てたロールのリストに、今回作成したアプリが表示されます。
    04_BatchAI_01_事前準備_16_サブスクリプションIAM追加4.png
※上記で取得したAzure Active DirectoryクライアントIDとアプリケーションキーを、Pythonプログラム内での認証に利用します。

サブスクリプションにBatch AIの"Network共同作成者"ロールを付与する

 1. BatchAIで利用するサブスクリプションを選択し、メニューから「アクセス制御(IAM)」→「+追加」を選択します。
    04_BatchAI_03_事前準備_03_ロール付与(IAM追加).png
 2. [アクセス許可の追加]にて、[役割]に[ネットワーク共同作成者]、[アクセスの割り当て先]に[Azure ADのユーザー、グループ、またはアプリケーション]を選択します。
 3. [選択]の項目に文字("Microsoft Azure BatchAI"の先頭数文字)を入力すると、下のリスト領域にアプリが表示されるので、その中から[Microsoft Azure BatchAI]を選択します。
    (こちらも上記と同じく、[選択]から検索をかけないとリスト領域に表示されないようです。)
    04_BatchAI_03_事前準備_04_ロール付与(IAM追加)2.png
 4. 「Save」を選択すると、ロールが割り当てられます。
    04_BatchAI_03_事前準備_05_ロール付与(IAM追加)3.png
   

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のクラスタを作成し、サンプルジョブを実行してみます。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5