Azure Blob Storage をデータストアとして登録する例
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()
環境とは、機械学習モデルのトレーニングやスコアリングが行われる環境をカプセル化したものです。 環境では、トレーニングとスコアリングのスクリプトに関連する、Python パッケージ、環境変数、およびソフトウェア設定を指定します。
データストア、環境、コンピューティング先の関係
参考: Training Python models on Azure - Azure Architecture Center
環境を作成する例
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 # 利用するコンテナイメージ
上記では、モデル実行に使用する container image、conda package (python library) を指定しています。
実験は、モデル実行のグループです。 実験は、常に 1 つのワークスペースに属します。 実行を送信するときは、実験名を指定します。 実行に関する情報は、その実験に格納されます。 実験を送信するときに名前が存在しない場合は、新しい実験が自動的に作成されます。
実験の作成例
from azureml.core import Experiment
experiment = Experiment(workspace=ws, name="diabetes-experiment")
機械学習における実験管理の概念
様々な条件を変えて実験を行い、モデルの性能を計測します。
モデルは、名前とバージョンによって識別されます。 既存のモデルと同じ名前でモデルを登録するたびに、レジストリではそれが新しいバージョンと見なされます。 バージョンはインクリメントされ、新しいモデルは同じ名前で登録されます。
Azure Machine Learning では、標準的な実行メトリックが自動的にログに記録されます。 ただし、Python SDK を使用して任意のメトリックをログに記録することもできます。
パイプラインの例
パイプラインのサブタスクを作成する例
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)
順次的に実行するようにパイプラインを構築する例
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)
エンドポイントは、クラウドでホストできる Web サービスまたは統合デバイス デプロイ用 IoT モジュールへのモデルのインスタンス化です。
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)