> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monostate.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# SFT 训练教程

> 训练第一个 LLM 的完整分步指南

# 使用 SFT 训练您的第一个 LLM

本教程将引导您完成向导的每一步，使用监督微调（SFT）训练语言模型。SFT 是教模型遵循指令的最常用方法。

## 开始之前

确保您有：

* 已安装 AITraining（`pip install aitraining`）
* 至少 8GB RAM（推荐 16GB）
* GPU 有帮助但不是必需的（Apple Silicon 效果很好！）

## 步骤 0：启动向导

```bash theme={null}
aitraining
```

您将看到欢迎横幅和说明。

## 步骤 1：选择训练器类型

```
📋 Step 0: Choose Trainer Type

Available trainer types:
   1. Large Language Models (LLM) - text generation, chat, instruction following
   2. Text Classification - categorize text into labels
   3. Token Classification - NER, POS tagging
   ...

Select trainer type [1-10, default: 1]:
```

**输入 `1` 并按 Enter** 选择 LLM 训练。

<Tip>输入 `:help` 查看每个训练器类型的详细说明。</Tip>

## 步骤 2：选择训练方法

```
📋 Step 1: Choose Training Type

Available trainers:
  1. sft             - Supervised Fine-Tuning (most common)
  2. dpo             - Direct Preference Optimization
  3. orpo            - Odds Ratio Preference Optimization
  4. ppo             - Proximal Policy Optimization (RL)
  5. reward          - Reward model training
  6. distillation    - Knowledge distillation
  7. default         - Generic training (same as SFT)

Select trainer [1-7, default: 1]:
```

**输入 `1` 并按 Enter** 选择 SFT。

<Note>
  `default` 和 `sft` 是相同的 - 它们使用相同的训练代码。`default`
  只是未指定训练器时的后备选项。
</Note>

### 这些是什么意思？

| 训练器               | 何时使用                         |
| ----------------- | ---------------------------- |
| **SFT / default** | 教模型遵循指令。您有良好响应的示例。**从这里开始！** |
| **DPO**           | 您有同一提示的好与坏响应配对               |
| **ORPO**          | 类似 DPO 但使用更少数据               |
| **PPO**           | 高级：使用奖励模型对响应评分               |
| **Reward**        | 训练奖励模型以对输出评分（与 PPO 一起使用）     |
| **Distillation**  | 将知识从较大的教师模型转移到较小的学生模型        |

## 步骤 3：项目名称

```
📋 Step 2: Basic Configuration

Project name [my-llm-project]:
```

输入项目名称，如 `my-first-chatbot` 或按 Enter 接受默认值。

<Warning>
  如果存在同名文件夹，向导会提供创建版本化名称（例如 `my-project-v2`）。
</Warning>

## 步骤 4：模型选择

这是最重要的步骤。向导显示来自 HuggingFace 的热门模型：

```
📋 Step 3: Model Selection

Popular models (trending):
  Sort: [T]rending [D]ownloads [L]ikes [R]ecent
  Filter size: [A]ll [S]mall(<3B) [M]edium(3-10B) [L]arge(>10B) (current: all)

  1. google/gemma-3-270m (270M)
  2. google/gemma-2-2b (2B)
  3. meta-llama/Llama-3.2-1B (1B)
  4. meta-llama/Llama-3.2-3B (3B)
  5. mistralai/Mistral-7B-v0.3 (7B)
  ...

Model (number, HF ID, or command):
```

### 选择正确的模型大小

