·SFT:通过 train.Config 一行配置即可运行完整的监督微调循环
·RL:通过 Env + EnvGroupBuilder + RLDataset 组合出完整的 RL 训练流程
·DPO:通过 Comparison / LabeledComparison 进行偏好学习
一、Cookbook 安装
uv pip install tinker==0.12.0
注意:目前 TCRL 开白体验中,可联系 tcrl@tencent.com 申请开白后,登录 腾讯云弹性 MapReduce(EMR)控制台 获取 API Key,进行模型训练、实验管理和用量监控。
export TINKER_API_KEY="your-api-key-here"export TINKER_BASE_URL="http://api.tencenttcrl.com/"
可选扩展:[math-rl]、[modal]、[wandb]、[cloud]、[inspect]、[all]。
uv pip install tinker-cookbook==0.4.1
如需在本地开发,或按自己的需求定制方案:
wget https://github.com/thinking-machines-lab/tinker-cookbook/archive/refs/tags/v0.4.1.tar.gztar zxvf v0.4.1.tar.gzcd tinker-cookbook-0.4.1uv pip install -e .
Cookbook 在 Tinker SDK 之上提供了更高层的抽象。SDK 提供的是底层操作(forward_backward、optim_step、sample),而 Cookbook 提供的是可配置的训练流水线,会自动处理流水线并行、检查点保存、评测和日志记录。
二、使用 Cookbook 做 SFT
使用 SDK 时,SFT 循环需要在循环中手动依次调用 forward_backward → optim_step → save_state。Cookbook 把这些封装进一个 train.Config:
DatasetBuilder定义数据 → train.Config模型、学习率、rank → train.main()流水线化循环 → 检查点 + 指标
1. 定义数据:实现一个返回按批组织 Datum 对象的 SupervisedDatasetBuilder
2. 配置训练:设置模型、学习率、LoRA rank、检查点保存计划
3. 运行:train.main(config) 负责整个循环
from tinker_cookbook.supervised import trainfrom tinker_cookbook.supervised.types import ChatDatasetBuilderconfig = 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, save_every=20, eval_every=10,)asyncio.run(train.main(config))
在底层,train.main 会创建 TrainingClient,将 forward_backward + optim_step 流水线化以提升吞吐,运行评测器并保存检查点。完整的组件图参见 SL 架构概览。
三、使用 Cookbook 做 RL
RL 比 SFT 更复杂,因为它涉及一个 rollout 循环:从模型中采样,用奖励函数打分,然后在打分后的轨迹上训练。Cookbook 把这些抽象成可组合的类型:
RLDatasetget_batch() → EnvGroupBuildermake_envs() → Envrollout → 奖励 + 优势 → forward_backward 训练 → 重复
1. 定义环境:实现 Env(问答任务可用 ProblemEnv)来产生奖励
2. 对环境分组:EnvGroupBuilder 按批创建环境(GRPO 会在组内对奖励做中心化)
3. 定义数据集 :RLDataset 产生按批组织的 EnvGroupBuilder
4. 运行:训练循环负责 rollout、优势计算和权重更新
最简单的起点是 ProblemEnv,一个单轮问答环境:
from tinker_cookbook.rl.problem_env import ProblemEnvclass MathEnv(ProblemEnv): def get_question(self) -> str: return "What is 2 + 3?" def check_answer(self, response: str) -> float: return 1.0 if "5" in response else 0.0
完整的组件图参见 RL 架构概览。
四、偏好学习(DPO / RLHF)
偏好学习用成对比较而非标量奖励来训练模型:
1. 构造比较样本:Comparison 对象包含同一提示词下的两个补全(A 和 B)
2. 标注偏好:LabeledComparison 增加人类偏好标注(A、B 或平局)
3. 用 DPO 训练 :直接基于偏好数据优化策略
from tinker_cookbook.preference.types import Comparison, LabeledComparisoncomparison = Comparison(messages=messages, completion_a=resp_a, completion_b=resp_b)labeled = LabeledComparison(**comparison.__dict__, label=1) # B preferred
完整讲解参见 DPO 指南 和 RLHF 示例。
五、后续步骤
·SL 架构:监督学习的完整组件图
·RL 架构:强化学习的完整组件图
·教程:交互式 Notebook