モデル登録後の自動実行
![]()
自動実行ルールを作っておくと、モデルのバージョンを登録したときに、推論と評価のJobを自動で起動します。ルールは、使うコードバージョン、データセットバージョン、コンピュータ、パラメータを固定して保存するため、どのバージョンも同じ条件で推論・評価されます。
こんなときに向いています
- 学習が終わってバージョンを登録したら、そのまま推論と評価まで回したい
- 推論の出力を、評価の入力として自動で渡したい
- 評価のやり方を固定して、バージョンどうしの結果を同じ条件で比べたい
- ルールを作る前に登録したバージョンや、学習の途中で登録したバージョンにも、後から同じ評価を回したい
仕組み
学習Run → モデルのバージョンを登録 → ルールA: 推論Run → ルールB: 評価Run → 昇格policyで合否判定- きっかけは、モデルのバージョンの登録です。Artifactをアップロードしただけでは起動しません。
- バージョンの登録方法(画面、Python SDK、MLflow、Taskの出力モデル設定、
result.json)によらず、同じルールが動きます。 - 同じルールとバージョンの組み合わせでは、1回だけ起動します。ルールを作る前に登録したバージョンには、自動では動きません(既存のバージョンに適用する)。
- 推論と評価は、それぞれ別のJobです。
上の図のように、ルールを2段にすると「登録→推論→評価」がつながります。評価の結果でバージョンの昇格を決める方法は、評価の比較と昇格を参照してください。
ルールを作る
ルールを作れるのはProject adminです。API tokenで作る場合はadmin scopeも必要です。
- Modelsの[自動実行ルール]を開き、[自動実行ルールを作成]を押します。
- 次の項目を入力して[保存]を押します。
| 項目 | 内容 |
|---|---|
| 名前 | ルールの名前です。例:登録時に推論 |
| トリガー | [モデル登録]か[上流ruleの成功] |
| 上流rule | トリガーが[上流ruleの成功]のときに、前段のルールを選びます |
| 対象モデル系列 | このルールを動かすモデル系列です。コードバージョンが対応する系列から選びます |
| 実行種別 | 推論、評価、データ処理 |
| Experiments | Runを記録するExperiment |
| コードバージョン | 対象モデル系列と実行種別に対応するコードバージョン |
| コンピュータ、GPU ID | 実行先とGPU。GPUを選ばなければCPUだけで実行します |
| 入力データセットバージョン | 評価用の正解データなど、どのバージョンにも同じものを渡すデータ |
| パラメータ、タグ | JSONで指定します。automation.とmmt.で始まるタグはサーバーが付けるので使えません |
| 最大試行回数 | 1〜100。2以上にすると、失敗したときに自動で再試行します。既定は1です。自動の再試行だけの上限で、Jobsで人が再実行する分は数えません |
- 一覧に追加されたルールの[状態]が[有効]になっていることを確かめます。
ルールは作成した後に設定を変えられません。変えられるのは有効と無効だけです。設定を変えたいときは新しいルールを作り、古いルールを[無効にする]で止めます。過去の実行がどの設定で動いたかを、後から確かめられるようにするためです。
Python SDKでも作れます。
rule = client.create_automation_rule(
project_id, name="登録時に推論", model_families=["linear"], kind="inference",
experiment_id=experiment_id, code_version_id=code_version_id, target_id=target_id,
input_dataset_version_ids=[], parameters={"batch_size": 8},
)推論の後に評価を回す(ルールの連鎖)
推論のルールAを[モデル登録]で作り、評価のルールBを[上流ruleの成功]・上流=Aで作ります。バージョンを登録するとAの推論Runが動き、それが成功した時点でBの評価Runが起動します。
- 評価Runは、推論と同じバージョンで作ります。
- 評価Runの入力データセットバージョンは、Bに固定したもの(正解セット)と、推論Runが出力したデータセットバージョンの両方です。
- 推論Runが出力したデータセットバージョンが1件も無いまま成功すると、評価は起動せず「起動せず(上流のRunに出力データセットなし)」を記録します。
- 推論Runが失敗・中止したときは、評価は起動せず「起動せず(上流のRunが失敗・停止)」を記録します。
- 推論Runが失敗し、Jobsから再実行して成功した場合は、その再実行のRunを上流として評価を起動します。
- 上流のルールか下流のルールを無効にすると、下流は起動しません。
- 連鎖は、1段目を含めて5段までです。
人が手で作ったRunは、ルールと同じタグを付けても連鎖しません。
上流Runの出力を受け取る
推論コードは、出力をデータセットバージョンとして登録します。SDKを使わないコンテナでは、result.json(version 2)のdatasetsで宣言できます(workerの導入と常駐)。
評価コードには、上流の推論Runが次の形で渡ります。
| 渡すもの | 内容 |
|---|---|
MMT_UPSTREAM_RUN_ID | 上流RunのID |
MMT_UPSTREAM_RUN_FILE | upstream-run.jsonのパス。{runId, outputDatasetVersionIds, outputModelVersionIds}が入ります |
MMT_INPUT_DATASET_DIRS | 入力データセットバージョンごとの、取得済みの本体のディレクトリ(JSON) |
Python SDKでは、上流RunのArtifactを評価コードから取得できます。
from mado_tracking import download_upstream_artifacts, upstream_run_id
print(upstream_run_id()) # 上流が無いJobではNone
files = download_upstream_artifacts("upstream", prefix="container/")取得したファイルは、保存パスの階層を保ってupstream/の下に置かれます。
評価結果の表から推論Runの音声を指すときは、評価Runへコピーせずmmt-artifact://runs/<推論RunのID>/<保存パス>と書きます。表の形式は評価の比較と昇格を参照してください。
学習中に登録したバージョンは、学習の成功を待つ
SDKのregister_output_model()やMLflowのlog_model(registered_model_name=…)は、学習Runの実行中にバージョンを登録します。その後に学習が失敗しても推論・評価が動かないように、生成元Runが終わっていないバージョンは、学習の成功まで起動を保留します。
| 生成元Runの状態 | 自動実行 |
|---|---|
| 生成元Runなし、または登録時点で終了済み | 登録と同時に起動 |
| 実行中 | 保留し、履歴に「学習完了待ち」と表示 |
| 保留中に完了 | その時点で有効なルールで起動 |
| 保留中に失敗・中止 | 起動せず「起動せず(学習Runが失敗・停止)」を記録 |
| 保留から7日を超えた、または学習Runを削除した | 起動せず「起動せず(学習完了待ちの期限切れ)」を記録 |
いったん失敗や期限切れで閉じた保留は、その後に学習Runが成功しても起動しません。後から動かすときは、既存のバージョンに適用します。
実行の結果を確かめる
![]()
Modelsの[自動実行履歴]で、ルールごとの起動結果と、作ったRun・Jobの状態を確認できます。新しい順に100件ずつ表示し、[さらに表示]で古いものを読みます。[ルール][バージョン]で絞り込めます。ルールの詳細の[このルールの実行履歴を見る]からは、そのルールに絞った履歴が開きます。
| 起動結果 | 意味 |
|---|---|
| Jobを登録 | RunとJobを作りました。[Run・Jobの状態]で進み具合を確認します |
| 学習完了待ち | 学習Runの成功を待っています |
| 起動せず | 条件を満たさないため起動しませんでした。理由を表示します |
| 起動に失敗 | ルールの所有者の権限が無い、実行先が無効などの理由でRunを作れませんでした。理由を起動結果の下に表示します。登録したバージョンは残ります |
連鎖した実行は[段]に「1段目」「2段目」と表示します。[学習Runを開く][上流のRunを開く]から、その実行のきっかけになったRunへ移動できます。バージョンの詳細画面の[自動実行]でも、そのバージョンの分だけを確認できます。
起動の失敗を通知で受け取るには、Projectの通知ルールでautomation.failedを選びます(通知)。
既存のバージョンに適用する
Project adminは、有効なルールを既存のバージョンへ手で適用できます。無効なルールの詳細には適用の欄の代わりに[有効にする]が出ます。有効にすると適用できます。次のような場合に使います。
- ルールを作る前に登録したバージョンを評価したい
- 学習の失敗や期限切れで起動しなかったバージョンを動かしたい
- 評価コードを変えたので、基準のバージョンをもう一度評価したい
- [自動実行ルール]で対象のルールを選び、ルールの詳細を開きます。
- [既存のバージョンに適用]で、[適用するバージョン]を選びます。上流のあるルールでは、[上流のRun]を選びます。上流のRunは、上流のルールが作った成功したRunで、出力データセットバージョンがあるものに限ります(新しい順に200件から選べます)。
- [適用する]を押し、確認で内容を確かめて実行します。
- 「Jobを登録しました」と表示されたら、[自動実行履歴]で状態を確認します。
同じルールとバージョンの実行が待機中・実行中のときは適用できません。終わっていれば、試行回数を1つ増やした新しいRunを作ります。手で適用した推論が成功すると、後段の評価は通常どおり連鎖します。
[自動実行履歴]とバージョンの詳細画面の[再実行]でも、同じルールを同じバージョン(連鎖するルールは同じ上流Run)へ適用し直せます。どちらもProject adminにだけ表示します。適用した人は履歴と監査ログに残ります。
失敗したときに自動で再試行する
ルールの[最大試行回数]を2以上にすると、自動実行のRunが失敗したときに次の試行を自動で登録します。GPUを無駄に使わないように、既定は1(再試行しない)です。
| 自動実行のRunの終わり方 | 自動で再試行するか |
|---|---|
| RunとJobが失敗し、試行回数が上限未満 | する(履歴に「n回目の失敗を自動で再試行」) |
| 試行回数が上限に達した | しない |
| 中止(人が止めた) | しない |
| ルールが無効 | しない |
| 人が作ったRun、人がJobsから再実行したRun | しない |
- 再試行は最初からやり直します。checkpointから続けたいときは、Jobsで手で再開します(学習の途中再開)。
- 再試行したRunが成功すると、後段のルールは通常どおり連鎖します。
- 最大試行回数は、自動の再試行だけの上限です。自動で再試行しないルールのRunも、試行回数が上限に達したRunも、Jobsの[新しいRunで再実行]で人が再実行できます。再実行できるのは、Jobの作成者(ルールの所有者)とProject adminです(Jobsの画面)。
ルールの所有者をService Accountへ移す
自動実行は、ルールの所有者の権限で起動し、所有者を作成者とするRunを作ります。所有者は最初はルールを作った人です。その人が異動などでProject adminでなくなると、ルールは起動に失敗するようになります。長く使うルールは、人に紐付かないService Accountへ所有者を移しておきます。
- Projectの設定で、roleがadminのService Accountを作ります。tokenを発行する必要はありません(API tokenとService Account)。
- [自動実行ルール]で対象のルールを選び、[Service Accountへ移す]を押します。
- [移管先のService Account]を選んで確定します。
- ルールの詳細の[所有者]が
<名前>(Service Account)になったことを確かめます。
移管できるのはProject adminだけです。移管先は、同じProjectの有効なService Accountで、roleがadminのものに限ります。ルールを作った人の記録は変わらず、移管は監査ログに残ります。
ルールの実行先がPrivateのコンピュータなら、そのコンピュータの所有者が作ったService Accountへ移します。ほかの人が作ったService Accountへ移すと、そのコンピュータを使えないため、起動に失敗します(コンピュータと公開範囲)。
評価コードを直したとき
ルールの設定は変えられないので、評価コードを直したら次の順で切り替えます。
- [自動実行ルール]で古い評価のルールを選び、[複製して新しく作る]を押します。名前・トリガー・上流rule・系列・コードなど、今の設定を引き継いだ作成画面が開きます。
- [コードバージョン]を新しいものに変え、名前を直して作成します。[作成したら「…」を無効にする]に印が付いたままなら、古いルールは作成と同時に無効になります。古いルールを上流にしているルールがあるときは、画面に表示します。それらは古いルールが無効になると動かなくなるので、同じ操作で作り直します。
- 基準のバージョン(
productionが指すバージョンなど)の推論Runを[上流のRun]に指定して、新しい評価のルールを適用します。推論はやり直さず、評価だけを新しいコードで回します。
評価の比較は、評価コードのバージョンが同じRunどうしで行います。基準のバージョンも新しいコードで評価しておかないと、新しいバージョンの比べる相手がいません。
権限
| 操作 | 必要な権限 |
|---|---|
| ルールと履歴を見る | viewer以上 |
| ルールの作成、有効・無効の切り替え、既存のバージョンへの適用、再実行、所有者の移管 | Project admin(API tokenはadmin scope) |