pestlee/Qwable-9B-Claude-Fable-5-StraTA
111
Qwable-9B-Claude-Fable-5 · StraTA RL (个人复现)
声明 / Attribution:本仓库是对 StraTA (Strategic Trajectory Abstraction for Agentic RL, [arXiv:2605.06642](https://arxiv.org/abs/2605.06642)) 的个人爱好者独立复现,非官方实现,与论文原作者无关。代码、超参与结果均为个人实验产物,正确性不作保证。如需权威实现请参阅原论文。 基座模型:`empero-ai/Qwable-9B-Claude-Fable-5`(Qwen3.5-9B,混合 Gated DeltaNet 线性注意力 + <think> 推理)。## ⚠️ 先读:这个模型能干什么、不能干什么 它是 9B 的 agentic 编码智能体(StraTA RL 产物),不是通用聊天 / 通用编码 LLM。 - ✅ 能干:给一道有可执行验证标准(test_command)的简单–中等编码题,它在沙盒里自主write/read/bash/test,迭代到通过。 - ❌ 不能干:① 开放式工程(如"做个闹钟 APP"——无规格/无验收命令,无法驱动);② Hard 算法题(超出训练难度);③ 当通用 chat / Codex CLI 后端(只认STRATEGY/ACTION_PROMPT固定格式,自由对话 = OOD = 半截 / 空回复)。 - 实测:fib(简单)1 步一遍过;LFU 缓存(Hard)6 步失败(算法结构正确,但实现有语义 bug、且自我调试偏弱)。 - 正确用法见下方「方式 C(Agent loop)」;别裸generate("写个 HTML")。
在单卡 A800-80GB 上,对 9B 基座做 SFT 格式对齐 → 分层 agentic GRPO 强化学习,训练一个多步交互的编码智能体(在 CodeGym 沙盒里 write/read/bash/test)。
仓库内容(Files)
使用(Usage)
方式 A:直接用合并模型(推荐,开箱即用)
from transformers import AutoTokenizer, AutoModelForCausalLM
MODEL = "pestlee/Qwable-9B-Claude-Fable-5-StraTA"
tok = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(MODEL, dtype="bfloat16", device_map="cuda", trust_remote_code=True)方式 B:base + LoRA 适配器(省下载、可切换 sft/rl-best)
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("empero-ai/Qwable-9B-Claude-Fable-5", dtype="bfloat16", device_map="cuda", trust_remote_code=True)
model = PeftModel.from_pretrained(base, "pestlee/Qwable-9B-Claude-Fable-5-StraTA", subfolder="adapters/rl-best")方式 C(推荐,最省心):现成的 agent loop 服务(/agent/run)
不想自己写多步循环?用部署仓库 `wuyueyi/qwable-strata-deploy`(CNB 免费 L40)—— 网页 UI + API /agent/run:传 {description, test_command, max_steps},它自己跑 策略→动作→沙盒执行→验证,流式返回每一步 + 最终 solved + 生成的文件。prompt 与生成参数与本模型训练分布完全一致。
curl -N -X POST http://<host>:8000/agent/run \
-H "X-Api-Key: sk-strata-agent" -H "Content-Type: application/json" \
-d '{"description":"实现 fib(n),返回第 n 个斐波那契数",
"test_command":"python3 -c \"from solution import fib; assert fib(10)==55; print(42)\"",
"max_steps":6}'⚠️ 方式 A/B 的 `generate()` 直接喂自由文本(如"写个 HTML")= OOD,会半截 / 空回复。本模型必须走 agent loop(先<strategy>再循环<action>配合沙盒)。补充两点根因:训练时的generate()也用apply_chat_template(非裸文本输入);且max_response_tokens=512塑形了输出长度——模型约 512 token 主动EOS收尾,调大max_tokens不会让它写更长。最低门槛见方式 C,或仓库内src/interactive_demo.py/src/test_merged.py。
训练流程(Training)
- 数据:合成编码任务(15 模板×变体) + HumanEval + MBPP →
data/train/(364 任务);eval 100 + eval_small 12。 - SFT(格式对齐):
STRATEGY_PROMPT→<strategy>、ACTION_PROMPT→<action>两种样本,assistant-only loss,bf16 LoRA(r=64, α=128)。→adapters/sft/ - RL(StraTA GRPO):每步 σN 策略候选 → FPS 选 N → 每策略 M rollout → 跨 rollout group-relative 优势 + clipped-surrogate + KL 近似(无参考模型)+ 自我评判惩罚 κ。warm-start 自 SFT。→
adapters/rl-best/
A800 配置(configs/full_a800.json):N=4, M=4, σ=4, batchsize=2, maxsteps=100, lr=2e-6, kl_beta=0.02。fla + causal-conv1d 快路径启用。
评估结果(Eval, eval_small n=12, max-steps=6)
注:评估在小型合成集上;"可用性"以能否解出中等难度编码任务计,非通用 benchmark。
复现(Reproduction)
# 1) 环境(torch cu124 + 依赖 + fla + causal-conv1d 快路径)
bash setup/a800_env.sh
bash setup/cc1d_build.sh # 编译与 torch2.6 兼容的 causal-conv1d(需 nvcc)
# 2) 下基座模型到 model/
huggingface-cli download empero-ai/Qwable-9B-Claude-Fable-5 --local-dir model
# 3) 数据
python3 -u src/prepare_data.py
# 4) SFT → checkpoints/sft
python3 -u src/sft_train.py
# 5) RL
python3 -u src/strata_trainer.py --config configs/full_a800.json \
--train-data data/train/all_tasks.json --eval-data data/eval/eval_small.json
# 6) 合并 base+LoRA → 完整模型
python3 setup/merge_model.py checkpoints/best merged_out详见 setup/ 脚本与 GitHub(源码/脚本):tvvshow/Qwable-9B-Claude-Fable-5-test。
关键工程修复(从"跑不通"到"端到端跑通")
- chat-template 训练/推理一致化(修 0% 解出)。
_collect_log_probs返回值 bug。- 空目标/非有限 loss 守卫(防 NaN 腐蚀 LoRA)。
- 验证协议对齐:沙盒
from solution import ...→ 提示注入"写入 solution.py",解题 12.5%→62.5%。 - GRPO 信用分配修正:优势跨 M rollout 计算(非单 rollout 内时间步),修 Items=0 无信号。
- 串行→批量化:左 pad 批量生成 / 锁步 rollout / 批量 log-prob(B=16) / 批量 loss(B=2),8-12× 提速。
- 生成 prompt == log-prob prompt 对齐(存精确 prompt)。
- 路径相对化 +
evaluate()NameError 修复。
局限与安全(Limitations)
- 个人复现,超参简化,非论文级复现;评估集小。
CodeGym沙盒以 subprocess root 执行模型生成命令,无 Docker 隔离——仅限一次性实验机。- 合并模型 ~18GB,需 ≥24GB 显存推理(bf16)。
- 能力边界:甜区 = 简单–中等、带可执行验证的编码题(eval_small ~66.7%)。Hard 题不稳、自我调试偏弱(看到明确报错可能重复
test而不改代码);不能做开放式软件工程、不能当通用 chat / Codex 后端——9B + 仅在 strategy/action 轨迹上 RL 的训练目标决定了这点。
致谢
- 方法:StraTA(arXiv:2605.06642)。
- 基座:
empero-ai/Qwable-9B-Claude-Fable-5。 - 数据:HumanEval、MBPP + 合成编码任务。
