モデルが更新されたときにジョブをトリガーする
モデル更新トリガーを使用して、Unity Catalogでモデルの変更が発生したときにジョブを自動的に実行します。この機能により、モデル更新を追跡するためのcronスケジュールや永続クラスターは不要になります。
ベータ版
モデル更新トリガーはベータ版です。
モデル更新トリガーは、次の2つの主要なペルソナ向けに設計されています。
- データサイエンティスト は、新しいモデルバージョンの準備ができたとき、またはエイリアスが設定されたときに、単一のモデルまたは一度に複数のモデルに対してジョブをトリガーできます。たとえば、所有するモデルが変更されるたびに、検証ジョブ、テストジョブ、またはプロモーションジョブを自動的に実行できます。例:新しいバージョンまたはエイリアスでのモデルの検証を参照してください。
- 管理者は 、メタストア全体(またはスキーマ)のすべてのモデルを監視できます。たとえば、管理者は、作成されたすべての新しいモデルを自動的に監査できます。例:スキーマまたはメタストア全体のモデルを監査するを参照してください。
モデル更新トリガーの仕組み
モデル更新トリガーは、Unity Catalog内のスコープでモデルイベントを監視し、一致するイベントが発生したときにジョブ実行をトリガーします。モデル更新トリガーを設定するときは、 スコープ と 条件 を選択します。
利用可能なスコープは次のとおりです:
- モデル :単一の登録済みモデル。
- スキーマ :スキーマ内のすべてのモデル。
- メタストア :メタストア内のすべてのモデル。メタストア管理者のみが、メタストアスコープのトリガーを設定できます。
条件によって、実行をトリガーするタイミングが決定されます:
- モデルが作成されました :スコープ内に新しい登録済みモデルが作成されます。
- モデルバージョンの準備が整った : スコープ内で新しいモデルバージョンが準備完了になります。
- モデルエイリアスが設定されています :指定されたエイリアスがモデルバージョンに適用されます。トリガーごとに最大10個のエイリアスを指定でき、いずれかのエイリアスが適用されたときにトリガーが応答します。
モデル更新トリガーは、クラウドプロバイダーの費用以外に追加費用を発生させません。
バッチ更新
モデル更新Triggerは、約1分ごとに新しいイベントをポーリングします。各ポーリング間隔で検出された変更はバッチ処理され、ジョブパラメーターとして次のジョブのランに渡されます。モデル更新Triggerに関連するジョブパラメーターを参照してください。
単一のジョブランは最大9件の更新を処理します。9件を超える更新が保留中の場合、Triggerは現在のランで9件を処理し、残りを後続のランに、ポーリング間隔ごとに1つのバッチとして処理します。これは、Triggerが保留中の更新を1分あたり最大9件(1時間あたり約540件)の速度で処理することを意味します。
このレートを超える一時的な急増は正常であり、数分後に解消されます。スコープがTriggerで処理できるよりも速く更新を継続的に生成する場合、Triggerは各間隔で実行され、追いつくことができず、最終的に失敗して停止します。継続的な高イベント量を参照してください。
継続的な高イベント量
モデル更新Triggerは、平均して1分あたり9件以下の更新が到着するスコープで最適に機能します。
増え続けるバックログを防ぐため、約1時間連続して各ポーリング間隔で実行されるTriggerは失敗して停止します。失敗はTriggerで報告されます。The Trigger does not recover automatically, and no further ランs 起動しません until you recover it manually。
Triggerを回復するには:
- 更新レートを減らして、1分あたり9件を超えないようにします。たとえば、以下の推奨事項で説明されているように、Triggerのスコープを絞り込むか、モニタリングを複数のTriggerに分割します。このステップをスキップすると、復旧後、Triggerが再度失敗します。
- Triggerを一時停止および一時停止解除することで、Resetします。一時停止すると、Triggerの累積された状態がクリアされ、現在の時点から再開されます。 ジョブの詳細 ペインの スケジュールとTrigger セクションを使用するか、Jobs API を使用して
pause_statusをPAUSEDに、次にUNPAUSEDに設定します。既存のTriggerを管理するを参照してください。
高度なオプションである Trigger間の最小時間 と 最後の変更後に待機 は、ランが作成される頻度を制御しますが、ランが処理する更新の数を変更することはありません。更新が継続的に1分あたり9つを超える場合でも、この失敗を防ぐことはありません。
大容量のスコープを確実に監視するには:
- 各Triggerのスコープを絞り込みます。単一のメタストアスコープのTriggerではなく、スキーマまたはモデルスコープのTriggerを使用してください。そうすることで、ある領域でバーストが発生しても、メタストア全体のモニタリングが停止することはありません。
- 各Triggerが低ボリュームのスコープを監視するように、モニタリングを複数のTriggerとジョブに分割します。
- Triggerされるジョブを軽量に保ち、For each タスクを使用して各更新を処理します。「For each タスクでモデルの更新を処理する」を参照してください。
- 広範囲にわたり大容量が継続的に発生する場合は、Databricksアカウントチームにご連絡いただき、オプションについてご相談ください。
始める前に
モデルアップデートトリガーを使用するには、次の項目が必要です。
- ワークスペースでUnity Catalogが有効になっている必要があります。
- トリガーで監視するターゲットのモデルまたはスキーマに、
EXECUTE権限が必要です。EXECUTEがないと、それらのモデルへの読み取りと書き込みが失敗する可能性があります。 - メタストアスコープのトリガーを設定するには、メタストア管理者である必要があります。ジョブがUnity Catalog内のあらゆるモデルにアクセスできるように、メタストア内のすべての現在および将来のカタログで自身に
EXECUTE権限を付与する必要もあります。
モデルアップデートトリガーを追加する
既存のジョブにモデル更新トリガーを追加するには:
-
Databricks ワークスペースのサイドバーで、 ジョブとパイプライン をクリックします。
-
ジョブの一覧で、トリガーを追加するジョブの名前をクリックします。
-
右側の ジョブの詳細 ペインで、 トリガーの追加 をクリックします。
-
トリガーの種類 で、 モデル更新 を選択します。
-
スコープ の下で、 モデル 、 スキーマ 、または メタストア を選択し、監視するモデルまたはスキーマを指定します。
-
[条件] で、トリガーするイベントを選択します。
- モデルが作成されました
- モデルバージョンが準備完了
- モデルエイリアスが設定されています 。監視するエイリアスを最大10個まで指定してください。トリガーは、指定されたエイリアスのいずれかが設定されると応答します。
-
(オプション)詳細オプションを構成します:
- トリガー間の最小時間 (秒) : 前回の実行後、次の実行をトリガーするまでに待機する最小時間。この期間中に更新されたモデルは、待機時間が経過した後でのみ実行をトリガーします。この設定を使用して、実行作成の頻度を制御します。
- 最終変更後の待機時間 (秒) :モデル更新後に実行をトリガーするまで待機する時間。この期間中に別のモデル更新があると、タイマーがリセットされます。この設定は、モデル更新がバッチで提供され、すべての更新が到着した後にバッチ全体を処理する必要がある場合に使用できます。
-
設定を検証するには、 [トリガーをテスト] をクリックします。エラーがない場合、ボタンには Success が表示されます。
-
保存 をクリックします。
トリガーを保存した後、トリガーが初期化されるまで約1分間待ちます。メッセージ 「トリガーはまもなく評価されます」 は、初期化が進行中であることを示します。初期化後、スコープ内の一致するモデルイベントによってジョブ実行がトリガーされます。
このトリガーを後で編集、停止する、または削除するには、 ジョブの詳細 ペインの スケジュールとトリガー セクションを使用します。既存のトリガーを管理するを参照してください。
Jobs APIからモデル更新トリガーを構成することもできます。Jobs API を使用してモデル更新トリガーを構成するを参照してください。
例:新しいバージョンまたはエイリアスでモデルを検証する
モデルが変更されたときに検証、テスト、またはプロモーションジョブを実行するには、 モデル スコープと モデルバージョン準備完了 または モデルエイリアス設定済み のいずれかの条件でトリガーを構成します。エイリアス変更の場合は、prodやstagingなど、監視するエイリアスを指定します。複数のモデルを一度に監視するには、代わりに Schema スコープを使用してください。トリガーが初期化された後、監視対象のモデルに一致する変更があると、ジョブ実行がトリガーされます。
例:スキーマまたはメタストア全体でモデルを監査する
スキーマまたはメタストアで作成されたすべてのモデルを監査するには、 スキーマ または メタストア スコープと モデル作成済み 条件でトリガーを構成します。トリガーが初期化された後、スコープ内で作成されたモデルはすべて、変更を記録または検証できるジョブ実行をトリガーします。
モデル更新トリガーに関連付けられているジョブ パラメーター
モデル更新トリガーが起動すると、実行をトリガーした変更に関する情報が、{{job.trigger.model.updates}}動的値参照を介してジョブ実行で利用可能になります。値は、バッチ内のモデル更新のJSONリストです:
[
{
"full_name": "model.full.name1",
"version": 123,
"alias_name": "prod"
}
]
フィールドは次のように入力されます:
full_name:常に、作成または更新されたモデルの名前が設定されます。version:準備が整ったバージョンについては モデルバージョンの準備が整った イベント、エイリアスが設定されたバージョンについては モデルエイリアスが設定された イベントで入力されます。alias_name:設定されたエイリアスの名前については モデルエイリアスが設定された イベントにのみ入力されます。
たとえば、各条件のパラメーター値は次のとおりです:
-
モデル作成済み :
JSON[{ "full_name": "model.number.one" }, { "full_name": "model.number.two" }] -
モデルバージョンが準備完了 :
JSON[
{ "full_name": "model.number.one", "version": 7 },
{ "full_name": "model.number.two", "version": 3 }
] -
モデルエイリアスが設定されています :
JSON[
{ "full_name": "model.number.one", "version": 7, "alias_name": "prod" },
{ "full_name": "model.number.two", "version": 3, "alias_name": "staging" }
]
更新をタスクで利用できるようにするには、値が{{job.trigger.model.updates}}のジョブパラメーターを追加します。パラメーターを追加するには、ジョブのサイドパネルで [パラメーターの編集] をクリックし、パラメーターの値を{{job.trigger.model.updates}}に設定します。ジョブパラメーターの詳細については、ジョブのパラメーター化を参照してください。
以下のノートブックは、eventsという名前のパラメーターを読み込み、実行に渡されたモデル更新を処理します。
import json
json_list = dbutils.widgets.get("events")
data = json.loads(json_list)
for item in data:
print(f"Full Name: {item['full_name']}, Version: {item.get('version')}, Alias Name: {item.get('alias_name')}")
For eachタスクでモデル更新を処理する
For each taskは、リスト内の各要素ごとにネストされたタスクを1回実行します。モデル更新トリガーの場合、{{job.trigger.model.updates}}の要素ごとに1回の実行をすることができます。
- For each タスクが
{{job.trigger.model.updates}}を入力として受け取るように構成します。 - イテレーションによって提供される各入力の値を読み取るように、入れ子になったタスクを構成します。
- 各更新の値は、入れ子になったタスクのウィジェット パラメーターとして利用できます。
次のノートブックは、ネストされたタスク内のイテレーションごとの値を読み取ります:
full_name = dbutils.widgets.get("full_name")
version = dbutils.widgets.get("version")
alias_name = dbutils.widgets.get("alias_name")
print(f"Full Name: {full_name}, Version: {version}, Alias Name: {alias_name}")
Jobs API を使用してモデル更新トリガーを構成します。
モデル更新トリガーは、triggerオブジェクトをjobs/create、jobs/update、またはjobs/reset操作に追加することで設定できます。次の例ではjobs/updateを使用しています:
{
"job_id": 574587036927544,
"new_settings": {
"trigger": {
"pause_status": "UNPAUSED",
"model": {
"securable_name": "main.default",
"condition": "MODEL_ALIAS_SET",
"aliases": ["alias1", "alias2"],
"min_time_between_triggers_seconds": 3600,
"wait_after_last_change_seconds": 120
}
},
"parameters": [
{
"default": "{{job.trigger.model.updates}}",
"name": "events"
}
]
}
}
「model」トリガーオブジェクトの場合:
securable_name:監視するスキーマまたはモデル。メタストア全体を監視するには、空のままにするか省略してください。condition``MODEL_CREATED、MODEL_VERSION_READY、またはMODEL_ALIAS_SETのいずれかです。aliases監視するエイリアス。MODEL_ALIAS_SET条件にのみ適用されます。
失敗したモデル更新トリガーの通知を受け取る
モデル更新トリガーの評価に失敗した場合に通知を受け取るには、ジョブ失敗時のEメール通知またはシステム宛先通知を設定します。ジョブに通知を追加するを参照してください。
制限事項:
モデルアップデートトリガーには次の制限があります。
- ワークスペースごとに最大100個のモデル更新トリガーを構成できます。この制限はケースバイケースで引き上げることができます。
- 単一のジョブ ランは、モデル更新を最大9件処理します。追加の保留中の更新は、後続のランで処理され、1分あたり最大9件までです。バッチ更新を参照してください。
- 各モデル更新トリガーは、最大10個のエイリアスを監視できます。
- Trigger がポーリング間隔ごとに約 1 時間継続して実行されると、エラーで失敗し、ランの Trigger が停止します。自動的に回復することはありません。更新の頻度を減らし、Trigger を一時停止して再開することで、Reset する必要があります。これは、スコープがTriggerが処理できるよりも速く更新を生成し、それが持続した場合に発生します。継続的な高イベントボリュームを参照してください。
- メタストアスコープのトリガーを構成するには、メタストア管理者である必要があり、ジョブが任意のモデルにアクセスできるように、Unity Catalog内の現在および将来のすべてのカタログに対する
EXECUTE権限を自分に付与する必要があります。
FAQ
デプロイメントジョブとモデルアップデートトリガーは、いつ使用すればよいですか?
次の場合は、モデルアップデートトリガーを使用してください。
- モデル作成イベントまたはエイリアスの変更を監視します。
- 単一のモデルよりも広いスコープ(スキーマやメタストアなど)でイベントを監視します。
- 各モデルに個別のジョブを設定する代わりに、単一のトリガーで複数のモデルを監視します。
モデルバージョンの作成とジョブ実行の関係に関する緊密なUIカップリングとアクティビティログが必要な場合は、デプロイメントジョブを使用してください。