MLflow と Azure Machine Learning
適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)
MLflow は、機械学習のライフサイクル全体を管理するように設計されたオープンソース フレームワークです。 さまざまなプラットフォームでモデルをトレーニングして提供するその機能を使うと、お使いのコンピューター上のローカル環境、リモート コンピューティング先、仮想マシン、または Azure Machine Learning コンピューティング インスタンスなど、実験を実行する場所に関係なく、同じツールのセットを使用できます。
Azure Machine Learning ワークスペースは MLflow と互換性があります。つまり、MLflow サーバーを使うのと同じ方法で、Azure Machine Learning ワークスペースを使用できます。 この互換性には、次の利点があります。
- Azure Machine Learning の内部に MLflow サーバー インスタンスがホストされているのではなく、ワークスペースは MLflow API 言語を使ってやり取りできます。
- Azure Machine Learning ワークスペースは、MLflow コードが Azure Machine Learning で実行されるかどうかにかかわらず、そのコードの追跡サーバーとして使用できます。 追跡が行われるワークスペースを指すように MLflow を構成するだけで済みます。
- MLflow を使用する任意のトレーニング ルーチンを、変更することなく Azure Machine Learning で実行できます。
ヒント
Azure Machine Learning SDK v1 とは異なり、SDK v2 にログ機能はありません。 トレーニング ルーチンがクラウドに依存せず、移植できるように、MLflow をログに使うことをお勧めします。そうすれば、コードは Azure Machine Learning に依存しなくなります。
MLflow を使用した追跡
Azure Machine Learning は、MLflow の追跡機能を使って、実験のメトリックをログし、成果物を格納します。 Azure Machine Learning に接続されていると、MLflow を使って実行されるすべての追跡が、作業中のワークスペースで具体化されます。 MLflow を使って実験とトレーニング ルーチンを追跡するよう実験をセットアップする方法について詳しくは、「MLflow を使ったメトリック、パラメーター、ファイルのログ」をご覧ください。 MLflow を使って、実験と実行のクエリと比較を行うこともできます。
Azure Machine Learning の MLflow では、追跡を一元化する方法が提供されます。 ローカル環境または別のクラウドで作業している場合でも、MLflow を Azure Machine Learning ワークスペースに接続できます。 トレーニングのメトリックとモデルを保存するための一元化された安全でスケーラブルな場所がワークスペースに用意されています。
Azure Machine Learning で MLflow を使うと、次のような機能を利用できます。
- ローカルまたはクラウドで実行されている機械学習の実験とモデルを追跡します。
- Azure Databricks の機械学習の実験を追跡します。
- Azure Synapse Analytics の機械学習の実験を追跡します。
サンプルの Notebook
- MLflow を使った XGBoost 分類子のトレーニングと追跡: MLflow を使って実験を追跡し、モデルをログに記録し、複数のフレーバーをパイプラインに結合する方法を示します。
- サービス プリンシパル認証を使用した MLflow での XGBoost 分類器のトレーニングと追跡: Azure Machine Learning の外部で実行されているコンピューティングから MLflow を使って実験を追跡する方法を示します。 この例では、サービス プリンシパルを使って Azure Machine Learning service に対する認証を行う方法が示されています。
- Hyperopt と MLflow 内の入れ子になった実行を使用したハイパーパラメーターの最適化: 一般的なライブラリ
Hyperopt
を使い、MLflow 内の子実行を使ってモデルに対するハイパーパラメーターの最適化を行う方法を示します。 この例では、子実行から親実行にメトリック、パラメーター、成果物を転送する方法が示されています。 - MLflow を使用したモデルのログ記録: MLflow で成果物の代わりにモデルの概念を使う方法を示します。 この例では、カスタム モデルを構築する方法も示されています。
- MLflow を使った実行と実験の管理する: MLflow を使って Azure Machine Learning の実験、実行、メトリック、パラメーター、成果物のクエリを実行する方法を示します。
R での MLflow を使用した追跡
R での MLflow のサポートには、次の制限があります。
- MLflow の追跡は、Azure Machine Learning ジョブでの実験のメトリック、パラメーター、モデルの追跡に限定されます。
- R カーネルを使用する RStudio、Posit (旧称 RStudio Workbench)、または Jupyter Notebook での対話型トレーニングは、"サポートされていません"。
- MLflow R SDK を使用するモデルの管理と登録は、"サポートされていません"。 モデルの登録と管理には、代わりに、Azure Machine Learning CLI または Azure Machine Learning スタジオを使ってください。
Azure Machine Learning での MLflow 追跡クライアントの使用については、「Azure Machine Learning CLI (v2) を使用して R モデルをトレーニングする」の例をご覧ください。
Java での MLflow を使用した追跡
Java での MLflow のサポートには、次の制限があります。
- MLflow の追跡は、Azure Machine Learning ジョブでの実験のメトリックとパラメーターの追跡に限定されます。
- MLflow Java SDK を使用して成果物とモデルを追跡することはできません。 キャプチャするモデル (または成果物) を保存するには、代わりに、ジョブ内の
Outputs
フォルダーとmlflow.save_model
メソッドを使ってください。
Azure Machine Learning での MLflow 追跡クライアントの使用については、Azure Machine Learning で MLflow 追跡クライアントを使う Java の例をご覧ください。
MLflow を使ったモデル レジストリ
Azure Machine Learning では、モデル管理用の MLflow がサポートされています。 このサポートは、MLflow クライアントを熟知しているユーザーにとって、モデルのライフサイクル全体をサポートする便利な方法になります。
Azure Machine Learning で MLflow API を使ってモデルを管理する方法の詳細については、「MLflow を使った Azure Machine Learning でのモデル レジストリの管理」を参照してください。
ノートブックの例
- MLflow を使ってモデル レジストリを管理する: MLflow を使ってレジストリ内のモデルを管理する方法を示します。
MLflow を使用したモデル デプロイ
MLflow のモデルを使うときは、MLflow モデルを Azure Machine Learning にデプロイして、向上したエクスペリエンスを利用できます。 Azure Machine Learning では、環境やスコアリング スクリプトを指定しなくても、リアルタイム エンドポイントとバッチ エンドポイントの両方に、MLflow モデルをデプロイできます。 デプロイは、MLflow SDK、Azure Machine Learning CLI、Azure Machine Learning SDK for Python、または Azure Machine Learning スタジオを使ってサポートされます。
リアルタイムとバッチ両方の推論での Azure Machine Learning への MLflow モデルのデプロイについて詳しくは、「MLflow モデルをデプロイするためのガイドライン」をご覧ください。
ノートブックの例
- MLflow をオンライン エンドポイントにデプロイする: MLflow SDK を使って MLflow 形式のモデルをオンライン エンドポイントにデプロイする方法を示します。
- 安全なロールアウトを使って MLflow をオンライン エンドポイントにデプロイする: MLflow SDK とモデルの段階的なロールアウトを使って、MLflow 形式のモデルをオンライン エンドポイントにデプロイする方法を示します。 この例では、モデルの複数のバージョンを同じエンドポイントにデプロイする方法も示されています。
- MLflow を Web サービス (V1) にデプロイする: MLflow SDK を使って、MLflow 形式のモデルを Web サービス (ACI/AKS v1) にデプロイする方法を示します。
- MLflow を使って、Azure Databricks でトレーニングされたモデルを Azure Machine Learning にデプロイする: Azure Databricks でモデルをトレーニングして、Azure Machine Learning にデプロイする方法を示します。 この例では、Azure Databricks で MLflow インスタンスを使って実験を追跡する場合の処理方法も示されています。
MLflow プロジェクトを使用したトレーニング (プレビュー)
重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
MLflow プロジェクト (プレビュー) を使って、トレーニング ジョブを Azure Machine Learning に送信できます。 Azure Machine Learning 追跡を使ってローカルにジョブを送信することも、Azure Machine Learning コンピューティングを介してジョブをクラウドに移行することもできます。
追跡に Azure Machine Learning ワークスペースを使用する MLflow プロジェクトでトレーニング ジョブを送信する方法については、MLflow プロジェクトと Azure Machine Learning による機械学習モデルのトレーニングに関する記事をご覧ください。
ノートブックの例
- Azure Machine Learning ワークスペースで MLflow プロジェクトを追跡する。
- Azure Machine Learning ジョブで MLflow プロジェクトをトレーニングして実行する。
MLflow SDK、Azure Machine Learning v2、Azure Machine Learning スタジオの機能
次の表は、機械学習ライフサイクルで利用できる各クライアント ツールを使って実行できる操作を示したものです。
機能 | MLflow SDK | Azure Machine Learning CLI/SDK | Azure Machine Learning Studio |
---|---|---|---|
メトリック、パラメーター、モデルを追跡してログに記録する | ✓ | ||
メトリック、パラメーター、モデルを取得する | ✓ | 1 | ✓ |
トレーニング ジョブを送信します | ✓2 | ✓ | ✓ |
Azure Machine Learning データ資産を使用してトレーニング ジョブを送信する | ✓ | ✓ | |
機械学習パイプラインでトレーニング ジョブを送信する | ✓ | ✓ | |
実験と実行を管理する | ✓ | ✓ | ✓ |
MLflow モデルの管理 | ✓3 | ✓ | ✓ |
MLflow 以外のモデルの管理 | ✓ | ✓ | |
Azure Machine Learning で MLflow モデルをデプロイ (オンラインおよびバッチ) | ✓4 | ✓ | ✓ |
Azure Machine Learning で MLflow 以外のモデルをデプロイ | ✓ | ✓ |
注意
- 1 成果物とモデルのみをダウンロードできます。
- 2 MLflow プロジェクトを使ってできます (プレビュー)。
- 3 一部の操作がサポートされない場合があります。 詳細については、「MLflow を使って Azure Machine Learning でモデル レジストリを管理する」を参照してください。
- 4 MLflow SDK を使ったバッチ推論用の MLflow モデルのデプロイは、現時点では不可能です。 別の方法として、「Spark ジョブでの MLflow モデルのデプロイと実行」を参照してください。