> ## Documentation Index
> Fetch the complete documentation index at: https://arkor-92aeef0e-eng-716.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 学習の開始とジョブの観察

> Studio の Home と Job 詳細ページ: 学習をトリガーし、ストリームを眺め、1 つのジョブを掘り下げる。

# 学習の開始とジョブの観察

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](/ja/cli/build-and-start) を参照。

### 「最初のジョブ」で起きていること

**Run training** をクリックすると、2 つのフェーズが続きます:

1. **GPU の確保。** ジョブは `Warming up GPU` と表示されます。Loss チャートは `Waiting for GPU` のプレースホルダー、イベントリストは空のままで、Metadata サイドバーの **Phase** 行は `Warming up GPU`、**GPU warm-up** タイマーが動きます。このフェーズの時間は状況次第です。直前のジョブで warm な状態の GPU が残っていれば普通は 1 分以内ですが、cold な状態から立ち上げる必要がある場合は数分かかることがあります。なぜそうなるかは [Quickstart](/ja/quickstart) を参照。
2. **学習本体。** `training.started` が届くとステータスが `Running` に変わり、Loss チャートが `training.log` フレームから更新を始め、**Phase** 行が `Training run` になります。これが Quickstart のテンプレート表にある 7〜12 分のウィンドウです。

<Tip>
  **Run training** はブラウザータブをフォアグラウンドにしてからクリックしてください。Studio が通知許可をブラウザーに求め、ジョブが完了または失敗したときにデスクトップ通知とタブタイトルのインジケーターを表示するので、タブを見張る必要がなくなります。
</Tip>

## 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()`](/ja/sdk/trainer-control#cancel) を呼んでください。Studio は今日 UI で公開していません。
* **Artifact ブラウザーなし。** 完了ジョブの artifact 数は出ますが、個別 artifact をリスト／リンクしません。完全な artifact アクセスにはクラウド API を、あるいは学習中の SDK の `onCompleted({ artifacts })` コールバックを使ってください。
* **学習途中の推論なし。** Playground は完了ジョブ専用です（[Playground](/ja/studio/playground) 参照）。学習途中のライブ確認には SDK の [`onCheckpoint({ infer })`](/ja/sdk/callbacks) を使ってください。
