关于 tinker
Tinker 是 Thinking Machines Lab 提供的大模型训练 API,面向需要微调或自定义训练流程的开发者与研究者。它提供高层 Cookbook 模式和底层 API,涵盖监督微调、强化学习及 LoRA 训练。
主要功能
- 01监督微调与强化学习训练
- 02LoRA 参数高效微调
- 03高层 Cookbook 自动训练流程
- 04底层 API 自定义训练逻辑
- 05支持多模态模型训练
适用场景
- 01用指令与补全数据进行监督微调
- 02构建强化学习训练流程
- 03自定义模型训练循环
- 04训练视觉或音频相关模型
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ sundial-org/ skills --skill tinker安装后在 Claude Code 中输入/tinker确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-reference.mdgetting-started.mdinkling.mdloss-functions.mdmodels-and-lora.mdrecipes.mdreinforcement-learning.mdrendering.mdsupervised-learning.md详细介绍
Tinker API - 大模型微调
概述
Tinker 是 Thinking Machines Lab 提供的大语言模型训练 API。它提供:
- 有监督微调(SFT):使用指令/补全内容对训练模型
- 强化学习(RL):支持 PPO 和策略梯度损失;Cookbook 模式包括类似 GRPO 的分组采样/优势居中
- 多模态模型:通过 Qwen3.5/3.6 和 Kimi K2.x 支持视觉;通过 Inkling 支持视觉 + 音频
- Inkling:Thinking Machines 自研的开放权重 MoE 模型(975B/41B 激活参数,于 2026 年 7 月发布),支持文本/图像/音频输入,并可调节思考强度
- LoRA 训练:高效的参数高效微调
两个抽象层级:
- Tinker Cookbook:提供自动训练循环的高级模式
- 低级 API:手动控制自定义训练逻辑
快速参考
| 主题 | 参考 |
|---|---|
| 设置与核心概念 | 入门指南 |
| API 类与类型 | API 参考 |
| 有监督学习 | 有监督学习 |
| RL 训练 | 强化学习 |
| 损失函数 | 损失函数 |
| 聊天模板 | 渲染 |
| 模型与 LoRA | 模型与 LoRA |
| Inkling(多模态、思考强度) | Inkling |
| 示例脚本 | 配方 |
安装
pip install tinker tinker-cookbook
export TINKER_API_KEY=your_api_key_here
最简示例
import numpy as np
import tinker
from tinker import types
# Create clients
service_client = tinker.ServiceClient()
training_client = service_client.create_lora_training_client(
base_model="Qwen/Qwen3.6-35B-A3B", rank=32
)
tokenizer = training_client.get_tokenizer()
# Prepare data
prompt = "English: hello\nPig Latin:"
completion = " ello-hay\n"
prompt_tokens = tokenizer.encode(prompt, add_special_tokens=True)
completion_tokens = tokenizer.encode(completion, add_special_tokens=False)
tokens = prompt_tokens + completion_tokens
weights = np.array(([0] * len(prompt_tokens)) + ([1] * len(completion_tokens)), dtype=np.float32)
target_tokens = np.array(tokens[1:], dtype=np.int64)
datum = types.Datum(
model_input=types.ModelInput.from_ints(tokens=tokens[:-1]),
loss_fn_inputs={
"target_tokens": target_tokens,
"weights": weights[1:]
}
)
# Train
fwdbwd = training_client.forward_backward([datum], "cross_entropy")
optim = training_client.optim_step(types.AdamParams(learning_rate=1e-4))
fwdbwd.result(); optim.result()
# Sample
sampling_client = training_client.save_weights_and_get_sampling_client(name="v1")
result = sampling_client.sample(
prompt=types.ModelInput.from_ints(tokens=tokenizer.encode("English: world\nPig Latin:", add_special_tokens=True)),
sampling_params=types.SamplingParams(max_tokens=20),
num_samples=1
).result()
print(tokenizer.decode(result.sequences[0].tokens))
常见导入
# Low-level API
import tinker
from tinker import types
from tinker.types import Datum, ModelInput, TensorData, AdamParams, SamplingParams
# Cookbook (high-level)
import chz
import asyncio
from tinker_cookbook.supervised import train
from tinker_cookbook.supervised.types import ChatDatasetBuilder, ChatDatasetBuilderCommonConfig
from tinker_cookbook.supervised.data import (
SupervisedDatasetFromHFDataset,
StreamingSupervisedDatasetFromHFDataset,
FromConversationFileBuilder,
conversation_to_datum,
)
from tinker_cookbook.renderers import get_renderer, TrainOnWhat
from tinker_cookbook.model_info import get_recommended_renderer_name
from tinker_cookbook.tokenizer_utils import get_tokenizer
如何选择
| 场景 | 方案 |
|---|---|
| 使用 HF/JSONL 数据进行标准 SFT | Cookbook ChatDatasetBuilder + tinker_cookbook.supervised.train.main() |
| 自定义预处理 | 自定义 SupervisedDataset 类 |
| 大型数据集(>1M) | StreamingSupervisedDatasetFromHFDataset |
| RL / GRPO | Cookbook RL 模式 |
| 研究 / 自定义循环 | 低级 forward_backward() + optim_step() |
| 视觉语言 | Inkling 或 Qwen3.5/3.6 视觉模型 |
| 音频 / 思考强度控制 | Inkling + tml-renderers(Inkling) |
外部资源
评论
支持 Markdown