メインコンテンツまでスキップ

MLflow 3 デプロイ ジョブ

備考

プレビュー

この機能は パブリック プレビュー段階です。

注記

デプロイ ジョブは、MLflow 3 クライアントやモデル追跡と共に使用する必要はなく、Unity Catalog の古い既存のモデルで有効にすることができます。ただし、MLflow 3 を使用することをお勧めします。

この記事では、機械学習ワークフローの一部として MLflow デプロイ ジョブを使用して、ML モデルのライフサイクル全体を管理する方法について説明します。

デプロイメントジョブとは?​

デプロイメントジョブを使用すると、新しいモデルバージョンが作成されるたびに評価、承認、デプロイなどのタスクを自動化し、 Unity Catalog モデルや Lakeflow ジョブとシームレスに統合できます。 これらのジョブにより、モデルデプロイパイプラインの設定が簡素化され、ヒューマンインザループの承認が組み込まれ、各モデルバージョンの進行状況と履歴コンテキストを明確に可視化できる管理されたワークフローが提供されます。

デプロイメントジョブを使用すると、プロセスは完全に自動化されます。新しいモデルバージョンが作成されるたびに 自動的にトリガー され、モデルページとモデルバージョンページにデプロイメントジョブの実行ステータスが直接表示されます。 各デプロイメントジョブの実行に関する履歴情報は、 アクティビティログで簡単に追跡できるため、透明性と管理が容易になります。

MLflow 3 Model Tracking との統合​

Databricks では、 MLflow 3 Tracking を使用してモデルを登録し、デプロイ ジョブで評価を実行することをお勧めします。 新しいクライアントは、デプロイ ジョブの評価部分からメトリクスを自動的にログに記録し、 Unity Catalog モデル バージョンの UI に表示されます。 これにより、ユーザーはモデル バージョン ページにある一元化されたメトリクス、パラメーター、トレースを使用して、デプロイ ジョブ ライフサイクルでモデルをさらに進めるタイミングについて、情報に基づいた決定を下すことができます。

Unity Catalog CREATE MODEL VERSION ACL との統合​

デプロイ ジョブは、新しくリリースされた Unity Catalog の Create Model Version ACL と自然に統合され、MLOps ストーリーを完成させます。具体的には、新しいモデル・バージョンをモデルに登録するための CREATE MODEL VERSION ACL をユーザーに付与できます。 ユーザーが本番運用に適したモデルと判断した場合、このバージョンを Unity Catalog モデルに登録し、モデルを自動的に評価するデプロイメントジョブを開始します。 この時点で、承認者はこのバージョンのデプロイを手動で承認または拒否できます。

重要

デプロイ ジョブは、モデル所有者の資格情報を使用して自動的にトリガーされます。つまり、Unity Catalogモデルに対するCREATE MODEL VERSION権限をユーザーに付与すると、ユーザーはジョブの一部として任意のコードを実行できます。このため、 Databricks では、権限昇格を防ぐために、最小限の権限を持つサービスプリンシパルを使用してデプロイメントジョブを設定することをお勧めします。

デプロイ ジョブの例​

以下は、一般的なユースケースを反映したデプロイメントジョブの例です。これらは単なる例であり、必要に応じてカスタマイズできることに注意してください。

簡単なデプロイ ジョブの例は、評価、承認、デプロイの 3 つのステップで構成されています。評価は mlflow.evaluate を呼び出して、入力されたモデル バージョンで検証メトリクスを生成します。 承認により、特権ユーザーはこれらのメトリクスが満足のいくものかどうかを判断し、満足している場合はモデルを承認できます。 最後に、Deployment はモデルバージョンを Databricks モデルサービングエンドポイントにデプロイします。

次の図は、評価、承認、およびデプロイ タスクで構成されるこの単純なデプロイ ジョブを構成する Lakeflow ジョブ タスクを示しています。

評価、承認、およびデプロイ タスクで構成される単純なデプロイ ジョブ。

