☰
Reef Tinker 后端教程:如何在 CPU 机器上零 GPU 完成托管 LoRA 训练(完整指南)
2026/9/25 17:59:54 网站建设 项目流程

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

只需三处决定:

  1. training.backend: tinker——声明训练后端;
  2. inference.model-path——选择你 Tinker 账号下可用的基座模型;
  3. 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 个要点)

  1. 每个候选独立开会话:新候选从在位者(incumbent)的权重和 Adam 优化器状态分叉出一个独立的 Tinker 训练会话;被拒绝的候选不需要"撤销"任何在位模型改动。
  2. 清单而非权重:Reef 发布的是小型本地工件tinker-checkpoint.json,指向远端的训练状态与 sampler 检查点。因此回滚/恢复仍需原 Tinker 账号对远端检查点有访问权,本地磁盘清理不会删除远端文件。
  3. 保守但正确的恢复:一次不确定的 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询