az ml environment create --file env_train.yml --registry-name <registry-name>
この名前とバージョンの環境がレジストリに既に存在するというエラーが発生する場合は、env_train.yml の version フィールドを編集するか、CLI で別のバージョンを指定して env_train.yml のバージョンの値をオーバーライドすることができます。
# use shell epoch time as the version
version=$(date +%s)
az ml environment create --file env_train.yml --registry-name <registry-name> --set version=$version
ヒント
version=$(date +%s) は Linux でのみ動作します。 これが機能しない場合は、$version をランダムな番号に置き換えてください。
az ml environment create コマンドの出力から環境の name と version を記録しておき、次のようにそれらを az ml environment show コマンドで使います。 次のセクションでレジストリにコンポーネントを作成するときに、name と version が必要になります。
az ml environment show --name SKLearnEnv --version 1 --registry-name <registry-name>
これとは異なる名前またはバージョンを使用した場合、より一般的な表現は environment: azureml://registries/<registry-name>/environments/<sklearn-environment-name>/versions/<sklearn-environment-version> のようになります。したがって、それに応じて <registry-name>、<sklearn-environment-name>、<sklearn-environment-version> を置き換えてください。 その後、次のように az ml component create コマンドを実行してコンポーネントを作成します。
az ml component create --file train.yml --registry-name <registry-name>
ヒント
同じ CLI コマンド az ml component create を使って、ワークスペースまたはレジストリにコンポーネントを作成できます。
--workspace-name を指定してコマンドを実行するとワークスペースにコンポーネントが作成され、--registry-name でコマンドを実行するとレジストリにコンポーネントが作成されます。
train.yml を編集したくない場合は、次のように CLI で環境名をオーバーライドできます。
az ml component create --file train.yml --registry-name <registry-name>` --set environment=azureml://registries/<registry-name>/environments/SKLearnEnv/versions/1
# or if you used a different name or version, replace `<sklearn-environment-name>` and `<sklearn-environment-version>` accordingly
az ml component create --file train.yml --registry-name <registry-name>` --set environment=azureml://registries/<registry-name>/environments/<sklearn-environment-name>/versions/<sklearn-environment-version>
az ml component create コマンドの出力からコンポーネントの name と version を記録しておき、次のようにそれらを az ml component show コマンドで使います。 次のセクションでワークスペースにトレーニング ジョブを作成して送信するときに、name と version が必要になります。
az ml component show --name <component_name> --version <component_version> --registry-name <registry-name>
az ml component list --registry-name <registry-name> を使って、レジストリ内のすべてのコンポーネントの一覧を表示することもできます。
az ml job create --file single-job-pipeline.yml --set jobs.train_job.component=azureml://registries/<registry-name>/component/train_linear_regression_model/versions/1
az ml job create --file single-job-pipeline.yml --workspace-name dev-workspace --resource-group <resource-group-of-dev-workspace>
az ml job create --file single-job-pipeline.yml --workspace-name test-workspace --resource-group <resource-group-of-test-workspace>
az ml job create --file single-job-pipeline.yml --workspace-name prod-workspace --resource-group <resource-group-of-prod-workspace>
# fetch the name of the train_job by listing all child jobs of the pipeline job
train_job_name=$(az ml job list --parent-job-name <job-name> --query [0].name | sed 's/\"//g')
# download the default outputs of the train_job
az ml job download --name $train_job_name
# review the model files
ls -l ./artifacts/model/
ヒント
前提条件のセクションで説明されているように、既定のワークスペースとリソース グループを構成していない場合、az ml model create を実行するには --workspace-name と --resource-group パラメーターを指定する必要があります。
警告
az ml job list の出力が sed に渡されます。 これは Linux シェルでのみ機能します。 Windows を使っている場合は、az ml job list --parent-job-name <job-name> --query [0].name を実行し、トレーニング ジョブ名に含まれる引用符を除去します。
# create model in registry
az ml model create --name nyc-taxi-model --version 1 --type mlflow_model --path ./artifacts/model/ --registry-name <registry-name>
同じ CLI コマンド az ml model create を使って、ワークスペースまたはレジストリにモデルを作成できます。
--workspace-name を指定してコマンドを実行するとワークスペースにモデルが作成され、--registry-name でコマンドを実行するとレジストリにモデルが作成されます。
jobs=ml_client_workspace.jobs.list(parent_job_name=pipeline_job.name)
for job in jobs:
if (job.display_name == "train_job"):
print (job.name)
ml_client_workspace.jobs.download(job.name)
mlflow_model = Model(
path="./artifacts/model/",
type=AssetTypes.MLFLOW_MODEL,
name="nyc-taxi-model",
version=str(1), # use str(int(time.time())) if you want a random model number
description="MLflow model created from local path",
)
ml_client_registry.models.create_or_update(mlflow_model)
# fetch the name of the train_job by listing all child jobs of the pipeline job
train_job_name=$(az ml job list --parent-job-name <job-name> --workspace-name <workspace-name> --resource-group <workspace-resource-group> --query [0].name | sed 's/\"//g')
# create model in workspace
az ml model create --name nyc-taxi-model --version 1 --type mlflow_model --path azureml://jobs/$train_job_name/outputs/artifacts/paths/model
前提条件のセクションで説明されているように、既定のワークスペースとリソース グループを構成していない場合、az ml model create を実行するには --workspace-name と --resource-group パラメーターを指定する必要があります。
モデル名とバージョンを記録しておきます。 スタジオの UI で参照するか、az ml model show --name nyc-taxi-model --version $model_version コマンドを使うことによって、モデルがワークスペースに登録されているかどうかを検証できます。
次に、ワークスペースからレジストリに対してモデルを共有します。
# share model registered in workspace to registry
az ml model share --name nyc-taxi-model --version 1 --registry-name <registry-name> --share-with-name <new-name> --share-with-version <new-version>
ヒント
az ml model create コマンドでモデル名とバージョンを変更した場合は、適切な値を使っていることを確認してください。
上記のコマンドには、"--share-with-name" と "--share-with-version" という 2 つの省略可能なパラメーターがあります。 これらが指定されていない場合、新しいモデルの名前とバージョンは、共有されているモデルと同じになります。
az ml model create コマンドの出力からモデルの name と version を記録しておき、次のようにそれらを az ml model show コマンドで使います。 次のセクションで推論のためにモデルをオンライン エンドポイントにデプロイするときに、name と version が必要になります。
az ml model show --name <model_name> --version <model_version> --registry-name <registry-name>
また、az ml model list --registry-name <registry-name> を使ってレジストリ内のすべてのモデルを一覧表示したり、Azure Machine Learning スタジオの UI ですべてのコンポーネントを参照したりすることもできます。 グローバル UI に移動して、レジストリ ハブを探します。
jobs=ml_client_workspace.jobs.list(parent_job_name=pipeline_job.name)
for job in jobs:
if (job.display_name == "train_job"):
print (job.name)
model_path_from_job="azureml://jobs/{job_name}/outputs/artifacts/paths/model".format(job_name=job.name)
print(model_path_from_job)
上で作成したパスを使って、トレーニング ジョブの出力からモデルをワークスペースに登録します。
mlflow_model = Model(
path=model_path_from_job,
type=AssetTypes.MLFLOW_MODEL,
name="nyc-taxi-model",
version=version_timestamp,
description="MLflow model created from job output",
)
ml_client_workspace.models.create_or_update(mlflow_model)
# share the model from registry to workspace
ml_client.models.share(name="nyc-taxi-model", version=1, registry_name=<registry_name>, share_with_name=<new-name>, share_with_version=<new-version>)
出力からモデルの name と version を記録しておき、次のようにそれらを ml_client_workspace.model.get() コマンドで使います。 次のセクションで推論のためにモデルをオンライン エンドポイントにデプロイするときに、name と version が必要になります。
az ml online-deployment create --file deploy.yml --all-traffic
スコアリング URI をフェッチし、サンプルのスコアリング要求を送信します。 スコアリング要求のサンプル データは、cli/jobs/pipelines-with-components/nyc_taxi_data_regression フォルダーの scoring-data.json にあります。
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n reg-ep-1234 -o tsv --query primaryKey)
SCORING_URI=$(az ml online-endpoint show -n reg-ep-1234 -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @./scoring-data.json
ヒント
curl コマンドは Linux だけで機能します。
前提条件のセクションで説明されているように、既定のワークスペースとリソース グループを構成していない場合、az ml online-endpoint および az ml online-deployment コマンドを実行するには --workspace-name と --resource-group パラメーターを指定する必要があります。
オンライン エンドポイントを作成します。
online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint for mlflow model",
auth_mode="key"
)
ml_client_workspace.begin_create_or_update(endpoint)
# test the deployment with some sample data
ml_client_workspace.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="demo",
request_file=parent_dir + "/scoring-data.json"
)