学習の開始とジョブの観察
Studio の Home ページ(#/)は左の Run training と右の Jobs リスト の 2 列で構成されます。一覧でジョブをクリックすると Job 詳細(#/jobs/:id)に遷移し、ライブイベントストリームと Loss チャートはここに置かれています。
Run training
Run training パネルはページ読み込み時に /api/manifest を 1 度呼びます。レスポンスはプロジェクトの createArkor({ trainer }) のサマリで、これをもとにアクションをラベル付けします:
- トレーナーが見つかれば
Run training: <trainer name>。
- バンドルは import されたが何も露出しない場合
No trainer in src/arkor/index.ts yet. Add createTrainer(...) and pass it to createArkor.(src/arkor/index.ts にトレーナーがまだありません。createTrainer(...) を追加して createArkor に渡してください)。
- ビルド自体が失敗(
src/arkor/ の typo など)した場合 Couldn't read manifest: <error>(マニフェストを読み取れませんでした: <error>)。
ボタンは学習の進行中、およびトレーナー未解決のとき無効化されます。
クリックすると Studio は POST /api/train を送ります。バックエンドはサブプロセスで arkor start を spawn し、stdout / stderr を生テキストとしてストリーム返却します。整形済みログボックスは自動スクロールし、表示されるのはターミナルで arkor start を走らせたときの出力そのものです。
トレーナー選択やフラグを渡す入力フォームはありません: Studio は常に createArkor で登録されたトレーナーを走らせ、arkor start は .arkor/build/index.mjs があれば再利用します。同じページで複数回クリックする間に src/arkor/ の編集は自動では拾われません。編集の合間に Run training ページをリロード(あるいはターミナルから arkor build)してから次のクリックをしてください。具体的なリビルドルールは CLI § build / start を参照。
「最初のジョブ」で起きていること
Run training をクリックすると、2 つのフェーズが続きます:
- GPU の確保。 ジョブは
Warming up GPU と表示されます。Loss チャートは Waiting for GPU のプレースホルダー、イベントリストは空のままで、Metadata サイドバーの Phase 行は Warming up GPU、GPU warm-up タイマーが動きます。このフェーズの時間は状況次第です。直前のジョブで warm な状態の GPU が残っていれば普通は 1 分以内ですが、cold な状態から立ち上げる必要がある場合は数分かかることがあります。なぜそうなるかは Quickstart を参照。
- 学習本体。
training.started が届くとステータスが Running に変わり、Loss チャートが training.log フレームから更新を始め、Phase 行が Training run になります。これが Quickstart のテンプレート表にある 7〜12 分のウィンドウです。
Run training はブラウザータブをフォアグラウンドにしてからクリックしてください。Studio が通知許可をブラウザーに求め、ジョブが完了または失敗したときにデスクトップ通知とタブタイトルのインジケーターを表示するので、タブを見張る必要がなくなります。
Jobs リスト
Jobs リストはマウント時に 1 度、その後 5 秒ごとに GET /api/jobs をポーリングします。手動リフレッシュボタンはなく、間隔は固定です。
| 列 | ソース |
|---|
| Status | Job.status(queued / running / completed / failed / cancelled)に、Studio 側のリスト表示で 1 つの表示ステートを足したもの。createdAt が直近 90 秒以内の queued ジョブは Warming up GPU として表示される。リスト画面は /api/jobs のポーリングだけで SSE は開かないため、ここでは createdAt の窓だけで判定する。Job 詳細では同じルールに加えて SSE ストリームの接続状態も加味される。セルは色付け用の CSS クラスを持つ。 |
| Name | Job.name。#/jobs/<id> にリンク。 |
| Created | new Date(Job.createdAt).toLocaleString()。 |
| ID | Job.id、等幅フォント。 |
リストはバックエンドが返した順そのままを表示します。クライアント側のフィルタ、検索、ページングはありません。プロジェクトにジョブがまだ無いとき、パネルは No jobs yet.(ジョブはまだありません)と読みます。
Job 詳細
#/jobs/:id は EventSource 経由で GET /api/jobs/:id/events への Server-Sent Events 接続を開きます。ページは 5 つの名前付きイベントとストリーム終端を待ち受けます。
下の各行で、イベントログはイベント名をメッセージとは別カラムで表示します。表内の「メッセージ」は JobDetail.pushEvent() が SSE ペイロードから生成する文字列です。
| イベント | ページへの効果 |
|---|
training.started | ステータスが running に変わる。イベントログのメッセージは生の JSON ペイロード(イベントごとの整形なし)。 |
training.log | step、loss、そして(含まれていれば)evalLoss が Loss チャートのデータ配列に追加。イベントログのメッセージは step=<n> で始まり、そのステップで数値である方だけ loss=<value> と evalLoss=<value> が追記される(null / 非数値のフィールドはセグメントごと省略)。eval-only フレームでは step=<n> evalLoss=<value> のように描画される。 |
checkpoint.saved | イベントログのメッセージは step=<n>。チャートには影響なし。 |
training.completed | ステータスが completed に変わる。イベントログのメッセージは <n> artifact[s]。artifact 数自体は Metadata サイドバーの Artifacts 行に表示される。 |
training.failed | ステータスが failed に変わる。イベントログのメッセージはペイロードの error 文字列で、同じテキストの赤いバナーがチャート上部にも表示される。 |
end | ページが EventSource をクローズ。再接続なし。 |
ストリームエラーは Event stream interrupted. という別バナーが loss チャート / events ログのカード群の上に表示され(ログ行としては追加されません)、次の SSE フレーム到着でバナーは消えます。再接続はブラウザーの EventSource の retry 挙動に任されます。
イベントログは 直近 500 件 だけを保持します(新着につれて古いエントリが消えていきます)。SSE の名前付きイベントから描画するスクロールリストで、フォレンジック用ではなく素早い目視確認のためのものです。完全な履歴はクラウド API を直接見てください。
Loss チャートは training.log イベントから描画される SVG プロットです。Y 軸は最小値と最大値によるスケーリング、X 軸はステップ番号で、最大 2 系列を表示します:
- Training loss — 実線のティール色。数値
loss を含むイベントごとに 1 頂点。
- Eval loss — 破線のピンク色(点マーカー付き)。数値
evalLoss を含むイベント(通常は evalSteps 刻み)から描画。系列はイベントから直接構築するため、evalLoss のみを持ち loss を含まない eval-only フレームも線・凡例・統計に反映されます。Eval ポイントが 1 つも来ていない間は凡例にも表示されません。
ホバーすると最寄りステップと、そのステップに含まれる loss / evalLoss のうち存在する値が表示されます(eval-only ステップでは loss 値は出ず、その逆も同様)。チャートは loss または evalLoss のいずれかが数値であるイベントが 1 件以上届くまで Waiting for training.log events…(training.log イベント待ち)プレースホルダーを表示します。両方とも null / 省略の training.log フレームはカウントされません。
上級モード(Advanced metrics)
チャートヘッダーの Advanced トグルを ON にすると、系列ごとの統計パネルが現れます。各カードに表示される項目:
- Mean loss ± 95% CI — Loss 値の標本平均と 95% 信頼区間の半幅(Student の t 分布。n > 31 では z = 1.96 にフォールバック)。
- Std dev と Variance — Bessel 補正済みの不偏推定量(
ddof=1)。
- p90 と p95 — numpy のデフォルトに合わせた線形補間パーセンタイル。
Eval カードは数値 evalLoss を含む training.log イベントが届くまでは空のままです。
このページがしないこと
- キャンセルボタンなし。 動作中ジョブを止めるには、トレーナーを駆動する自前コードから
trainer.cancel() を呼んでください。Studio は今日 UI で公開していません。
- Artifact ブラウザーなし。 完了ジョブの artifact 数は出ますが、個別 artifact をリスト/リンクしません。完全な artifact アクセスにはクラウド API を、あるいは学習中の SDK の
onCompleted({ artifacts }) コールバックを使ってください。
- 学習途中の推論なし。 Playground は完了ジョブ専用です(Playground 参照)。学習途中のライブ確認には SDK の
onCheckpoint({ infer }) を使ってください。