また、より複雑なデプロイメントジョブを作成することもできます。たとえば、ワークフローの一部としてメトリクス収集ステップを使用して段階的なロールアウトを実行することができます。このデプロイメント・ジョブを作成するには、承認タスクの後に、モデルを1%にデプロイするタスクを追加し、モデルを10%にデプロイし、モデルを100%にデプロイし、モデルを100%にデプロイするか、モデルをロールバックするかを決定することができます。 次の図は、このより複雑なデプロイ ジョブがどのように見えるかを示しています。

段階的なロールアウトとメトリクス収集を含む複雑なデプロイ ジョブ。

デプロイ ジョブを作成する​

デプロイメントジョブを使用すると、モデルバージョンのライフサイクルを管理できます。デプロイメントジョブを使用するには、まず、登録済みモデルで作成されたモデルバージョンが必要です。を参照してください。 MLflow 3 サンプルノートブックでは、トレーニングモデルと登録モデルの推奨アプローチについて説明します。

Databricks では、 実行者 フィールドを 最小限のアクセス許可を持つサービスプリンシパルに設定することをお勧めします。 さらに、承認タスクについては、タスクが最初に失敗すると予想されるため、 Databricks では再試行を無効にする ことをお勧めします。これにより、待ち時間が長くなり、複数のエラーログが報告されるのを防ぐことができます。

デプロイメント・ジョブには、 model_name と model_versionの 2 つのジョブ・パラメーターが必要です。またDatabricksデプロイの競合状態を防ぐために、最大並列実行制限を 1 (デフォルト) に設定することもお勧めします。

デプロイメントジョブを作成するには、デプロイメントノートブックを使用してプログラムで作成する方法と、UI を使用する方法の 2 つがあります。どちらの場合も、各ジョブ・タスクをノートブックとして提供する必要があります。

ノートブックを使用してプログラムでデプロイ ジョブを作成する (推奨)​

デプロイメントノートブックを使用してプログラムでデプロイメントジョブを作成することは、 Databricks SDKを使用するため、すべての設定がコードに真実のソースが含まれていることで簡単にセットアップできるため、お勧めします。 また、この方法では、複数のジョブやその他のリソースを複数のワークスペースに簡単にデプロイすることもできます。

以下の手順では、簡単なサンプル テンプレートを使用して、基本的な評価、承認、およびデプロイ タスクでデプロイ ジョブを設定します。

  1. Unity Catalogモデルを作成して登録するたとえば、 MLflow 3 の従来の ML ワークフロー の例を参照してください。
  2. 評価タスクを定義するノートブックを作成します。たとえば、クラシック機械学習の評価ノートブックをインポートして、従来の機械学習の例から作成されたモデルを評価します。AIの評価ノートブックは、AI外部モデルの評価例を提供します。必要に応じて、 REQUIREDアイテムを更新します 。他のモデルの場合は、このノートブックをTemplateとして使用し、独自のケースで必要に応じてモデルを評価するようにカスタマイズしてください。
  3. 承認タスクを定義するノートブックを作成します。たとえば、 承認ノートブック をワークスペースにインポートします。このノートブックの仕組みの詳細については、「 承認 」セクションを参照してください。また、このノートブックをテンプレートとして使用し、ニーズに合わせて更新することもできます。
  4. デプロイメント・タスクを定義するノートブックを作成します。たとえば、以下の デプロイ ノートブック をワークスペースにインポートします。また、このノートブックをテンプレートとして使用し、ニーズに合わせて更新することもできます。
  5. デプロイ ジョブを作成および調整するノートブックを作成します。たとえば、 デプロイ ジョブ ノートブック をワークスペースにインポートします。このノートブックは、デプロイメントジョブとなる Databricks ジョブを作成します。 ノートブックの REQUIRED 項目を更新して 、Unity Catalog モデルと適切なタスクを使用して、ジョブを正しく定義してください。また、このノートブックをテンプレートとして使用し、ニーズに合わせて更新することもできます。たとえば、より複雑なロールアウト計画がある場合は、より多くのタスクを含めることができます。
  6. デプロイメント・ジョブ・ノートブックを実行して、デプロイメント・ジョブを作成します。