<AccordionGroup>
  <Accordion title="我有 MacBook（8-16GB RAM）">
    使用 `/filter` 然后 `S` 选择小模型。

    推荐：`google/gemma-3-270m` 或 `meta-llama/Llama-3.2-1B`

    这些在 Apple Silicon 上训练需要 15-30 分钟。
  </Accordion>

  <Accordion title="我有游戏 PC（RTX 3060/3070，8-12GB VRAM）">
    使用 `/filter` 然后 `S` 或 `M`。

    推荐：`google/gemma-2-2b` 或 `meta-llama/Llama-3.2-3B`

    稍后为更大模型启用量化。
  </Accordion>

  <Accordion title="我有工作站（RTX 3090/4090，24GB+ VRAM）">
    任何高达 10B 的模型都很好。

    推荐：`meta-llama/Llama-3.2-8B` 或 `mistralai/Mistral-7B-v0.3`
  </Accordion>

  <Accordion title="我有云 GPU（A100，H100）">
    大胆使用！

    推荐：`meta-llama/Llama-3.1-70B` 带量化
  </Accordion>
</AccordionGroup>

### 基础模型 vs 指令调优模型

选择模型时，您会看到两种类型：

| 模型名称                               | 类型                    | 何时使用          |
| ---------------------------------- | --------------------- | ------------- |
| `google/gemma-2-2b`                | Base（预训练）             | 通用目的，学习您的特定风格 |
| `google/gemma-2-2b-it`             | Instruction-tuned（IT） | 已遵循指令，进一步微调   |
| `meta-llama/Llama-3.2-1B`          | Base                  | 为您的用例提供干净的基础  |
| `meta-llama/Llama-3.2-1B-Instruct` | Instruction-tuned     | 已有帮助，进行优化     |

<Note>
  **经验法则**：如果想要完全控制，使用基础模型。如果想要先发优势，使用指令调优模型（`-it`、`-Instruct`）。
</Note>

### 选择您的模型

**选项 A**：输入数字从列表中选择：

```
Model (number, HF ID, or command): 1
✓ Model: google/gemma-3-270m
```

**选项 B**：直接输入 HuggingFace ID：

```
Model (number, HF ID, or command): google/gemma-2-2b
✓ Model: google/gemma-2-2b
```

**选项 C**：搜索特定模型：

```
Model (number, HF ID, or command): /search llama
```

## 步骤 5：数据集配置

```
📋 Step 4: Dataset Configuration

Dataset options:
  • Local folder with CSV/JSON/Parquet files (e.g., ./data/my_dataset)
  • HuggingFace dataset ID (e.g., tatsu-lab/alpaca)
  • Choose from popular datasets below

Popular datasets (trending):
  1. tatsu-lab/alpaca — Instruction following dataset (52k)
  2. OpenAssistant/oasst1 — Conversation dataset
  3. HuggingFaceH4/ultrachat_200k — Multi-turn conversations
  ...
```

### 理解数据集大小

<Warning>
  **关键**：将数据集大小与模型大小匹配！

  * **小模型（\< 1B 参数）**：最多使用 1,000 - 10,000 个示例
  * **中等模型（1-7B 参数）**：10,000 - 100,000 个示例
  * **大模型（7B+ 参数）**：50,000+ 个示例

  为什么？小模型在大数据集上会过拟合。270M 模型在 52k 个 Alpaca 示例上训练会记忆，而不是泛化。
</Warning>

### 数据集选择选项

**使用预构建数据集**（最简单）：

```
Dataset (number, HF ID, or command): 1
✓ Dataset: tatsu-lab/alpaca
🔍 Validating dataset...
✓ Dataset loaded. Columns found: instruction, input, output
```

**使用您自己的数据**：

```
Dataset (number, HF ID, or command): ./my_data
```

**使用 HuggingFace 数据集**：

```
Dataset (number, HF ID, or command): username/my-dataset
```

### 数据集格式分析

向导自动分析您的数据集：

```
🔄 Dataset Format Analysis:
  Loading dataset sample from HuggingFace: tatsu-lab/alpaca
✓ Detected dataset format: alpaca
  • Your dataset is in alpaca format
  • This can be converted to the standard messages format for better compatibility

Do you want to analyze and convert your dataset to the model's chat format? (y/N):
```

