Azure Machine Learning で実験を追跡してモデルをデプロイする
この記事では、Azure Machine Learning で MLflow API を使用してトレーニング スクリプトにログ記録コードを追加し、実験を追跡する方法について説明します。 実行のメトリックを監視して、モデル作成プロセスを強化できます。
この図は、MLflow Tracking を使用して、実験の実行メトリックを追跡し、Azure Machine Learning ワークスペース内にモデル成果物を保存する例を示しています。
前提条件
新しいノートブックを作成する
Azure Machine Learning と MLFlow SDK は、Data Science Virtual Machine (DSVM) にあらかじめインストールされています。 これらのリソースには、azureml_py36_* conda 環境でアクセスできます。 JupyterLab でランチャーを選択し、このカーネルを選択します。
ワークスペースを設定する
Azure portal にアクセスして、前提条件の一部としてプロビジョニングしたワークスペースを選択します。 次の図に示すように、構成ファイル config.json のダウンロードに注目してください。 このファイルをダウンロードし、DSVM 上の作業ディレクトリに保存します。
構成ファイルには、ワークスペース名、サブスクリプションなどの情報が含まれています。 これらのパラメーターをこのファイルでハード コーディングする必要はありません。
DSVM の実行を追跡する
Azure Machine Learning ワークスペース オブジェクトを設定するには、このコードをノートブックまたはスクリプトに追加します。
import mlflow
from azureml.core import Workspace
ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
Note
追跡 URI の有効期間は最大 1 時間です。 一定のアイドル時間の経過後にスクリプトを再起動した場合は、get_mlflow_tracking_uri API を使用して新しい URI を取得してください。
データを読み込む
この例では、糖尿病のデータセットを使用します。scikit-learn に含まれている、よく知られた小規模データセットです。 このセルでは、データセットを読み込み、ランダムのトレーニング セットとテスト セットに分割します。
from sklearn.datasets import load_diabetes
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
import joblib
X, y = load_diabetes(return_X_y = True)
columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
data = {
"train":{"X": X_train, "y": y_train},
"test":{"X": X_test, "y": y_test}
}
print ("Data contains", len(data['train']['X']), "training samples and",len(data['test']['X']), "test samples")
追跡の追加
Azure Machine Learning SDK を使用して実験の追跡を追加し、永続化されたモデルを実験の実行レコードにアップロードします。 このコード サンプルでは、ログを追加して、実験の実行にモデル ファイルをアップロードします。 モデルは、Azure Machine Learning モデル レジストリにも登録されます。
# Get an experiment object from Azure Machine Learning
from azureml.mlflow import register_model
experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)
with mlflow.start_run():
# Log the algorithm parameter alpha to the run
mlflow.log_param('alpha', 0.03)
# Create, fit, and test the scikit-learn Ridge regression model
regression_model = Ridge(alpha=0.03)
regression_model.fit(data['train']['X'], data['train']['y'])
preds = regression_model.predict(data['test']['X'])
# Output the Mean Squared Error to the notebook and to the run
print('Mean Squared Error is', mean_squared_error(data['test']['y'], preds))
mlflow.log_metric('mse', mean_squared_error(data['test']['y'], preds))
# Save the model
model_file_name = 'model.pkl'
joblib.dump(value = regression_model, filename = model_file_name)
# upload the model file explicitly into artifacts
mlflow.log_artifact(model_file_name)
# register the model
register_model(mlflow.active_run(), 'diabetes_model', 'model.pkl', model_framework="ScikitLearn")
Azure Machine Learning で実行を表示する
Azure Machine Learning スタジオで実験の実行を表示できます。 左側のメニューで [実験] を選択し、[experiment_with_mlflow] を選択します。 上記のスニペットで実験に別の名前を付ける場合は、選んだ名前を選択します。
ログに記録された平均二乗誤差 (MSE) が表示されます。
実行を選択すると、[出力 + ログ] に、その他の詳細と選択したモデルを表示できます。
Azure Machine Learning にモデルをデプロイする
このセクションでは、DSVM でトレーニングされたモデルを Azure Machine Learning にデプロイする方法について説明します。
手順 1:推論コンピューティングの作成
次のスクリーンショットに示すように、Azure Machine Learning スタジオの左側のメニューで [コンピューティング] を選択します。
[新しい推論クラスター] ペインで、以下について詳細を入力します。
- コンピューティング名
- Kubernetes Service - [新規作成] を選択します
- リージョンを選択します
- 仮想マシン サイズを選択します (このチュートリアルでは、既定の Standard_D3_v2 で十分です)
- クラスターの目的 - [開発テスト] を選択します
- ノード数は 1 にする必要があります
- ネットワーク構成 - 基本
次のスクリーンショットはこれを示しています。
[作成] を選択します
手順 2:コードなしの推論サービスのデプロイ
コードで register_model
を使用してモデルを登録したときに、sklearn としてフレームワークを指定しました。 Azure Machine Learning では、これらのフレームワークに対して、コードなしのデプロイがサポートされています。
- scikit-learn
- Tensorflow SaveModel 形式
- ONNX モデル形式
コードなしのデプロイとは、モデル成果物から直接デプロイできることを意味します。 特定のスコアリング スクリプトを指定する必要はありません。
糖尿病モデルをデプロイするには、Azure Machine Learning スタジオの左側のメニューに移動し、[モデル] を選択します。 次に、登録されている diabetes_model を選択します。
次に、モデル詳細ウィンドウの [デプロイ] ボタンを選択します。
モデルのデプロイ先は、手順 1 で作成した推論クラスター (Azure Kubernetes Service) です。 サービスの名前と、手順 1 で作成した AKS コンピューティング クラスターの名前を指定して、詳細を入力します。 また、[CPU 予約容量] を 0.1 から 1 に、[メモリ予約容量] を 0.5 から 1 に増やすことをお勧めします。 [詳細設定] を選択し、詳細を入力してこの増加を設定します。 その後、次のスクリーンショットに示すように、[デプロイ] を選択します。
手順 3:使用
モデルが正常にデプロイされたら、左側のメニューから [エンドポイント] を選択し、デプロイされたサービスの名前を選択します。 次のスクリーンショットに示すように、モデルの詳細ウィンドウが表示されます。
デプロイの状態は [移行中] から [正常] に変化します。 さらに、詳細セクションには、アプリケーション開発者が ML モデルをアプリに統合するために使用できる REST エンドポイントと Swagger URL が記載されています。
Postman を使用してエンドポイントをテストできます。または、Azure Machine Learning SDK を使用することもできます。
from azureml.core import Webservice
import json
# if you called your service differently then change the name below
service = Webservice(ws, name="diabetes-service")
input_payload = json.dumps({
'data': X_test[0:2].tolist(),
'method': 'predict' # If you have a classification model, you can get probabilities by changing this to 'predict_proba'.
})
output = service.run(input_payload)
print(output)
手順 4:クリーンアップ
継続的なコンピューティング料金が発生しないように、手順 1 で作成した推論コンピューティングを削除します。 これを行うには、Azure Machine Learning スタジオの左側のメニューで、[コンピューティング] > [推論クラスター] > を選択し、特定の推論コンピューティング リソース > [削除] を選択します。
次のステップ
- Azure Machine Learning でのモデルのデプロイの詳細について説明します
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示