ジョブ UI を使用したデプロイ ジョブの作成​

ジョブ は、上記のテンプレートの SDK を使用する代わりに、UI を使用して作成することもできます。ただし、ノートブック タスクごとに、ノートブックを手動で作成し、ワークスペースのどこかに保存する必要があります。 指示モデルでは、評価、承認、およびデプロイメント・タスクを含む単純なデプロイメント・ワークフローが想定されます。より複雑なデプロイワークフローがある場合は、タスクを追加して手順をカスタマイズします。

  1. Unity Catalogモデルを作成して登録するたとえば、 MLflow 3 の従来の ML ワークフロー の例を参照してください。

  2. 評価タスクを定義するノートブックを作成します。たとえば、クラシック機械学習の評価ノートブックをインポートして、従来の機械学習の例から作成されたモデルを評価します。AIの評価ノートブックは、AI外部モデルの評価例を提供します。必要に応じて、 REQUIREDアイテムを更新します 。他のモデルの場合は、このノートブックをTemplateとして使用し、独自のケースで必要に応じてモデルを評価するようにカスタマイズしてください。

  3. 承認タスクを定義するノートブックを作成します。たとえば、 承認ノートブック をワークスペースにインポートします。このノートブックの仕組みの詳細については、「 承認 」セクションを参照してください。また、このノートブックをテンプレートとして使用し、ニーズに合わせて更新することもできます。

  4. デプロイメント・タスクを定義するノートブックを作成します。たとえば、以下の デプロイ ノートブック をワークスペースにインポートします。また、このノートブックをテンプレートとして使用し、ニーズに合わせて更新することもできます。

  5. LakeflowジョブUIでデプロイメントジョブを作成します。

    1. 左側のナビゲーション ウィンドウで、[ + 新規 > ジョブ ] をクリックして新しいジョブを作成します。

    2. 各タスクを設定します。たとえば、デプロイメントタスクの場合、次のようになります。

      1. タスク名: Deployment
      2. タイプ: ノートブック
      3. ソース: ワークスペース
      4. パス: /Workspace/Users/<user.name@email.com>/deployment
      5. コンピュート: サーバレス

      構成の詳細については、「 ジョブにおけるノートブック タスク」を参照してください。

  6. 各タスクの作成が完了したら、ジョブ パラメーターを追加します。 右側のパネルで、[ パラメーターの編集 ] をクリックします。model_name と model_versionを追加します。

以下は、UI を使用して上記のテンプレートジョブを作成する例です。

UI を使用して作成されたデプロイ ジョブ。

デプロイ ジョブをモデルに接続する​

Unity Catalog モデルとデプロイ ジョブを作成したら、ジョブをデプロイ ジョブとしてモデルに接続する必要があります。UI を使用することも、デプロイ ノートブックでプログラムを使用して実行することもできます。

デプロイ ジョブがモデルに接続されると、モデル ページにリンクされます。

接続されたデプロイ ジョブ。

UI を使用してデプロイ ジョブをモデルに接続する​

モデルのページの 概要 タブの デプロイ ジョブ で、 デプロイ ジョブの接続 をクリックします。

モデルページで [デプロイジョブの接続] をクリックします。

ドロップダウンリストからデプロイジョブを選択します。また、検索バーを使用して、名前や ID でジョブを検索することもできます。 [ 変更を保存 ] をクリックします。

接続するデプロイメントジョブを選択します。

MLflow クライアントを使用してデプロイ ジョブをモデルに接続する​

プログラムでデプロイ ジョブを接続する主な方法は、MLflow クライアントを使用することです。これは、 client.create_registered_model(model_name, deployment_job_id=<your-created-job-id>)を呼び出して登録済みモデルを作成するとき、または client.update_registered_model(model_name, deployment_job_id=<your-created-job-id>)を呼び出して登録済みモデルを更新するときに実行できます。

