tinker について
Tinkerは、Thinking Machines Labが提供するLLMトレーニングAPIで、ファインチューニングや独自の学習フローを構築する開発者や研究者向けです。高レベルのCookbookパターンと低レベルAPIを備え、教師あり学習、強化学習、LoRAに対応します。
主な機能
- 01教師ありファインチューニングと強化学習
- 02パラメータ効率のよいLoRA学習
- 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 - LLM ファインチューニング
概要
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 トレーニング:効率的なパラメーター効率の高いファインチューニング
2 つの抽象化レベルがあります。
- 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 対応