Reef Tinker 后端教程:如何在 CPU 机器上零 GPU 完成托管 LoRA 训练(完整指南)
【免费下载链接】reefContinual learning infra for self-improving agents项目地址: https://gitcode.com/gh_mirrors/reef7/reef
Reef 是面向自我改进智能体(self-improving agents)的持续学习基础设施,而它的Tinker 后端正是本教程的主角:让你在一台没有任何 GPU 的普通 CPU 机器上,通过 Tinker 的托管 API 完成完整的LoRA 训练闭环——推理采样、反馈收集、候选训练、版本发布与回滚,全部由 Reef 掌控,GPU 算力则在云端。
本文将带你用不到 20 分钟完成:安装 Reef Tinker 后端 → 写一份最小 YAML 配置 → 跑通"4 次推理 + 1 次优化器步"的冒烟测试 → 理解检查点与恢复机制。无需深度学习框架经验,只要你会用 Python 和 YAML。
为什么需要"CPU 上跑 LoRA 训练"?
传统强化学习/持续学习框架(比如基于 Slime + Ray 的 GPU 训练栈)要求你自备 GPU 节点:启动推理引擎、显存规划、权重同步……对只想验证一个学习算法、或在开发机上做编排的人来说门槛太高。
Reef Tinker 后端(reef/train/tinker_backend/)换了一种思路:
| 职责 | 由谁承担 |
|---|---|
| 请求、反馈、候选选择、版本链 | Reef(你的 CPU 机器) |
| LoRA 训练(Adam 更新)、采样 | Tinker 托管 API(云端) |
| 权重快照 | 只保留一个tinker-checkpoint.json清单 |
关键点:Reef 侧不启动 Ray、不启动本地推理引擎,模型权重也不下载到本地——SDK 只拉取 tokenizer 资源用于渲染提示词。你的 CPU 机器上甚至不需要装 GPU 驱动。
一键安装:Reef Tinker 后端的准备工作
环境要求:Linux 或 macOS,Python 3.12+,一个有权限使用目标模型的 Tinker 账号(训练消耗 Tinker 额度)。
# 克隆仓库 git clone https://gitcode.com/gh_mirrors/reef7/reef cd reef # 创建虚拟环境并安装(tinker 是可选依赖组,见 pyproject.toml) uv venv --python 3.12 source .venv/bin/activate uv pip install -e '.[tinker]' -e ./third_party/reef-client注意两点:
- 安装的是 third_party/reef-client/ 客户端包,冒烟脚本依赖它;
- 依赖组
tinker在 pyproject.toml 中锁定tinkerSDK 与tinker-cookbook版本,保证行为可复现。
核心配置:5 行 YAML 启用零 GPU LoRA 训练
Reef 用一份 YAML 描述整个服务。官方的最小配置在 tutorials/tinker/serve.yaml,核心内容如下:
schema-version: 2 inference: model-path: Qwen/Qwen3-8B # 远程模型标识符,不会下载到本地 recipe: implementation: recipes.tttd.recipe:TTTDRecipe training: backend: tinker # ← 关键:切换到 Tinker 训练后端 options: state-dir: ./work/tinker/tinker lora-rank: 32 learning-rate: 0.00004 kl-coef: 0.1只需三处决定:
training.backend: tinker——声明训练后端;inference.model-path——选择你 Tinker 账号下可用的基座模型;training.options.state-dir——一个持久化目录,记录 Reef 最后一次提交的检查点,重启后从这里续训。
凭据通过环境变量TINKER_API_KEY注入(可用api-key-env换其他变量名),不要写进 YAML;解析后的配置和检查点清单里都不含密钥。
启动服务(首次启动会创建初始 Tinker 检查点并下载 tokenizer,耗时较长,故官方把ready-timeout设为 600 秒):
export TINKER_API_KEY=sk-... export REEF_TOKEN=reef-local export REEF_TINKER_STATE_DIR="$PWD/work/tinker-smoke" python -m reef serve -c tutorials/tinker/serve.yaml运行首次冒烟测试:4 次推理 + 1 步 LoRA 训练
服务就绪后(/healthz返回 200),在另一个终端运行官方冒烟脚本 tutorials/tinker/smoke.py:
python tutorials/tinker/smoke.py它做的事非常"轻",但覆盖了完整链路:
- 对同一个 scenario 发起4 次短对话(每次最多 32 个新 token),Reef 完整捕获每次采样的 token 与 log-prob;
- 依次上报合成奖励 0、1、2、3(不是真实评价,只为产生非零训练信号);
- 等待 Reef 用 Tinker 提交一个优化器步,发布新版本。
看到Committed one Tinker update for ...就说明你的 CPU 机器已经完成了第一轮"推理 → 反馈 → LoRA 训练 → 版本发布"闭环。
进阶视野:持续学习在 Reef 上长什么样
冒烟测试只是机制验证。当真正的学习算法(如 TTTD、OpenClaw-RL 等 recipe)跑在 Reef 上时,你会看到接受会话数、能力率等指标随训练轮次持续上升——这正是"自我改进智能体"的含义:模型版本不断被训练、评估、发布或回滚,且整个过程对 CPU 端透明。
工作原理:检查点、候选与恢复(3 个要点)
- 每个候选独立开会话:新候选从在位者(incumbent)的权重和 Adam 优化器状态分叉出一个独立的 Tinker 训练会话;被拒绝的候选不需要"撤销"任何在位模型改动。
- 清单而非权重:Reef 发布的是小型本地工件
tinker-checkpoint.json,指向远端的训练状态与 sampler 检查点。因此回滚/恢复仍需原 Tinker 账号对远端检查点有访问权,本地磁盘清理不会删除远端文件。 - 保守但正确的恢复:一次不确定的 API 结果可能留下无引用的远端检查点并消耗额度,重试会从同一在位检查点新开干净会话,绝不会把"可能已生效的梯度"应用两次——牺牲一点吞吐,换取正确性。
此外,Tinker 后端要求样本零过期(max_staleness必须为 0,见 reef/train/tinker_backend/config.py):只有精确版本的样本被接纳,避免陈旧策略污染 LoRA 更新。
组合玩法:本地 SGLang 推理 + 远程 Tinker 训练
如果你有一台带 GPU 的机器想跑推理,但训练仍想托管,Reef 支持inference.backend: sglang+training.backend: tinker的混合拓扑:
- 训练器不占任何 GPU;每个训练作业在 Tinker 上跑一个优化器步;
- 结果下载后经
tinker-cookbook转换成 PEFT 适配器目录,由 Reef 通知引擎按场景加载; - 被拒候选不加载任何东西,重启后各场景从磁盘重载已提交适配器。
这套组合的完整 CPU 测试见 tests/reef_service/test_tinker_local_engine_ray.py——它在纯 CPU上用假 GPU、桩引擎和假 SDK 跑通了整个拓扑,也侧面说明这套流程对硬件要求有多低。
常见问题(FAQ)
Q:我的 CPU 机器需要多强?A:Reef 侧只做编排、捕获 token/log-prob、管理版本链,普通笔记本级别即可;重活在 Tinker 云端。
Q:支持哪些推理参数?A:/v1/chat/completions文本消息(含最后的 assistant prefill)、max_tokens、temperature、top_p、top_k、seed、stop,以及chat_template_kwargs.enable_thinking。工具调用、多模态消息会显式报错。
Q:流式输出是逐 token 的吗?A:不是,Tinker 路径是缓冲式流式——完整响应作为合法的 OpenAI SSE 事件一次性发出,同时私有的训练捕获单独保留。
Q:能换 loss 吗?A:TTTD recipe 自带 Tinker 版损失 recipes/tttd/tinker.py(重要性采样策略项 + 掩码居中冻结基座 KL,与 Slime 版目标对齐,kl-coef可调)。SAO 和 OpenClaw-RL 的损失目前未实现,选择未注册的 loss 族会在训练前直接失败。
相关文件与延伸阅读
- Tinker 后端完整文档:docs/user-guide/tinker.rst
- 冒烟测试配置与脚本:tutorials/tinker/
- 后端实现(训练/推理两侧):reef/train/tinker_backend/ 与 reef/inference/tinker.py
- TTTD recipe 及 Tinker 损失:recipes/tttd/
- 官方客户端:third_party/reef-client/
一句话总结:Reef Tinker 后端把"训练 GPU"这件事从你的机器上彻底移除——在任意 CPU 机器上配置 5 行 YAML,就能托管 LoRA 训练并管理智能体的版本进化。现在就可以从冒烟测试开始动手 🚀
【免费下载链接】reefContinual learning infra for self-improving agents项目地址: https://gitcode.com/gh_mirrors/reef7/reef
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考