はじめに
Azure Machine LearningのAuto MLやデザイナーでモデルを簡単に作れることは分かったけど実際どうやって利用するのかに関しては情報が探しづらいため残しておきます。
モデルのデプロイ
今回はデザイナーを例にとります。デザイナーでモデルのデプロイをする際にはその推論パイプラインを丸ごとデプロイすることになります。Webのエンドポイントとしてデプロイする際にはWeb Service Input
とWeb Service Output
が必要になります。このモジュールを追加しておくことによってエンドポイントに対するリクエストを受け付け、推論パイプラインからの出力を受け取ることができます。
デプロイは画面右上のデプロイボタンから実行します。これを押下することでAzure Container InstanceもしくはAzure Kubernetes Service上に展開できます。テスト環境であればACI、本番環境であればAKSのような使い分けのイメージです。
エンドポイントをデプロイすると、Azure Machine Learningのワークスペースから参照できるようになります。
エンドポイントの使用
[テスト]タブから新しいデータに対する推論結果をテストすることができます。
[使用]タブでは、実際にアプリケーションに組み込む際にそのまま利用できるC#,Python,Rのサンプルコードが用意されています。
pythonコードを見てみると以下のJSONをエンドポイントに投げればよいことが分かります。
data = {
"Inputs": {
"WebServiceInput0":
[
{
'年月日': "2020-10-01",
'曜日': "木",
'平均気温(℃)': "21.9",
'最高気温(℃)': "27.7",
'最低気温(℃)': "17.7",
'降水量の合計(mm)': "2",
'最深積雪(cm)': "0",
'平均雲量(10分比)': "4.3",
},
],
},
"GlobalParameters": {
}
}
念のためHTTPリクエストのクライアントアプリであるPOSTMANからPOSTできることを確認します。リスト末尾の項目の後ろについているカンマを取り除かないとスキーマのエラーになるのでご注意ください。
以下のようにresponseが返ってくることを確認しました。
おわりに
APIとして公開してしまえばあらゆるアプリケーションから呼び出して使うことができます。デプロイまでの流れが簡潔かつすぐに展開できてしまうのでその辺りもAzure MLの強みですね。
リアルタイム推論 vs バッチ推論
リアルタイム推論パイプラインのデプロイはリアルタイム性を担保するため、AKSもしくはACI上にデプロイされます。一方でバッチ推論パイプラインはパイプラインエンドポイントという少し異なる仕様になるようです。アプリケーションとリアルタイムに相互通信する場合はリアルタイム推論を利用し、バッチ的にデータを投入しオンデマンドで分析する場合にはパイプラインエンドポイントを利用すればよさそうです。リアルタイムの場合はAKS等が走るのでそれらのインスタンスの時間課金が発生します。バッチ推論については調査中です。