デプロイ ジョブをプログラムで切断する主な方法は、MLflow クライアントを使用することです。これを行うには、空の文字列 ( "" ) を指定し、それを使用して update を呼び出します (例: client.update_registered_model(model_name, deployment_job_id=""))。

デプロイ ノートブックで次のようなコードを使用します。

Python
import mlflow
from mlflow.tracking.client import MlflowClient

client = MlflowClient(registry_uri="databricks-uc")
# model_name specifies the location of a model in Unity Catalog
# model_name should be in the format <catalog>.<schema>.<model>
try:
if client.get_registered_model(model_name):
client.update_registered_model(model_name, deployment_job_id=created_job.job_id)
except mlflow.exceptions.RestException:
client.create_registered_model(model_name, deployment_job_id=created_job.job_id)

必要な権限​

デプロイジョブを接続してトリガーするには、次の権限が必要です。

  • デプロイ ジョブを接続するためのモデルの MANAGE または OWNER
  • モデル所有者は、デプロイ ジョブに接続するために、デプロイ ジョブに対する CAN MANAGE RUN 以上のアクセス許可を持っている必要があります。
    • 注 : このデプロイ ジョブ フィールドは、MANAGE 以上の権限を持つユーザーがモデルで更新することもできます。この場合、アップデーター と モデル所有者の両方が、デプロイ ジョブに接続するには、デプロイ ジョブに対する CAN MANAGE RUN 以上のアクセス許可を持っている必要があります。

デプロイ ジョブをトリガーする​

デプロイメント・ジョブは、作成される新しいモデル・バージョンで自動的にトリガーされます。また、モデル・バージョン・ページで「 デプロイメント・ジョブの開始 」をクリックして、既存のバージョンと以前にデプロイメントされたバージョンの両方で手動でトリガーすることもできます。

モデルバージョンページからデプロイジョブを開始します。

ジョブは、ジョブ UI または API から直接トリガーすることもできます。適切なモデル名とバージョンをジョブ・パラメーターに指定する必要があります。

必要な権限​

デプロイメントジョブをトリガーするには、次の権限が必要です。

  • モデルバージョンのUIを使用してデプロイメントジョブを手動でトリガーまたは修復するには、デプロイメントジョブにCAN MANAGE RUN以上のACLが必要です(ジョブUIを使用してジョブをトリガーするために必要なACLと同じACL)。
  • ジョブは、新しいバージョンが作成され、モデル所有者の認証情報を使用すると自動的にトリガーされるため、モデル所有者はデプロイジョブに CAN MANAGE RUN 以上の ACL を持っている必要があります。

デプロイ ジョブを承認する (試験段階)​

Databricks は、デプロイジョブの実験的な承認メカニズムを提供し、ML パイプラインのヒューマンインザループプロセスを可能にします。デプロイ ジョブがトリガーされると、評価ランのメトリクスがモデル バージョン ページに表示されます。 これらのメトリクスを確認した後、承認者は UI で [承認] をクリックしてモデルバージョンを承認できます。この機能では、Unity Catalog タグを使用して、承認タスクが成功するか失敗するかを決定します。承認タスクは、「approval」(大文字と小文字は区別されません)で始まるジョブタスク名で識別され、 Unity Catalog タグが Approved に設定されている場合(UIの 「承認 」ボタンをクリックするか、手動で設定した場合)に合格します。

承認プロセスの仕組みは次のとおりです。

  1. 初期実行 : デプロイ ジョブの最初の実行は、モデル バージョンがまだ承認されておらず、必要な Unity Catalog タグがないため、承認タスクで 常に 失敗します。

デプロイメント・ジョブの初回実行は、承認タスクで常に失敗します。

  1. 承認評価 : 承認者は、モデルバージョンページに表示されるモデルバージョンとその評価メトリクスを確認します。 これにより、承認者はモデルバージョンの品質と準備状況を評価できます。

