はじめに
回帰タスクを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」がリストの中にあるのを確認できます。
続いて登録したモデルをデプロイしていきますが、その前に!エンドポイントの作成が必要なので先に作ります。
エンドポイントの作成・status確認
エンドポイント作成はManegedOnlineEndpoint
クラスを使います。
endpoint_name
には任意の文字列を入力します。
ここで注意点ですが、エンドポイントの名前には「_(アンダーバー)」が使えないので、「-(ハイフン)」を使うようにしましょう。
今回はモデルのrunIDの「_」を「-」に変更したものをエンドポイント名にします。
ここでもエンドポイントが作成が終わったか状態を確認してみます。
name
にはエンドポイント作成時に入力した名前を入れ、実行します。
実行結果はこちらです。
provisioning_state
がSucceededになっていたら、作成完了です!
また、scoring_uri
にはRESTエンドポイントが記載されており、これは後ほど使うので保存します。
それではこのエンドポイントを使って今度はデプロイを行います。
デプロイ
デプロイにあたって必要なファイルがあるのでダウンロードします。
必要なファイルはモデルの生成時に出力されるconda_env_v_1_0_0.ymlとscoring_file_v_2_0_0.pyの2つです。ダウンロードの方法はいくつかあるので紹介します。
ポータルサイトから
トレーニングで生成されたベストモデルの「出力とログ」から直接ダウンロードできます。
Pythonから
BLOBやSAS生成してダウンロードする方法もあります。
「outputs」フォルダに必要なファイルをダウンロードしました。
ダウンロードした「conda_env_v_1_0_0.yml」と「scoring_file_v_2_0_0.py」の中身も見てみましょう。
yamlファイルは他のデータセットを使ってもあまり中身は変わりませんが、時々バージョンが更新されているようです。
scoringファイルの方はデータセットによって、data_sample
とresult_sample
が変わります。
この2つのファイルを手に入れたらManegedOnlineDeployment
クラスでデプロイします。
ManegedOnlineDeployment()
のname
には任意のデプロイ名を入力し、実行します。
今回はエンドポイント名と同じ名前に設定しました。
また、conda_file
とscoring_script
には先ほどダウンロードしたファイルのパスを入力します。
デプロイの実行時間は今回おおよそ10~15分ほどかかりました。
デプロイ状況を確認できるコードも載せます。
実行し、provisioning_state
がSucceeded
になればデプロイ完了です。
デプロイ後は推論を行います。
推論
推論にあたってAPIキーが必要になるので取得します。
実行したらAPIキーが返ってくるので、これを保存して推論を行います。
推論のPythonコードはStudioのエンドポイントの「使用」タブにあるものをコピペして使います。
url
にはエンドポイントのstatus確認の時に得た、RESTエンドポイントを入力します。
api_key
にも先ほど取得したAPIキーを入れます。
また、StudioにあるPythonコードをそのまま実行すると、各パラメータのデータ型がトレーニングデータと違ったり、パラメータが足りなかったりなどの問題があったので、data
部分は編集が必要です。
推論結果はこちらです。