AzureMachineLearningの使い方(全体を理解するため
の入門編)
Date:2021-04-14
1
AzureMachineLearningとは
機械学習モデルのトレーニング、デプロイ、
自動化、管理、追跡に使用できるクラウドベ
ースの環境
類似サービスとしては、AWSのSageMaker
やGCPのAIPlatformがある
参考:AzureMachineLearningとは
2
機械学習(MachineLearning:ML)とは
ざっくりいうと、、、入力データを元に、推論、予測をする
3
AMLのしくみ:アーキテクチャと概念
参考:https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-azure-machine-
learning-architecture 4
ワークスペースとAMLスタジオ
機械学習ワークスペースは、AzureMachineLearningの最上位レベルのリソース
AzureMachineLearningスタジオから依存リソースを統合的に操作できる
AzureMachineLearningスタジオとは、データサイエンティスト開発者向けのWebポ
ータル
参考:AzureMachineLearningスタジオとは 5
コンピューティング先
コンピューティング先は、トレーニングスクリプト
を実行したり、サービスのデプロイをホストしたり
するために使用するマシンまたはマシンのセット
コンピューティング先として、ローカルコンピュー
ターまたはリモートコンピューティングリソースを
使用できる
コンピューティング先を使用することにより、ロー
カルコンピューターでトレーニングを開始し、その
後トレーニングスクリプトを変更することなくクラ
ウドにスケールアウトできる
6
AMLのフルマネージドVM
AzureMachineLearningには、機械学習タスク用に構成された以下の2つのフルマネージド
クラウドベース仮想マシン(VM)が導入されています。
コンピューティングインスタンス:
機械学習用にインストールされた複数のツールと環境を含むVM
主な用途は、開発ワークステーション
実態はVMなので、sshログインも可能
AMLStudioもしくはSDKから作成が可能
トレーニングジョブと推論ジョブのコンピューティング先としても使用可能
コンピューティングクラスター:
マルチノードスケーリング機能を備えたVMのクラスター
大規模なジョブと運用環境のコンピューティング先に適している
ジョブが送信されるときに自動的にスケールアップされる 7
コンピューティングインスタンス
AMLStudioでnotebookを実行する際はコンピューティングインスタンスの起動が必要
インスタンスはAMLStudioもしくはSDKから作成が可能
8
コンピューティングクラスター
モデルの学習や推論に利用
自動スケーリングの際のmaxnodeやインスタンスサイズ、VNETを指定可能
クラスターはAMLStudioもしくはSDKから作成が可能
pythonSDKから作成する例
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
# Specify the configuration for the new cluster
compute_config = AmlCompute.provisioning_configuration(vm_size="STANDARD_D2_V3",
min_nodes=0,
max_nodes=4,
vnet_resourcegroup_name=vnet_resourcegroup_name,
vnet_name=vnet_name,
subnet_name=subnet_name)
# Create the cluster with the specified name and configuration
cpu_cluster = ComputeTarget.create(ws, cpu_cluster_name, compute_config)
9
サポートされているコンピューティング先
AzureMachineLearningコンピューティングインスタンス
AzureMachineLearningコンピューティングクラスター
AzureKubernetesServiceクラスター
ユーザーのローカルコンピューター
リモート仮想マシン
AzureHDInsight
AzureBatch
AzureDatabricks
AzureDataLakeAnalytics
AzureContainerInstances
参考:トレーニングと推論のコンピューティング先を設定する-AzureMachineLearning
10
データセットとデータストア
AzureMachineLearningDatasetsによって、データへのアクセスと操作がより容易に
なる
データセットは、ローカルファイル、パブリックURL、AzureOpenDatasets、または
Azureストレージサービスから、データストアを介して作成できる
AzureStorageやDBをデータストアとして登録できる
11
データセットとデータストア
参考:クラウドでのデータアクセスをセキュリティ保護する-AzureMachineLearning 12
データストアとして登録可能なストレージソリューション
AzureBlobStorage
AzureFileShare
AzureSQLDatabase
AzurePostgreSQL
AzureDatabaseforMySQL(制限あり)
他
参考:Azureのストレージサービスに接続する-AzureMachineLearning
13
AzureBlobStorageをデータストアとして登録する例
from azureml.core.datastore import Datastore
batchscore_blob = Datastore.register_azure_blob_container(ws,
datastore_name="images_datastore",
container_name="sampledata",
account_name="pipelinedata",
overwrite=True)
def_data_store = ws.get_default_datastore()
14
環境
環境とは、機械学習モデルのトレーニングやスコアリングが行われる環境をカプセル化した
ものです。環境では、トレーニングとスコアリングのスクリプトに関連する、Pythonパッケ
ージ、環境変数、およびソフトウェア設定を指定します。
15
データストア、環境、コンピューティング先の関係
参考:TrainingPythonmodelsonAzure-AzureArchitectureCenter
16
環境を作成する例
from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import DEFAULT_GPU_IMAGE
# イメージにはない python package の追加
cd = CondaDependencies.create(pip_packages=["tensorflow-gpu==1.15.2",
"azureml-core", "azureml-dataset-runtime[fuse]"])
env = Environment(name="parallelenv")
env.python.conda_dependencies=cd
env.docker.base_image = DEFAULT_GPU_IMAGE # 利用するコンテナイメージ
上記では、モデル実行に使用するcontainerimage、condapackage(pythonlibrary)を指定
しています。
17
実験
実験は、モデル実行のグループです。実験は、常に1つのワークスペースに属します。実行
を送信するときは、実験名を指定します。実行に関する情報は、その実験に格納されます。
実験を送信するときに名前が存在しない場合は、新しい実験が自動的に作成されます。
実験の作成例
from azureml.core import Experiment
experiment = Experiment(workspace=ws, name="diabetes-experiment")
参考:https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-azure-machine-
learning-architecture#experiments
18
機械学習における実験管理の概念
様々な条件を変えて実験を行い、モデルの性能を計測します。
参考:WhatisautomatedML?AutoML-AzureMachineLearning 19
モデル
モデルは、名前とバージョンによって識別されます。既存のモデルと同じ名前でモデルを登
録するたびに、レジストリではそれが新しいバージョンと見なされます。バージョンはイン
クリメントされ、新しいモデルは同じ名前で登録されます。
参考:https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-azure-machine-
learning-architecture#model-registry
20
ログ記録
AzureMachineLearningでは、標準的な実行メトリックが自動的にログに記録されます。た
だし、PythonSDKを使用して任意のメトリックをログに記録することもできます。
AzureStorageに自動で保存される
21
AzureMachineLearningパイプライン
AzureMachineLearningパイプラインは、独立して実行できる完全な機械学習タスクの
ワークフロー
サブタスクは、パイプライン内の一連のステップとしてカプセル化される
再実行する必要がないステップはスキップして、前回実行時のキャッシュを利用できる
パイプラインでは、異なるタスクには異なるハードウェアを使用することを選択できる
中間データはダウンストリームのコンピューティングターゲットへとシームレスに流れ
る
パイプラインを発行した後は、任意のプラットフォームまたはスタックからパイプライ
ンを再実行できるRESTエンドポイントを構成できる
定時実行のスケジュールを設定することが可能
参考:機械学習パイプラインとは-AzureMachineLearning
22
パイプラインの例
参考:チュートリアル:デザイナーを使用して自動車の価格を予測する-AzureMachine
Learning 23
パイプラインのサブタスクを作成する例
step02 = PythonScriptStep(name="step02",
script_name="./src/step02.py",
arguments=["--storage", dr_storage,
"--date", str_date],
inputs=[dr_storage],
compute_target=aml_compute,
source_directory=source_directory,
runconfig=run_config_model,
allow_reuse=False)
24
順次的に実行するようにパイプラインを構築する例
step02.run_after(step01)
step03.run_after(step02)
steps = [step03]
pipeline1 = Pipeline(workspace=ws, steps=steps)
並列に実行する場合
steps = [step01, step02, step03]
pipeline1 = Pipeline(workspace=ws, steps=steps)
25
エンドポイント
エンドポイントは、クラウドでホストできるWebサービスまたは統合デバイスデプロイ用
IoTモジュールへのモデルのインスタンス化です。
Webサービスエンドポイント
リアルタイムエンドポイント
パイプラインエンドポイント
IoTモジュールエンドポイント
参考:アーキテクチャと主要な概念-AzureMachineLearning
26
Webサービスエンドポイント
RESTAPIエンドポイントをAzureContainerInstances、AzureKubernetesService、
またはFPGAにデプロイできる
自動スケールを有効にしてある場合は、Azureでデプロイが自動的にスケーリングされ
る
エンドポイントの監視ができる
参考:アーキテクチャと主要な概念-AzureMachineLearning 27
Webサービスエンドポイント
HTTP要求を送信して推論結果を得ることができる
import requests
# send a random row from the test set to score
random_index = np.random.randint(0, len(X_test)-1)
input_data = "{"data": [" + str(list(X_test[random_index])) + "]}"
headers = {'Content-Type': 'application/json'}
# for AKS deployment you'd need to the service key in the header as well
# api_key = service.get_key()
# headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}
resp = requests.post(service.scoring_uri, input_data, headers=headers)
print("POST to url", service.scoring_uri)
#print("input data:", input_data)
print("label:", y_test[random_index])
print("prediction:", resp.text)
参考:イメージの分類チュートリアル:モデルをデプロイする-AzureMachineLearning 28
パイプラインエンドポイント
RESTエンドポイントを使用して、プログラムでMLパイプラインを呼び出し、パイプラ
インワークフローを自動化できる
同じエンドポイントを使用して複数のパイプラインを管理し、バージョンを指定して呼
び出すことができる
29
開発環境
AMLStudioだとSDKのインストールが不要
SDKのインストールによりローカルでの開発が可能
VScode拡張(プレビュー版)が公式から提供されている
30
まとめ
AzureMachineLearningを使うことで、機械学習モデルの開発、デプロイ、自動化、管
理が容易になる
31
感想
AMLはプレビュー版の機能も多く、まだ成熟していない印象。今後さらに安定したサー
ビスになることを期待
フィールドテスト運用中に、Azure側の障害が2回あった
パイプラインの実行準備が何らかの理由で失敗
パイプラインのサブタスクのうち、1つが開始されず、ログやアラートも機能
しなかった
AMLの良いと思うところ
パイプラインでサブタスクごとにインスタンススペックを指定でき、ジョブ数に応
じたスケールアウトを自動化できる
機械学習モデルのエンドポイントを、負荷分散可能な形で容易に作成できる
32
参考文献
AzureMachineLearningのドキュメント
microsoft/MLOpsPython
Azure/ACE_Azure_ML/slides
AzureVirtualMachineとMACaddress-Qiita
33

Azure Machine Learning の使い方 (全体を理解するための入門編)