【Azure AutoML】回帰タスクをPythonから行ってみた(トレーニング~推論まで)

はじめに

回帰タスクをAzure AutoMLを使ってPythonから行ってみます。

二項分類のタスクについてはこちらをご参考ください。

開発環境

  • OS Windows 10(NVIDIA GTX 1650Ti,16GB RAM, i5-10300H CPU)
  • Visual Studio Code 1.73.1
  • Python 3.8
  • AzureML Python SDK v2

回帰タスクをPythonから行う際の流れ

今回使用するデータセット

Azureのデータセットにある「Automobile price data (Raw)」を使って自動車価格予測をやってみます。デザイナーからExportしてデータセットを取り出しました。

それではトレーニングから行います!

トレーニング

regression()で回帰タスクのジョブ送信します。

最初はワークスペースの接続・データセットの指定・コンピューティングリソースの作成を行っています。個々の詳細はこちらの記事をご覧ください。

また、トレーニングの設定部分のexperiment_nameには実験名となる任意の文字列を入れ、target_column_nameには予測対象の列名を入れます。今回の自動車価格予測ではpriceがターゲット列なので、次のように入力します。

primary_metricでは評価方法を選べます。

回帰タスクで使える評価方法は以下の4つがあります。

  • spearman_correlation
  • normalized_root_mean_squared_error
  • r2_score
  • normalized_mean_absolute_error

今回は「r2_score」にしました。

最後はジョブの実験設定を行ってトレーニングを開始します。
実行したら次のようにジョブの詳細が返ってきます。

この中のnameには送ったジョブのIDが記載されています。

このジョブIDを使って次はジョブが終わったかどうかを確認します。

ジョブのstatusを確認

MLClientクラスのJobsメソッドを使います。

MLClientクラスのnameに先ほど保存したジョブIDをコピペします。
実行してstatusを見るとジョブの状態を見れます。

statusがCompletedになっており、ジョブが終わったことを確認できました!

また一緒に返ってきたautoml_best_child_run_idには、作成されたモデルの中で一番精度の良かったモデルのrunIDが記載されています。この後ベストモデルを登録する際にこのrunIDが必要になるので保存しておきます。

モデルの登録

それでは先ほど取得したベストモデルのrunIDを使ってモデル登録を行います。

Modelクラスのパス名にあるdcid.の後ろと、nameに先ほど保存したベストモデルのrunIDを入力すればOKです。

登録は実行してすぐに完了しますが、一応これもPythonからモデル登録できたかモデルの一覧を出して確認します。

実行したら、結果の一番下に今回登録した「frank_napkin_4j75l9y52g_2」がリストの中にあるのを確認できます。
無題.png

続いて登録したモデルをデプロイしていきますが、その前に!エンドポイントの作成が必要なので先に作ります。

エンドポイントの作成・status確認

エンドポイント作成はManegedOnlineEndpointクラスを使います。

endpoint_nameには任意の文字列を入力します。
ここで注意点ですが、エンドポイントの名前には「_(アンダーバー)」が使えないので、「-(ハイフン)」を使うようにしましょう。

今回はモデルのrunIDの「_」を「-」に変更したものをエンドポイント名にします。

ここでもエンドポイントが作成が終わったか状態を確認してみます。

nameにはエンドポイント作成時に入力した名前を入れ、実行します。

実行結果はこちらです。

provisioning_stateがSucceededになっていたら、作成完了です!
また、scoring_uriにはRESTエンドポイントが記載されており、これは後ほど使うので保存します。

それではこのエンドポイントを使って今度はデプロイを行います。

デプロイ

デプロイにあたって必要なファイルがあるのでダウンロードします。
必要なファイルはモデルの生成時に出力されるconda_env_v_1_0_0.ymlscoring_file_v_2_0_0.pyの2つです。ダウンロードの方法はいくつかあるので紹介します。

ポータルサイトから

トレーニングで生成されたベストモデルの「出力とログ」から直接ダウンロードできます。
image.png

Pythonから

BLOBやSAS生成してダウンロードする方法もあります。

「outputs」フォルダに必要なファイルをダウンロードしました。
image.png

ダウンロードした「conda_env_v_1_0_0.yml」と「scoring_file_v_2_0_0.py」の中身も見てみましょう。

yamlファイルは他のデータセットを使ってもあまり中身は変わりませんが、時々バージョンが更新されているようです。

scoringファイルの方はデータセットによって、data_sampleresult_sampleが変わります。

この2つのファイルを手に入れたらManegedOnlineDeploymentクラスでデプロイします。

ManegedOnlineDeployment()nameには任意のデプロイ名を入力し、実行します。
今回はエンドポイント名と同じ名前に設定しました。
また、conda_filescoring_scriptには先ほどダウンロードしたファイルのパスを入力します。

デプロイの実行時間は今回おおよそ10~15分ほどかかりました。
デプロイ状況を確認できるコードも載せます。

実行し、provisioning_stateSucceededになればデプロイ完了です。

デプロイ後は推論を行います。

推論

推論にあたってAPIキーが必要になるので取得します。

実行したらAPIキーが返ってくるので、これを保存して推論を行います。

推論のPythonコードはStudioのエンドポイントの「使用」タブにあるものをコピペして使います。
endpoint.png

urlにはエンドポイントのstatus確認の時に得た、RESTエンドポイントを入力します。
api_keyにも先ほど取得したAPIキーを入れます。

また、StudioにあるPythonコードをそのまま実行すると、各パラメータのデータ型がトレーニングデータと違ったり、パラメータが足りなかったりなどの問題があったので、data部分は編集が必要です。

推論結果はこちらです。

この記事を書いた人

azure-recipe-user