帮你快速理解、总结文档立即下载
文档中心>弹性 MapReduce>TCRL 模型微调服务>COOKBOOK>Supervised Learning(监督学习)

Supervised Learning(监督学习)

最近更新时间:2026-10-19 21:18:02
本文档已由 AI 辅助审校
我的收藏
Cookbook 提供了一个流水线式的 Supervised Learning(SFT,监督学习)训练循环,数据集、评测和检查点保存都可配置。

架构

train.Config
├── model_name which model to fine-tune
├── dataset_builder SupervisedDatasetBuilder → SupervisedDataset
├── learning_rate optimizer config (+ lr_schedule, adam_*)
├── evaluator_builders what to measure during training
├── save_every / eval_every checkpoint and eval cadence
└── lora_rank LoRA adapter size

SupervisedDatasetBuilder
└── __call__() → (train_dataset, eval_dataset)
│
▼
SupervisedDataset
├── get_batch(index) → list[tinker.Datum]
├── __len__() → number of batches
└── set_epoch(seed) → shuffle for next epoch

核心组件

tinker_cookbook.supervised.train.Config

核心配置。定义模型、数据、超参数和评测。
from tinker_cookbook.supervised import train

config = train.Config(
log_path="~/logs/my-sft-run",
model_name="Qwen/Qwen3-8B",
dataset_builder=my_dataset_builder,
learning_rate=1e-4,
lora_rank=32,
num_epochs=1,
save_every=20,
eval_every=10,
)
asyncio.run(train.main(config))

SupervisedDataset / SupervisedDatasetBuilder

SupervisedDatasetBuilder 是一个用于构造 SupervisedDataset 的配置。数据集返回成批的 tinker.Datum 对象。
from tinker_cookbook.supervised.types import SupervisedDatasetBuilder, SupervisedDataset

class MyDatasetBuilder(SupervisedDatasetBuilder):
def __call__(self) -> tuple[SupervisedDataset, SupervisedDataset | None]:
return train_data, eval_data # eval_data is optional
内置构建器:
构建器
用途
SupervisedDatasetFromHFDataset
用 map_fn 或 flatmap_fn 包装一个 HuggingFace 数据集
StreamingSupervisedDatasetFromHFDataset
从 HuggingFace 流式加载(内存占用更低)
FromConversationFileBuilder
从聊天对话的 JSONL 文件加载
ChatDatasetBuilder
聊天数据的基类——额外提供 tokenizer + renderer

ChatDatasetBuilder

用于聊天格式的数据。通过 ChatDatasetBuilderCommonConfig 提供 tokenizer 和 renderer 属性:
from tinker_cookbook.supervised.types import ChatDatasetBuilder, ChatDatasetBuilderCommonConfig

class MyChats(ChatDatasetBuilder):
common_config = ChatDatasetBuilderCommonConfig(
model_name_for_tokenizer="Qwen/Qwen3-8B",
renderer_name="qwen3",
batch_size=8,
max_length=4096,
)

训练循环

train.main(config) 负责整个流水线:
1. 创建 ServiceClient → TrainingClient
2. 从 config.dataset_builder 构建数据集
3. 对每个 epoch 和每个批次:
用该批次执行 forward_backward
执行 optim_step
每隔 eval_every 运行一次评测器
每隔 save_every 保存一次检查点
4. 保存最终检查点
这个循环会对请求做流水线处理以提升吞吐,详情请参见 时钟周期与流水线。

下一步

sl_loop.py:不带抽象层的最小训练循环
SL 超参数: 如何选择学习率、rank 和批大小
教程:你的第一个 SFT:交互式演练