**输入 `y`** 启用自动转换。这确保您的数据与模型的聊天模板正确配合。

### 训练/验证分割

```
Training split name [train]:
```

按 Enter 使用默认的 `train` 分割。

```
Validation split name (optional) [none]:
```

如果您的数据集有验证分割（`validation`、`test`），在此输入。否则，按 Enter 跳过。

### 最大样本数（测试）

```
Maximum samples (optional, for testing/debugging):
```

<Tip>
  **对于您的第一次训练**：输入 `100` 或 `500`
  进行快速测试运行。一旦工作正常，移除限制并在完整数据集上训练。
</Tip>

## 步骤 6：高级配置（可选）

```
📋 Step 5: Advanced Configuration (Optional)

Would you like to configure advanced parameters?
  • Training hyperparameters (learning rate, batch size, etc.)
  • PEFT/LoRA settings
  • Model quantization
  • And more...

Configure advanced parameters? [y/N]:
```

对于您的第一次训练，**按 Enter** 跳过此步骤并使用智能默认值。

### 何时配置高级选项

| 情况     | 更改什么                      |
| ------ | ------------------------- |
| 训练太慢   | 启用 LoRA（`peft=True`）以减少内存 |
| 内存不足   | 减少 `batch_size` 或启用量化     |
| 模型不学习  | 调整 `lr`（学习率）              |
| 想要跟踪训练 | 启用 W\&B 日志记录              |

## 步骤 7：审查并开始

```
📋 Configuration Summary

Basic Configuration:
  • trainer: sft
  • project_name: my-first-chatbot

Dataset:
  • data_path: tatsu-lab/alpaca
  • train_split: train
  • auto_convert_dataset: ✓

Model & Training:
  • model: google/gemma-3-270m

Logging:
  • log: wandb ✓
  • wandb_visualizer: ✓ (LEET panel will open automatically)

✓ Configuration is valid!

🚀 Start training with this configuration? [Y/n]:
```

**按 Enter** 开始训练！

## 接下来会发生什么

1. 模型下载（仅首次）
2. 数据集加载和转换
3. 训练开始并显示进度更新
4. W\&B LEET 面板显示实时指标（如果启用）
5. 训练好的模型保存到项目文件夹

```
Loading model google/gemma-3-270m...
Processing data...
Training started...
Epoch 1/1: loss=2.45, accuracy=0.52
Step 100/500: loss=1.89
Step 200/500: loss=1.42
...
Model saved to ./my-first-chatbot
```

## 测试您的模型

训练完成后：

```bash theme={null}
aitraining chat
```

打开 `http://localhost:7860/inference` 并从 `./my-first-chatbot` 加载您的模型进行测试！

## 常见问题

<AccordionGroup>
  <Accordion title="内存不足错误">
    * 使用较小的模型（按大小过滤）
    * 在高级选项中启用 LoRA
    * 减少批次大小
    * 启用量化（`int4`）
  </Accordion>

  {" "}

  <Accordion title="模型不学习（loss 保持高位）">
    * 检查数据集格式 - 尝试更高的学习率 - 确保数据具有正确的列
  </Accordion>

  <Accordion title="训练非常慢">
    * 在高级选项中启用混合精度（`bf16`）
    * 首先使用较小的数据集
    * 启用 LoRA
  </Accordion>
</AccordionGroup>

## 下一步

<CardGroup cols={2}>
  <Card title="理解模型" href="/wizard/choosing-models" icon="robot">
    深入了解模型选择
  </Card>

  <Card title="数据集指南" href="/wizard/dataset-guide" icon="database">
    准备您自己的训练数据
  </Card>

  <Card title="DPO 训练" href="/advanced/dpo-training" icon="scale-balanced">
    使用偏好数据训练
  </Card>

  <Card title="LoRA 效率" href="/advanced/lora-peft" icon="bolt">
    在有限硬件上训练大模型
  </Card>
</CardGroup>
