【Azure】Auto MLで作成したモデルをPythonからデプロイする方法

はじめに

今回はAzure Auto MLで作成したモデルをPythonからデプロイ・推論まで行ってみます。

開発環境

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

モデルのデプロイ・推論を行う

前回作成したトレーニング済みのモデルをデプロイしていきます。
(Pythonからトレーニングさせる方法についてはこちらを参照ください。)

モデルの登録

まずはワークスペースへの接続を行い、登録するモデルがある実験の内容を取得します。

実行IDは、Pythonからトレーニングする際に

runを表示するようにしたらこちらの「AutoML_XXX」の部分から取得できます。

もしくは完了したジョブの「名前」のところから実行IDを取得することもできます。

無題.png

そしてget_best_child()メソッドによって、作成されたモデルの中で最も良いスコアを持つモデルを選択。これをregister_model()で名前を決め、モデルを登録します。

実行後、ワークスペースに戻って「モデル」タグから一覧を確認すると
modellist.png
「trainmodel」という名前のモデルが登録されているのを確認できました。

登録したモデルをデプロイする

デプロイするモデル名を入れ、エントリスクリプトのファイル名を入力します。
そして作成するWebサービスエンドポイントに割り当てるCPUのコア数とメモリ量を指定し、サービス名を入力します。
これを実行すると、デプロイができます。

また、エントリスクリプトの中身はこちらです。

initで登録したモデルのロードを行い、runで推論を行うという構成です。
APIからCSV形式のデータが入力されるので、これをpandasで読み込みます。
その後、model.predictで推論を行い、この結果を’Class’列に追加し、CSV形式で出力するという流れです。

デプロイした後確認すると…
image.png

大体10分ほどでエンドポイントが作成されました!

image.png

デプロイ状態も「Healthy」となっており、エンドポイントを使用できる状態になっています。

デプロイしたモデルを使う

api-test.png
作成したエンドポイントから「RESTエンドポイント」と書かれたところにURLがあります。

creditcard.csvのClass列を削除したデータでテストを行ってみます。

実行途中、status code 413のこちらのエラーが出ました。
これは送ったファイルのデータ量が多いときに出るエラーみたいです。
そのため、このように
image.png
テストデータは1行のみで推論することにしました。

入力したテストデータはpandasを用いて読み込み、辞書型にした後JSON形式に成型して使うようにしました。
こちらが入力データです。

あとはPOSTメソッドを使って実行してみます。

実行後、結果はエントリスクリプトで指定したようにCSV形式で返ってきました。

この記事を書いた人

azure-recipe-user