Azure Machine Learning のモデルの再トレーニングと更新に Azure Data Factory を活用

このポストは、11 月 9 日に投稿された Retraining and Updating Azure Machine Learning models with Azure Data Factory の翻訳です。

これまで Azure Machine Learning のモデルを使用しているユーザーは、Azure Data Factory パイプラインに組み込まれている AzureMLBatchExecution アクティビティを使用して、ML モデルを実際の運用環境に合わせて利用できるようにしたり、規模に応じてトレーニング済みのモデルを新しいデータに適用してスコア付けしたりしていました。しかし、さらに理想的なのは、モデルのパラメーターに影響を及ぼす傾向や変数が徐々に変化していくのに合わせて、このパイプラインで自動的な再トレーニングを反復的に実行し、最新のトレーニング データを反映したモデルに更新できるようになることです。これを実現するのが今回新たにリリースされた AzureMLUpdateResource アクティビティです。

Azure ML では通常、スコア付け実験とトレーニング実験をまず設定し、それぞれの実験で使用する 2 つの Web サービス エンドポイントをセットアップします。これにより、Data Factory で AzureMLBatchExecution アクティビティを使用して、スコア付け Web サービスでホストする最新のモデルでの受信データのスコア付けや、最新のトレーニング データによる計画的な再トレーニングが行えるようになります。同時に、スコア付け Web サービスのエンドポイントでは、この Web サービスで使用するモデルの更新を行う Update Resource メソッドが公開されます。この部分に当たるのが、下図で新しい AzureMLUpdateResource アクティビティが示されているところです。このアクティビティを使用すると、トレーニング アクティビティにより生成されたモデルを取得してスコア付け Web サービスに渡し、スコア付けするモデルを更新できます。この処理は、スケジュール設定に従って、Data Factory の既存のパイプラインですべて自動的に実行されます。

実験用エンドポイントのセットアップ

下の図は、Azure ML のトレーニング エンドポイントとスコア付けエンドポイントの関係を大まかに示したものです。両方とも Azure ML Studio の実験が起点となっています。また、どちらもバッチ実行サービス (BES) として使用できます。トレーニング Web サービスはトレーニング データを受信し、トレーニング済みのモデルを 1 つまたは複数生成します。スコア付け Web サービスはラベル付けされていないデータ サンプルを受信し、予測を行います。

再トレーニングと更新のシナリオを作成する一般的な手順は次のとおりです。

  • 実験を Azure ML Studio (英語) で作成します。
  • よいモデルが完成したら、Azure ML Studio を使用してトレーニング実験とスコア付け実験の両方の Web サービスを発行します。
  • スコア付け Web サービスのエンドポイントは、新しいデータ サンプルによる予測に使用します。予測結果の出力は、.csv ファイルや Azure SQL Database の行データなど、実験の構成によりさまざまな形式に設定できます。
  • トレーニング Web サービスは、新しいトレーニング データから新しいトレーニング済みのモデルを生成するために使用します。再トレーニング結果は、Azure Blob ストレージに .ilearner ファイルとして出力されます。

再トレーニング用の Web サービスのエンドポイントの作成については、こちらのドキュメントに詳しく解説されています

Web サービスのエンドポイントは、Azure 管理ポータルで確認できます。これらは、ADF のリンクされたサービスやアクティビティに表示されます。

ADF を使用して Azure ML モデルの再トレーニングと更新を行う

利用できる ADF での再トレーニング シナリオと更新シナリオは、下記の要素で構成されます。

  • トレーニング データ用のストレージのリンクされたサービスとデータセット (1 つまたは複数)。ストレージの種類はトレーニング実験の入力に適合したものになります。たとえば、実験が Web サービスの入力を使用して構成されている場合、トレーニング データは Azure Blob ストレージから送られます。データが Azure SQL テーブルから取得される場合は、リーダー モジュールで実験を構成することをお勧めします。シナリオによっては、トレーニングの入力が Hadoop プロセスやコピー アクティビティなどの ADF アクティビティ、または何らかの外部プロセスによって生成される場合もあります。
  • 新しいトレーニング済みのモデルである .ilearner ファイルを受信するために使用する、ストレージのリンクされたサービスと Azure Blob データセット (1 つまたは複数)。
  • トレーニング Web サービスのエンドポイントを呼び出すための、Azure ML のリンクされたサービスと AzureMLBatchExecution アクティビティ。トレーニング データセットはこのアクティビティの入力となり、このアクティビティから出力されるのが ilearner データセットです。
  • 更新対象となるスコア付け実験エンドポイント用の Azure ML のリンクされたサービスと AzureMLUpdateResource アクティビティ。ilearner データセットはこのアクティビティの入力となります。複数のモデルを更新する場合は、モデルごとにアクティビティが 1 つずつ存在します。複数のエンドポイントを更新する場合は、エンドポイントごとにリンクされたサービスとアクティビティが 1 つずつ存在します。
  • アクティビティの出力に使用される、ストレージのリンクされたサービスとデータセット。Azure ML の Update Resource API 呼び出しでは出力が生成されることはありませんが、現在 ADF では、パイプラインのスケジュールを進めるために出力データセットが必要です。

データセットおよびリンクされたサービスの作成の詳細については、次のドキュメントを参照してください。

予測パイプラインに関するドキュメントでは、モデルのスコア付け、再トレーニング、更新アクティビティのセットアップについて手順を追って説明し、JSON のサンプル コードも紹介していますので、こちらも参照してください。

まとめ

この記事では、Azure ML の Web サービス モデルの再トレーニングと更新に関するエンドツーエンドのシナリオについてご紹介しました。

Data Factory チームと Azure ML チームでは、ADF での Azure ML の運用化に向けたお客様の独自のシナリオについてお聞きしたいと考えています。特に下記の例についてお寄せいただけますと幸いです。

  • トレーニング データの生成方法、そのデータを ADF パイプラインに取り込む方法
  • 再トレーニング済みのモデルを運用環境に投入する前に評価する方法
  • 再トレーニング済みのモデルの評価が必要なシナリオと不要なシナリオ
  • 他の Azure ML エンドポイントの管理 (作成や削除) が運用パイプラインに組み込まれているシナリオ

ご意見、ご感想はページ下部のコメント欄または Data Factory フォーラム (英語) までお寄せください。