Skip to content

モデル登録後の自動実行 ​

自動実行ルールの一覧と詳細

自動実行ルールを作っておくと、モデルのバージョンを登録したときに、推論と評価のJobを自動で起動します。ルールは、使うコードバージョン、データセットバージョン、コンピュータ、パラメータを固定して保存するため、どのバージョンも同じ条件で推論・評価されます。

こんなときに向いています ​

  • 学習が終わってバージョンを登録したら、そのまま推論と評価まで回したい
  • 推論の出力を、評価の入力として自動で渡したい
  • 評価のやり方を固定して、バージョンどうしの結果を同じ条件で比べたい
  • ルールを作る前に登録したバージョンや、学習の途中で登録したバージョンにも、後から同じ評価を回したい

仕組み ​

text
学習Run → モデルのバージョンを登録 → ルールA: 推論Run → ルールB: 評価Run → 昇格policyで合否判定
  • きっかけは、モデルのバージョンの登録です。Artifactをアップロードしただけでは起動しません。
  • バージョンの登録方法(画面、Python SDK、MLflow、Taskの出力モデル設定、result.json)によらず、同じルールが動きます。
  • 同じルールとバージョンの組み合わせでは、1回だけ起動します。ルールを作る前に登録したバージョンには、自動では動きません(既存のバージョンに適用する)。
  • 推論と評価は、それぞれ別のJobです。

上の図のように、ルールを2段にすると「登録→推論→評価」がつながります。評価の結果でバージョンの昇格を決める方法は、評価の比較と昇格を参照してください。

ルールを作る ​

ルールを作れるのはProject adminです。API tokenで作る場合はadmin scopeも必要です。

  1. Modelsの[自動実行ルール]を開き、[自動実行ルールを作成]を押します。
  2. 次の項目を入力して[保存]を押します。
項目内容
名前ルールの名前です。例:登録時に推論
トリガー[モデル登録]か[上流ruleの成功]
上流ruleトリガーが[上流ruleの成功]のときに、前段のルールを選びます
対象モデル系列このルールを動かすモデル系列です。コードバージョンが対応する系列から選びます
実行種別推論、評価、データ処理
ExperimentsRunを記録するExperiment
コードバージョン対象モデル系列と実行種別に対応するコードバージョン
コンピュータ、GPU ID実行先とGPU。GPUを選ばなければCPUだけで実行します
入力データセットバージョン評価用の正解データなど、どのバージョンにも同じものを渡すデータ
パラメータ、タグJSONで指定します。automation.とmmt.で始まるタグはサーバーが付けるので使えません
最大試行回数1〜100。2以上にすると、失敗したときに自動で再試行します。既定は1です。自動の再試行だけの上限で、Jobsで人が再実行する分は数えません
  1. 一覧に追加されたルールの[状態]が[有効]になっていることを確かめます。

ルールは作成した後に設定を変えられません。変えられるのは有効と無効だけです。設定を変えたいときは新しいルールを作り、古いルールを[無効にする]で止めます。過去の実行がどの設定で動いたかを、後から確かめられるようにするためです。

Python SDKでも作れます。

python
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_FILEupstream-run.jsonのパス。{runId, outputDatasetVersionIds, outputModelVersionIds}が入ります
MMT_INPUT_DATASET_DIRS入力データセットバージョンごとの、取得済みの本体のディレクトリ(JSON)

Python SDKでは、上流RunのArtifactを評価コードから取得できます。

python
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は、有効なルールを既存のバージョンへ手で適用できます。無効なルールの詳細には適用の欄の代わりに[有効にする]が出ます。有効にすると適用できます。次のような場合に使います。

  • ルールを作る前に登録したバージョンを評価したい
  • 学習の失敗や期限切れで起動しなかったバージョンを動かしたい
  • 評価コードを変えたので、基準のバージョンをもう一度評価したい
  1. [自動実行ルール]で対象のルールを選び、ルールの詳細を開きます。
  2. [既存のバージョンに適用]で、[適用するバージョン]を選びます。上流のあるルールでは、[上流のRun]を選びます。上流のRunは、上流のルールが作った成功したRunで、出力データセットバージョンがあるものに限ります(新しい順に200件から選べます)。
  3. [適用する]を押し、確認で内容を確かめて実行します。
  4. 「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へ所有者を移しておきます。

  1. Projectの設定で、roleがadminのService Accountを作ります。tokenを発行する必要はありません(API tokenとService Account)。
  2. [自動実行ルール]で対象のルールを選び、[Service Accountへ移す]を押します。
  3. [移管先のService Account]を選んで確定します。
  4. ルールの詳細の[所有者]が<名前>(Service Account)になったことを確かめます。

移管できるのはProject adminだけです。移管先は、同じProjectの有効なService Accountで、roleがadminのものに限ります。ルールを作った人の記録は変わらず、移管は監査ログに残ります。

ルールの実行先がPrivateのコンピュータなら、そのコンピュータの所有者が作ったService Accountへ移します。ほかの人が作ったService Accountへ移すと、そのコンピュータを使えないため、起動に失敗します(コンピュータと公開範囲)。

評価コードを直したとき ​

ルールの設定は変えられないので、評価コードを直したら次の順で切り替えます。

  1. [自動実行ルール]で古い評価のルールを選び、[複製して新しく作る]を押します。名前・トリガー・上流rule・系列・コードなど、今の設定を引き継いだ作成画面が開きます。
  2. [コードバージョン]を新しいものに変え、名前を直して作成します。[作成したら「…」を無効にする]に印が付いたままなら、古いルールは作成と同時に無効になります。古いルールを上流にしているルールがあるときは、画面に表示します。それらは古いルールが無効になると動かなくなるので、同じ操作で作り直します。
  3. 基準のバージョン(productionが指すバージョンなど)の推論Runを[上流のRun]に指定して、新しい評価のルールを適用します。推論はやり直さず、評価だけを新しいコードで回します。

評価の比較は、評価コードのバージョンが同じRunどうしで行います。基準のバージョンも新しいコードで評価しておかないと、新しいバージョンの比べる相手がいません。

権限 ​

操作必要な権限
ルールと履歴を見るviewer以上
ルールの作成、有効・無効の切り替え、既存のバージョンへの適用、再実行、所有者の移管Project admin(API tokenはadmin scope)