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

```ts
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/docs/framework/sdk/trainer-control) を参照）。この関数は `TrainerInput` のクライアント側バリデーションを **しません**: TypeScript が型付きフィールドをコンパイル時にチェックし、それ以外は `start()` 実行時にクラウド API へ転送されます。不正な値は構築時のクライアント側 throw ではなく、学習中にバックエンドエラーとして現れます。

## シグネチャー

```ts
function createTrainer(
  input: TrainerInput,
  /** @internal */
  context?: TrainerInternalContext,
): Trainer;
```

`TrainerInput` の全体は下記のパラメーターで説明します。返ってくる `Trainer` は [トレーナー制御](/ja/docs/framework/sdk/trainer-control) ページにあります。第 2 引数 `context` は `@internal` 注釈付きで、テストと高度なオーバーライド用に予約されています。`TrainerInternalContext` 自体は形状が安定していないため `arkor` から export されていません。設定可能な既知のフィールド (`reconnectDelayMs` / `maxReconnectDelayMs` / `maxReconnectAttempts`) は [トレーナー制御 > 再接続](/ja/docs/framework/sdk/trainer-control#再接続) を参照してください。

## 必須フィールド

| フィールド | 型 | 補足 |
| --- | --- | --- |
| `name` | `string` | ジョブ名。Studio とマネージドバックエンドに表示。 |
| `model` | `string` | ベースモデル ID。現在対応しているテンプレートは `gemma-4-E4B-it` を使用（[サポートしているモデル](/ja/docs/framework/models) を参照）。 |
| `dataset` | [`DatasetSource`](/ja/docs/framework/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/docs/framework/sdk/callbacks) を参照。 |
| `abortSignal` | `AbortSignal` | なし | ローカルの `wait()` を停止。バックエンドのジョブはキャンセル **しません**。[トレーナー制御](/ja/docs/framework/sdk/trainer-control#abortsignal) を参照。 |

## `LoraConfig`

```ts
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
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 がその形を獲得するのを待つことになります。

## 関連項目

- [トレーナー制御](/ja/docs/framework/sdk/trainer-control): `Trainer` オブジェクトの `start` / `wait` / `cancel`
- [ライフサイクルコールバック](/ja/docs/framework/sdk/callbacks): `callbacks` フィールド
- [`DatasetSource`](/ja/docs/framework/sdk/dataset): `dataset` フィールドの形
- [`createArkor`](/ja/docs/framework/sdk/create-arkor): トレーナーをプロジェクトマニフェストにラップ
