編集履歴
- 2020/10/14 [4. 推論用のコードの更新]: プログラムコードの更新
- 2020/10/12 [4. 推論用のコードの更新]: プログラムコードの更新
- 2020/10/6 [4. 推論用のコードの更新]: プログラムコードの更新
背景
Azure Machine Learning の AutoML は、Studioの画面上からジョブ実行と結果確認。そして、ACIもしくはAKSへの展開まで、GUIで行えます。ML for All Skillのゴールに向かってGUIでの作業も出来る事は素晴らしいと思います。
AutoMLには推論用のコードを自動生成する機能もありますので、更に便利です。
(プレビュー) コードなしのモデル デプロイ:
https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-deploy-no-code-deployment
ところが、この展開したモデルの推論結果に、いわゆる Probability、もしくはscore とでも言いましょうか。つまり数値での確度の情報が入っていません。
分類 (Classification) での出力結果のサンプル
'{"result": "no", "score": [{"no":0.9452897547,"yes":0.0547102403}]}'
このモデルは以下のチュートリアルで作成しました。
チュートリアル:Azure Machine Learning の自動 ML で分類モデルを作成する:
https://docs.microsoft.com/ja-jp/azure/machine-learning/tutorial-first-experiment-automated-ml
ここでは、カスタムデプロイ アセットを使って、Probability も出力するようにします。
準備するもの
- Azure のSubscription
手順
1. モデルの作成
自由に作成ください。
ここでは、先のチュートリアル (銀行のマーケティング担当者が、普通預金などから、定期預金にする顧客を類推するモデルを作成する) にある AutoML を利用してモデルを作成します。
2. モデルの選択
AutoMLでは、複数の学習ジョブを実行します。一番良いと思ったモデルを選択します。
アンサンブル学習を行っている場合が殆どだと思います。その場合は、VotingEnsemble
が殆どのケースで最も良い数値情報を持っています。
3. AutoML が生成したコードのダウンロード
[出力とログ]から、ジョブが生成したファイルの確認が出来ます。[outputs]フォルダの中から、以下のファイルをダウンロードします。
ファイル名 | 説明 |
---|---|
conda_env_v_1_0_0.yml | anaconda の環境ファイル |
scoring_file_v_1_0_0.py | 推論用のファイル |
4. 推論用のコードの更新
run 関数を以下の様に変更します。
ご自由にリファクタリングしてください😊
def run(data):
try:
result_predict = model.predict(data)
result_class_name = model.y_transformer.classes_
result_predict_proba = model.predict_proba(data)
result_with_score = pd.DataFrame(result_predict_proba, columns=result_class_name).to_json(orient='records')
result = (("{\"result\": \"%s\", \"score\": %s}" % (result_predict[0],result_with_score)).encode('ascii', 'ignore')).decode("utf-8")
return result
except Exception as e:
result = str(e)
return json.dumps({"error": result})
少し解説します。
probabiltyの取得には、predict_proba() で行えます。
配列で結果が返ってきますが、その並び順が、model.y_transformer.classes_
の並び順になっています。
適切ではないかと思いますが、scikit learn のリファレンスの中での RandomDorestClaasifier のものを例示します。
5. モデルのACIへの展開
Azure Machine Learning Studio のモデルの画面に戻ります。[デプロイ]から以下の画面を参照して
[エントリ スクリプト ファイル]
[Conda 依存関係ファイル]
を設定します。
注: この設定では動作確認を優先しているため。推論のエンドポイントは何も保護されていません。必要に応じて保護の設定を行ってください。
認証の設定 - 画面で [認証を有効]
TLS を使用して Azure Machine Learning による Web サービスをセキュリティで保護する:
https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-secure-web-service
仮想ネットワークを使用して Azure Machine Learning 推論環境をセキュリティで保護する:
https://docs.microsoft.com/ja-jp/azure/machine-learning/how-to-secure-inferencing-vnet
これで [デプロイ] を押して、ACIへの展開が完了するまで5分程度待ちます。
6. 結果確認
モデルがACIに展開されると、推論用のURLが作成されます。それをクリップボードにコピーするなどします。
RESTの呼び出しは任意の手段で😊
ここでは、Visual Studio CodeのREST Clientを使います。
Rest Client
https://marketplace.visualstudio.com/items?itemName=humao.rest-client
7. 必要に応じてクリーンアップ
ACIは展開時から停止あるいは削除するまで課金対象です!
適時、停止するなり、削除するなりしてください😊
まとめ
現時点では画面だけで操作しても、出来ない事が多少はあります。が、少し手を加えるだけで、カスタマイズも可能です。
今後のAzure Machine Learning の機能強化にも期待しましょう😊
サンプルコード:
https://github.com/dahatake/Azure-Machine-Learning-sample/tree/master/6.AutoML-Probability