はじめに
Azure Machine Learning (AzureML)は、機械学習のシナリオをend-to-endでサポートするプラットフォームです。AzureMLでは機械学習モデルのデプロイ先として様々なターゲットを利用することができます。ドキュメントに様々な情報が掲載されているのですが、最初見た時によく分からなかったので、全体感を自分なりにまとめました。
推論の種類とそれに対応するAzureMLマネージドなエンドポイントの分類イメージです。
── 推論
├── リアルタイム (オンライン)推論
│ └── マネージドオンラインエンドポイント
│ └── Kubernetesオンラインエンドポイント
│ └── ローカルエンドポイント
├── バッチ推論
│ └── バッチエンドポイント
オンラインエンドポイント
低レイテンシなリアルタイム (オンライン)推論を行う場合に利用する推論環境で、マネージドオンラインエンドポイント、Kubernetesオンラインエンドポイントにより構成されています。またDev/Test用のローカルエンドポイントもこちらに加えることができます。
一つのエンドポイントに複数のデプロイを構成でき、それぞれのモデル・デプロイに流れるトラフィックを一定比率で分割したり、トラフィックをミラーリングして別のデプロイに受け渡したりすることが可能です。
コンセプト:エンドポイントとは何ですか。 - Azure Machine Learning | Microsoft Learn
マネージドオンラインエンドポイントとKubernetesオンラインエンドポイントはオンラインエンドポイントの一種として、ほぼ同じ手順で構成ができるようになっています。そのためか、MLモデルをデプロイする手順を解説しているドキュメントも統一されています。
デプロイ手順:Deploy machine learning models to online endpoints - Azure Machine Learning | Microsoft Learn
MLflowモデルやTritonモデルを対象とする場合、スコアリングスクリプトを書かずにデプロイ可能です。
マネージドオンラインエンドポイント
AzureMLマネージドな計算環境にデプロイする方法です。VMのアップデート等インフラ管理は行う必要がなく、自動スケーリングや計算リソースのモニタリング等々を簡単に行うことができます。マネージドインフラであり、ホスト OS イメージの自動更新、システム障害が発生した場合のノードの自動回復を行ってくれます。
ミラートラフィック機能を使ったシャドウテストも対応しています。エンドポイントの段階でトラフィックを複製して新しいモデルデプロイメントに送ります。そうすることで、クライアント側アプリケーションに影響を与えずに新しいモデルデプロイメントのエラー、レイテンシー等々のテストを行えます。
ミラートラフィック:オンライン エンドポイントの安全なロールアウト - Azure Machine Learning | Microsoft Learn
分かりやすい解説記事もありました:
Azure Machine Learning でオンラインエンドポイントの Mirror Traffic 機能を使ってみる - Qiita
Kubernetesオンラインエンドポイント
オンプレ/クラウドのKubernetesクラスターへデプロイする方法です。KubernetesクラスターのAzure Arc接続を行うことで、オンプレやAWS/GCP含めたパブリッククラウドで実行されているKubernetesクラスターへそのままモデルをデプロイできるようになります。AzureだったらAzure Kubernetes Service (AKS)も対象です。私の知る限り、AWS SageMakerやGCP Vertex AIには、学習したモデルをそのままKubernetesクラスターへデプロイする機能が見当たらなあったので、Kubernetes環境が既にある場合は有力な選択肢だと思います。同一のKubernetesクラスターでモデルの学習と推論を行うように構成できるのもポイントかと思います。
AzureML での Kubernetes コンピューティング先の概要 - Azure Machine Learning | Microsoft Learn
両エンドポイントの違いはこちらのセクションにまとめられています。
マネージド オンライン エンドポイントと Kubernetes オンライン エンドポイント
ローカルエンドポイント
学習済みモデルをオンラインエンドポイントにデプロイする前に、ローカルのDocker環境にデプロイしてモデルをテストすることができます。デプロイ構成のYAML等は同一で、デプロイする際に --local
(CLIv2の場合)というオプションを付けるだけでローカルにデプロイできるので、非常に簡単にモデルのテストができます。dev/test用として存在しています。
手順:Deploy machine learning models to online endpoints - Azure Machine Learning | Microsoft Learn
VSCode連携:VS Code を使用してオンライン エンドポイントをローカルでデバッグする (プレビュー) - Azure Machine Learning | Microsoft Learn
バッチエンドポイント
一定期間に大量のデータに対してバッチ推論を行うために使用されるエンドポイントです。複数のファイルに分散された大量のデータに対して並列処理で推論を実行することができます。
計算リソースはコンピューティングクラスターを指定する形になります。こちらもMLFlowモデルをデプロイする場合は、スコアリングスクリプトと実行環境の指定は不要です。
コンセプト:バッチ エンドポイントとは
手順:バッチ エンドポイントを使用したバッチ スコアリング - Azure Machine Learning | Microsoft Learn
他 (AzureML 推論 HTTP サーバー)
AzureMLマネージドな推論サービスで、推論サーバーとして使用されているAzureML 推論 HTTP サーバーはPythonパッケージとして公開されています。この推論サーバーを使ってローカルや自分達独自の計算リソースでモデルをデプロイして使っていくこともできます。
詳しくはこちらの記事をご覧ください。
めっちゃ分かりやすい記事:
Azure Machine Learning Inference HTTP Serverを使って推論スクリプトをローカルで実行する
ドキュメント:
Azure Machine Learning 推論 HTTP サーバー
まとめ
Azure Machine Learningではモデルのデプロイ先としてオンプレ・Azure/AWC/GCPのクラウドを含めた幅広い選択肢が提供されています。再掲になりますが、参考になったドキュメントを掲載しておきます。
エンドポイントのコンセプトについてもっと知りたい場合:
エンドポイントとは何ですか。 - Azure Machine Learning | Microsoft Learn
オンラインエンドポイントへのモデルデプロイを一通り試したい場合:
Deploy machine learning models to online endpoints - Azure Machine Learning | Microsoft Learn
AzureMLを使ったモデル学習~デプロイの流れをPythonで一通り試したい場合。1-day チュートリアル:
チュートリアル: 1 日でわかる Azure ML - Azure Machine Learning | Microsoft Learn
質問・ご不明点があったらコメント欄にお願いします。