モデルバージョンのメトリクスを確認します。

  1. 承認アクション : 承認者がモデルバージョンに問題がないと判断した場合、モデルバージョンページのデプロイメントジョブサイドバーセクションにある[ 承認 ]ボタンをクリックします。

デプロイ ジョブ サイドバーの [モデル バージョン] ページにある [承認] ボタン。

このアクションにより、ジョブの実行が自動的に修復され、Unity Catalog タグがモデル バージョンに追加されます。

  • タグキーは、承認タスクの名前と一致します。たとえば、 承認ノートブックの例では、これは Approval_Checkです。
  • タグ値は Approvedに設定されます。
  1. ジョブ Continuation : 修復されたデプロイ ジョブの実行は、承認タスクから自動的に再開されます。 今回は、必要な Unity Catalog タグが存在するため、パスします。その後、デプロイメントなどの後続のタスクに進みます。

必要な権限​

Unity Catalog タグを追加し、デプロイ ジョブをトリガーするには、次のアクセス許可が必要です。

  • Unity Catalog モデルに APPLY TAG を実行します。
  • デプロイジョブの CAN MANAGE RUN を実行します。

高度な承認のための管理タグ​

特定のタグ名の管理タグポリシーを使用して、タグを承認および適用する権限を持つユーザーをさらに指定することもできます。 管理タグ ポリシーを使用し、ユーザーまたはグループにAPPLY_TAG権限を指定すると、次のことが可能になります。

  • 展開ジョブに複数の独立した承認グループを設定します。

    • たとえば、 Approval_LegalとApproval_Securityのように、別々のグループ承認に 2 つの別々のタグを設定できます。
      • 法務チームのみがApproval_Legalタグを設定できるように、管理タグ ポリシーを作成します。
      • セキュリティ チームのみがApproval_Securityタグを設定できるように、追加の管理タグ ポリシーを作成します。
      • 展開ジョブに、法的承認とセキュリティ承認に対応する 2 つの承認タスクを設定します。
      • 両方のチームにモデルに対するAPPLY_TAG付与してタグを設定できるようにしますが、承認できるのはそれぞれのチェックのみです。
  • タグ ポリシーを設定して、モデル所有者がジョブを承認できないようにし、2 人目の承認があることを確認します。

  • タグ ポリシーと一貫したタグ名を使用して、メタストア、カタログ、スキーマ全体の承認チェックを標準化します。

デプロイ ジョブの状態とアクティビティ ログを表示する​

モデル バージョンでデプロイ ジョブがトリガーされると、それらのデプロイの現在のステータスをモデル ページの 概要 タブに表示できます。ステータスの下には、アクティビティログのアクティビティ履歴が表示されます。アクティビティ ログは、モデル バージョン ページにも表示されます。

デプロイ ジョブの状態とアクティビティ ログを表示します。

必要な権限​

デプロイ ジョブとアクティビティ ログを表示するには、次のアクセス許可が必要です (モデルの表示と同じです)。

  • Unity Catalog モデルで EXECUTE を実行します。

デプロイ ジョブ テンプレート ノートブックの例​

次の例のノートブックは、評価、承認、およびデプロイ タスクで構成される単純なデプロイ ジョブを作成するためのテンプレートとして使用できます。ノートブックに REQUIRED 値を指定して、モデルにデプロイ ジョブを構成してください。

AIの評価ノートブック​

生成AI の評価ノートブックの例

クラシック ML の評価ノートブック​

クラシック ML の評価ノートブックの例

承認ノートブック​

承認ノートブックの例

デプロイ ノートブック​

デプロイ ノートブックの例

デプロイ ジョブ 作成ノートブック​

デプロイ ジョブを作成するためのノートブックの例

次のステップ​

MLflow 3 の新機能の詳細と開始方法については、次の記事を参照してください。