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

# createTrainer

> ファインチューニング学習を定義する: モデル、データセット、LoRA、ハイパーパラメーター、コールバック。

# `createTrainer`

```ts theme={null}
import { createTrainer } from "arkor";

export const trainer = createTrainer({
  name: "support-bot-v1",
  model: "unsloth/gemma-4-E4B-it",
  dataset: { type: "huggingface", name: "arkorlab/triage-demo" },
  lora: { r: 16, alpha: 16 },
  maxSteps: 100,
});
```

`createTrainer` は `start` / `wait` / `cancel` メソッドを持つ `Trainer` オブジェクトを返します（[トレーナー制御](/ja/sdk/trainer-control) を参照）。この関数は `TrainerInput` のクライアント側バリデーションを **しません**: TypeScript が型付きフィールドをコンパイル時にチェックし、それ以外は `start()` 実行時にクラウド API へ転送されます。不正な値は構築時のクライアント側 throw ではなく、学習中にバックエンドエラーとして現れます。

## 必須フィールド

| フィールド     | 型                                  | 補足                                                      |
| --------- | ---------------------------------- | ------------------------------------------------------- |
| `name`    | `string`                           | ジョブ名。Studio とマネージドバックエンドに表示。                            |
| `model`   | `string`                           | ベースモデル ID。今日のキュレートテンプレートは `unsloth/gemma-4-E4B-it` を使用。 |
| `dataset` | [`DatasetSource`](/ja/sdk/dataset) | HuggingFace データセット名 or blob URL。                        |

## 型付きオプションフィールド

ファーストクラスの TypeScript 型を持ち、安全に使えます:

| フィールド             | 型                           | デフォルト        | 効果                                                                                               |
| ----------------- | --------------------------- | ------------ | ------------------------------------------------------------------------------------------------ |
| `lora`            | `LoraConfig`                | バックエンドのデフォルト | LoRA / QLoRA のノブ（`r`、`alpha`、`maxLength?`、`loadIn4bit?`）。                                        |
| `maxSteps`        | `number`                    | バックエンドのデフォルト | 学習ステップ数の上限。                                                                                      |
| `numTrainEpochs`  | `number`                    | バックエンドのデフォルト | データセット周回数（`maxSteps` の代替）。                                                                       |
| `learningRate`    | `number`                    | バックエンドのデフォルト | オプティマイザのステップサイズ。                                                                                 |
| `batchSize`       | `number`                    | バックエンドのデフォルト | デバイスごとの学習バッチサイズ。                                                                                 |
| `optim`           | `string`                    | バックエンドのデフォルト | オプティマイザ名。                                                                                        |
| `lrSchedulerType` | `string`                    | バックエンドのデフォルト | 学習率スケジュール（例: `linear`、`cosine`）。                                                                 |
| `weightDecay`     | `number`                    | バックエンドのデフォルト | 正則化の重み。                                                                                          |
| `dryRun`          | `boolean`                   | `false`      | スモークテスト（下記参照）。                                                                                   |
| `callbacks`       | `Partial<TrainerCallbacks>` | `{}`         | [ライフサイクルコールバック](/ja/sdk/callbacks) を参照。                                                          |
| `abortSignal`     | `AbortSignal`               | なし           | ローカルの `wait()` を停止。バックエンドのジョブはキャンセル **しません**。[トレーナー制御](/ja/sdk/trainer-control#abortsignal) を参照。 |

## `LoraConfig`

```ts theme={null}
interface LoraConfig {
  r: number;            // LoRA ランク（よくある値は 8 / 16 / 32）
  alpha: number;        // LoRA alpha（多くは 2 × r）
  maxLength?: number;   // このトークン数を超えるサンプルは切り詰める
  loadIn4bit?: boolean; // ベースモデルを 4-bit でロード（QLoRA）
}
```

`lora` を完全に省略するとバックエンドのデフォルトになります。同梱テンプレートが使う出発点は `r: 16, alpha: 16` です。

## `dryRun`

```ts theme={null}
createTrainer({
  name: "smoke",
  model: "unsloth/gemma-4-E4B-it",
  dataset: { type: "huggingface", name: "arkorlab/triage-demo" },
  dryRun: true,
});
```

`dryRun: true` はバックエンドにデータセットを切り詰め、ステップ数を制限してパイプラインの全段階（データロード、`chat-template` のレンダ、学習ループ、チェックポイントアップロード、イベントストリーム）を走らせるよう指示します。それでも GPU 時間は使います、ただしずっと少なく。CI や、初めてコールバックを組んでいるときに便利です。完全に課金回避するための手段ではありません。

## 上級: 転送フィールド

これらは `unknown` として型付けされ、クラウド API にそのまま転送されます（`packages/arkor/src/core/trainer.ts:100-108`）。SDK のファーストクラス型付けが追いつく前にバックエンドが新フィールドを公開できるよう、入力形に予約されています。

| フィールド                                                | 状況                                                             |
| ---------------------------------------------------- | -------------------------------------------------------------- |
| `warmupSteps`、`loggingSteps`、`saveSteps`、`evalSteps` | そのまま転送。バックエンドの想定形を既に知っている場合のみ使用してください。                         |
| `trainOnResponsesOnly`                               | そのまま転送。                                                        |
| `datasetFormat`、`datasetSplit`                       | そのまま転送。HuggingFace ソースには専用 `dataset` フィールドの `split` を優先してください。 |

これらのフィールドは明示的に **安定ではありません**: バックエンド契約はリリース間で変わり得て、渡す値にコンパイル時チェックもありません。上記の型付きフィールドを優先し、他で賄えないときだけ手を出してください。

## まだないもの

* マルチトレーナープロジェクト。`createArkor` は単一の `trainer` を受け付けます。配列形はありません。2 つ目のトレーナーを登録するには、エクスポートをランタイムで切り替えるか、API がその形を獲得するのを待つことになります。
