Jobsの画面
Jobsは、Projectで起動したJob(学習・推論・評価などの1回の実行)を新しい順に並べる画面です。左のサイドバーの「実行」にある[Jobs]で開きます。Jobを起動するほか、待機中のJobが始まらない理由を確かめたり、ログを読んだり、Jobを止めたり流し直したりできます。表示は5秒ごとに更新します。
1つのJobには1つのRunが対応します。Jobが動かした結果(メトリクス、Artifact、終了状態)はRunに残ります。
こんなときに向いています
- 流した学習が待機中のまま始まらないので、理由を知りたい
- 失敗したJobのログを読んで、原因を確かめたい
- 動いているJobを止めたい。失敗したJobを同じ設定で流し直したい
一覧の見方
| 列 | 内容 |
|---|---|
| Job | JobのIDの先頭8文字。押すと一覧の下に詳細が開きます |
| 状態 | 待機中、割当済み、実行中、完了、失敗、中止。siteのJobでは、その横に段階(手動投入待ち、投入中、待ち行列、準備・GPU待ち)か終わった理由(時間切れ、待ち行列の上限、投入失敗)を出します。heartbeatが60秒以上届いていないJobには「応答なし」、停止を頼んだJobには「停止要求済み」が付きます |
| Run | Run名と実行種別。押すとRunの画面へ移ります。checkpointから再開したRunには「再開」が付きます |
| 作成者 | JobのRunを作った人。自動実行ルールとフックのJobでは、ルールやフックの所有者です |
| Task | Jobを起動したTask(Taskから起動したときだけ) |
| コンピュータ | Jobを実行するコンピュータ |
| GPU ID | 使うGPUのID。siteのJobは「GPU ×2」のような数です。GPUを使わないJobは「CPUのみ」 |
| 実行場所 | siteのJobの、runnerのホストとスケジューラのジョブID |
| 起動元 | 人が直接起動したのではないJobの起動元(下の表) |
| 試行 | 「何回目 / 最大試行回数」。人が最大試行回数を超えて再実行したJobは「4(自動の再実行は3回目まで)」のように出します |
| 作成日時 | Jobを作った日時 |
| 操作 | [停止を要求][新しいRunで再実行][最新checkpointから再開](止める・流し直す) |
一覧の上の[状態]で、待機中・失敗などの状態に絞り込めます。
[起動元]には次のものが出ます。
| 表示の例 | 起動元 | 押すと |
|---|---|---|
Sweep: lr-search #3 | Sweepの試行(Sweep名と試行番号) | Sweepの画面へ移ります |
自動実行: 登録時に推論 | 自動実行ルール(ルール名) | — |
フック: 学習後の評価 | フック | フックの画面へ移ります |
親Job: 1a2b3c4d | ドライバーのJobが、コードから作った子Job | 親Jobの詳細を開きます |
array 3 / 10 | Job arrayの1つ(番号 / 個数) | そのarrayのJobだけを一覧に出します |
SweepのJobや自動実行のJobを人が[新しいRunで再実行]すると、作ったJobにはSweepと自動実行の起動元が出ません。フック、親Job、arrayは再実行したJobにも引き継ぎます。
Job array
フック、ドライバー、Python SDKのcreate_job_arrayなどでsiteにarray(番号だけが違う同じJobの組)を起動すると、一覧の上に「Job array」の表が出ます。番号ごとに最新の試行の状態を数えたものと、個数、コンピュータ、起動元が並びます。数えるのは一覧に読み込んだJobです。[Jobを表示]を押すとそのarrayのJobだけを一覧に出し、[すべてのJobを表示]で元に戻ります。
Jobを起動する
右上の[ジョブを起動]を押すと、「1. 実行内容」「2. 実行先」「3. 確認」の3つの段に分かれたダイアログが開きます。[次へ]で進み、[戻る]で前の段に戻ります。起動できるのはProjectのeditor以上です。
1. 実行内容
| 項目 | 内容 |
|---|---|
| Run名 | 作るRunの名前 |
| Experiments | Runを記録するExperiment |
| 実行種別 | 学習、ファインチューニング、推論、評価、データ処理 |
| モデルバージョン | 入力に使うモデルバージョン。任意 |
| コードバージョン | 実行するコード |
| 入力データセットバージョン | 実行前にworkerが取得して渡すデータセットバージョン。任意 |
| パラメータ、タグ、Environment | JSONで指定します |
[コードバージョン]には、選んだ実行種別とモデルバージョンに合うものだけが出ます。合わないものがあるときは、欄の下に「実行種別「推論」とモデルバージョンに合うコードバージョンだけを選べます(合わないもの 2件)。」のように件数を出します。使いたいコードが見当たらなければ、先に実行種別を変えてください。合うものが1つも無いときは、[コードを登録]へのリンクが出ます。
選んだ後でほかの項目を変えて合わなくなった選択は、外したうえで、何を外したかを画面に出します。
| 変えたもの | 外すもの | 画面に出る文 |
|---|---|---|
| 実行種別、モデルバージョン | コードバージョン | 選んでいたコードバージョンは、実行種別・モデルバージョンに合わないので外しました。選び直してください。 |
| コードバージョン | コンピュータ(とGPU) | 選んでいたコンピュータは、このコードバージョンのRuntimeを使えないので外しました。選び直してください。 |
| コンピュータ | GPU | コンピュータを変えたので、選んでいたGPUを外しました。 |
2. 実行先
| 項目 | 内容 |
|---|---|
| コンピュータ | 実行するコンピュータ。自分が使えて、コードバージョンのRuntimeを使えるコンピュータだけが出ます |
| GPU(選ばなければCPUのみ) | コンピュータに登録したGPUをチェックボックスで選びます。選ばなければCPUだけで実行します |
| 最大試行回数 | 1〜100。既定は3です。自動の再実行の上限で、人が[新しいRunで再実行]で流し直す分は数えません |
| このJobのコードから子Jobを作れる(ドライバー) | Jobのコードが、自分のJob tokenで子Jobを作れるようにします |
siteを選ぶと、GPU IDの代わりに[GPU数]、[制限時間(HH:MM:SS・任意)]、[失敗したら最初から再実行する]、[時間切れなら最新のcheckpointから再実行する]が出ます。自動の再実行が起きるのは、siteでこの2つを選んだときと、自動実行ルールの再試行のときです。
Runtimeに合うコンピュータが無いと「このRuntimeに対応するコンピュータがありません。」と出て、先へ進めません。
担当するworkerがいないコンピュータには、選択肢の名前の後ろに「(workerなし)」、担当するworkerが応答していないコンピュータには「(workerオフライン)」が付きます。選ぶと「「gpu-1」を担当するworkerがいません。このまま起動すると、Jobはworkerが動くまで待機中のままです。」のような警告と[workerの設定を開く]が出ます。起動はできますが、workerが動くまで始まりません(待機中のまま始まらないとき)。siteにはworkerが要らないので、何も付きません。
3. 確認
ここまでの内容と、コードバージョンのRuntimeの詳細が並びます。手動投入のsiteを選んだときは、起動したJobを投入するためのコマンドもここに出ます(外部のコンピュータ(site))。確かめたら[ジョブを起動]を押します。
起動すると一覧に新しいJobが加わり、その詳細が開きます。RunとJobは一度に作ります。コンピュータがJobを受け付けないなどでJobを作れなかったときは、Runも残りません。原因を直して、もう一度[ジョブを起動]を押してください。
Runの画面から起動する
コードを選んだRunの画面には、Jobの有無に応じたボタンが出ます。
| Runの状態 | ボタン |
|---|---|
| 待機中で、Jobがまだ無い | [ジョブを起動](editor以上)。そのRunのJobだけを作ります(Runは作り直しません) |
| Jobがある(実行中・終了後も) | [Jobを見る]。Jobsの画面でそのJobの詳細を開きます |
待機中のまま始まらないとき
SSH・LocalのコンピュータのJobは、そのコンピュータを担当するworkerが受け取って実行します。workerはtokenを発行したProjectのJobだけを受け取るので、ほかのProjectのworkerが動いていても、このProjectのJobは始まりません。
一覧の上の「始まらない待機中のJob」
担当するworkerがいない、または応答していないコンピュータに待機中のJobがあると、一覧の上に「始まらない待機中のJob」が出ます。
- コンピュータごとの件数(例:
gpu-1: 待機中 3件) - workerの状態(「workerなし」、または「workerオフライン」と最終応答の時刻)
- [workerの設定を開く]: そのコンピュータの詳細を開きます
workerを動かすのは、そのコンピュータの所有者です(所有者がいなければ全体管理者)。所有者と全体管理者には、コンピュータの詳細に「workerの設定」としてコマンドの例が出ます。手順はworkerの導入と常駐を参照してください。
Jobの詳細に出る理由
待機中のJobの詳細を開くと、項目の上に始まらない理由が出ます。
| 表示 | 意味 | すること |
|---|---|---|
| 「gpu-1」を担当するworkerがいません。 | このProjectのworkerで、このコンピュータのJobを受け取るものがありません | コンピュータの所有者に、workerを動かしてもらいます |
| 「gpu-1」を担当するworkerが応答していません(最終応答 …)。 | 担当のworkerから、2分以上応答がありません | workerのマシンでmado-tracking-worker statusとログを確かめます |
| 担当するworkerは応答していますが、このJobをまだ受け取っていません。(考えられる理由が続きます) | workerは動いていますが、次のどれかでJobを飛ばしています: コンピュータの同時実行数が埋まっている、選んだGPUをほかのJobが使っている、コンピュータが無効、コンピュータがコードのRuntimeを扱えない、LocalのコンピュータでAPI serverがlocal executorを許していない | 同時実行数とGPUなら、前のJobが終わるのを待つか、別のGPUやコンピュータで起動し直します。無効とRuntimeは[全体設定]→[コンピュータ]で、local executorはMMT_ALLOW_LOCAL_EXECUTOR(環境変数)を確かめます |
siteのJobにはworkerが要りません。状態の横の段階(手動投入待ち、待ち行列など)で、どこで待っているかが分かります。手動投入のsiteでは、一覧の上に「手動投入を待っているJob」と投入のコマンドが出ます(外部のコンピュータ(site))。
Computeの画面で確かめる
Computeの画面のコンピュータの一覧にも[worker]の列があり、Jobを流す前に確かめられます。
| 表示 | 意味 |
|---|---|
| workerオンライン 2 | 応答しているworkerの数 |
| workerオフライン | 担当のworkerはいるが、応答していません。最終応答の時刻も出ます |
| workerなし | このコンピュータを担当するworkerがいません |
| 不要(site) | siteなので、workerは要りません |
全体管理者には、[全体設定]→[コンピュータ]の詳細にも[worker(いずれかのProject)]が出ます。こちらはすべてのProjectのworkerを数えるので、オンラインと出ていても、このProjectのJobを受け取るworkerがいるとは限りません。このProjectで始まるかは、Computeの画面で確かめます。
Jobの詳細
一覧の[Job]の列のIDを押すと、一覧の下にそのJobの詳細が開き、画面がそこまで移ります。見出しはRun名です。[詳細を閉じる]で閉じます。URLに?job=<JobのID>が付くので、そのURLを渡せば同じJobの詳細を開けます。
詳細には、上から次の順に並びます。
- 待機中のJobが始まらない理由(待機中のまま始まらないとき)
- 項目: JobのID、状態、GPU ID、Heartbeat、終了コード、ジョブエラー。siteのJobでは段階、制限時間、スケジューラのジョブID、投入、runnerのホスト、job shellのバージョン、自動の再実行も出ます。arrayの番号、親Job、フック、連鎖の深さは、あるときだけ出ます
- 手動投入を待っているJobの案内(手動投入のsiteのとき)
- ログ
- 実行snapshot(起動したときのTaskの改訂番号、コードバージョン、コマンドなど。Taskとコードバージョン)
失敗の理由を見るときは、まず[ジョブエラー]と[終了コード]を見て、次にログを読みます。
ログを読む
ログは、Jobが待機中か実行中の間、5秒ごとに更新します。終わったJobのログは、開いたときに1回だけ読みます。
- 最新の2,000行を表示します。それより多いときは「最新の2,000行を表示しています(全12,345行)。」のように全体の行数を出します。[すべての行を読み込む]を押すと、すべての行を表示します。10,000行を超えるログでは[最新の10,000行まで読み込む]になり、それより前の行は[ダウンロード]で読みます。
- 多く読み込んだあとは、自動では更新しません。実行中のJobでは[新しい行を読み込む]で読み直し、[自動で更新する表示に戻る]で最新の2,000行の表示に戻ります。
- 開いたときは最新の行の位置にいます。最新の行の位置にいる間は、新しい行が来るとそこへ追います。上へ戻って読んでいる間は追いません。[最新へ]で最新の行へ戻ります。
- 時刻は秒まで表示します。
- tqdmの進捗バーのように
\rで同じ行を書き直すログは、最後に書いた内容だけを表示します。ダウンロードしたファイルには、記録したままの内容が入ります。
| 操作 | 内容 |
|---|---|
| レベル | すべてのレベル、情報、警告、エラー |
| 並び順 | 古い順、新しい順 |
| 検索 | 入力した語を含む行だけを出します。大文字と小文字は区別しません。一致した行数を「3行が一致」のように出します |
| ダウンロード | すべての行をRun名.logとして保存します。1行に時刻・レベル・本文をタブで区切って書きます。長いログも、サーバーが読みながら送るので、ブラウザに全部を読み込みません |
レベルと検索の絞り込みは、読み込んだ範囲が対象です。最新の2,000行だけを読み込んでいるときに古い行を探すなら、先に[すべての行を読み込む]を押します。[ダウンロード]は、絞り込みや読み込んだ範囲によらず、すべての行を保存します。Run名のうちファイル名に使えない文字は_に置き換えます。
止める・流し直す
[操作]の列のボタンで、Jobを止めたり、流し直したりします。押すと確認が開き、Run名・作成者・実行先と、何が起きるかが出ます。
| ボタン | 出る場面 | すること |
|---|---|---|
| [停止を要求] | 待機中、割当済み、実行中 | 待機中のJob(siteでは投入中・待ち行列のJobも)は、まだ実行を始めていないので、すぐに取り消します。実行中のJobは、プロセスへ停止を頼みます。workerが止めるまで状態は実行中のままです。どちらの場合も、このJobから作った子Jobがあれば止めます |
| [新しいRunで再実行] | 完了、失敗、中止 | 同じ設定で新しいRunとJobを作って実行し、作ったRunの画面へ移ります。元のRunとJobはそのまま残ります |
| [最新checkpointから再開] | 失敗、中止で、再開できるcheckpointがあるJob(Sweepの早期打ち切りで止めた試行を除く) | 保存したcheckpointのうち最新のものから、新しいRunとして続きを回します(学習の途中再開) |
確認で[停止する][再実行する]を押すと実行します。停止を頼んだJobは[停止を要求]が押せなくなり、状態の横に「停止要求済み」が付きます。
再実行について
- 再実行は最初からやり直します。Runの名前は
<元のRun名> (retry 2)のようになり、コードバージョン、実行モード、Taskの改訂番号、パラメータ、コンピュータ、GPUを引き継ぎます。 - 最大試行回数は自動の再実行だけの上限です。人は、最大試行回数に達したJobも再実行できます。フックのJob(最大試行回数の既定は1)や、自動実行ルールのJobも同じです。上限を超えると、[試行]は「2(自動の再実行は1回目まで)」のように出ます。
- 同じJobからたどった再実行は、100回目までです。
- 1つのJobから作れる再実行(checkpointからの再開を含む)は1つだけです。再実行済みのJobでもう一度[新しいRunで再実行]を押すと、前に作ったRunの画面へ移ります。さらに流し直すときは、再実行で作られたJobの行から行います。
止めたり流し直したりできる人
停止、再実行、checkpointからの再開ができるのは、Jobを作った人(JobのRunの作成者)とProject adminだけです。ほかの人の行の[操作]には、ボタンの代わりに「停止・再実行は作成者かProject adminだけができます」と出ます。自動実行ルールとフックのJobでは、作成者はルールやフックの所有者です。所有者がService Accountなら、流し直すのはProject adminです。
権限
| 操作 | 必要な権限 |
|---|---|
| Jobの一覧、詳細、ログを見る | viewer以上 |
| Jobを起動する | editor以上(API tokenはruns:writeとjobs:write) |
| 停止、再実行、checkpointからの再開 | JobのRunの作成者(editor以上)か、Project admin(API tokenはjobs:write) |