# QwenJev 交接手册(HANDOVER) > 更新:2026-09-24 | 版本 v0.4.16(L3 复合体/0门状态机大发现)| 读者:下一个会话的 Agent 或接手的开发者。 > 目标:任何人凭本文档 + 公开 HF 仓,在 15 分钟内恢复全部工作现场。 ## 0. 一句话现状 **v5 = 亲自在线教学(用户指令:主 Agent 逐帧单步当教师,弃用"垃圾模型教师"蒸馏路线)**。 架构已闭环落地:`ops/teach_server.py`(T4 常驻,文件 IPC,内存驻留 env)→ 教师(主 Agent) 通过信封逐帧看画面、逐步发动作 → 轨迹直写 collect_selfplay 兼容 schema(标签=教师动作, 天然 BC)→ `ops/v5_daemon.py` 每 10min 快照轨迹→重建数据集→续训 40 步→上传 HF(HEAD 验证)。 **【现行权威 2026-09-25(续)YZ9UOC7Y 会话(Kaggle T4X2)—— L3 机制地图 v3(相位状态机)】**: ① 布局随机化再确认:4 复合体在上(12w 带+3w 柱×9 行,刚性 L 形),5 复合体在下(3w 柱×9+12w 带, 倒 L 形);中部 a 带(rows 27-29)含 0 晶格行;4 个 b 窗组 = 上下各一 T 形(12w 条+6w 柄); 右侧 rows 24-32 为小件停放区:4 小块(6w×3 实心)/ a 带拼片(12w×3,505 行)/ 5 小块(6w×3,505 行); ② 塔相位动作语义:A3=双塔左移 3(首按仅动 4 塔 = 其墙轴段 bbb 溶解解锁),A4=右移 3(=A3 逆), A1=4 塔下 3+5 塔上 3(行军,身后留 b 模+旧位回 9),A2=逆行军;晶格点(行/列 ≡1 mod3)永久烧 b; 塔带经过窗格时窗显示材料色,离开立即重开 b(无锁定); ③ 关键达成:4 塔带 9 次左移精确入顶 12w 窗(12-14@9-20,step92)→ 3 次 A1 降落完美填充(晶格 b 全吻合); 5 塔带左移+上移入底 12w 窗(42-44@9-20)+ A5 清 0 后完美填充(step94); ④ **5 塔完美入窗后状态机切"小件相位"**:A1/A2/A3/A4 = 三小件整体 上/下/左/右 移 3(行槽 [24-26,27-29,30-32] 循环换位,A1 顶槽回卷底槽),塔全部冻结;A3 左移在拼片列相位 ≡48/51 时失效 (停放区疑似有 [48,59] 列墙); ⑤ 小件相位 A1 变体(step103 实测):4 塔上移 6 + a 带拼片**分裂**为 4 板+5 板(各 12w×3)+ 4 小块上移 6 至 rows18-20;A2=精确逆(含板融合复原);分裂后 4 小块列相位变 51(≡0 mod3, 理论可对齐窗列 12-17,但 A3 随即失效待解); ⑥ A5=0 搬运泵:row28 晶格门(≡1 mod3 全开过)↔ 5 材料内部 0 洞双向搬运;填充 5 材料内 0(→9/b) 同时开 row28 新门;窗内完美填充要求晶格烧 b 无 0 残留((43,10) 的 0 曾致底窗不完美); ⑦ A6=惰性(2 组坐标实测无变化);A7=撤销上一有效动作(单发;撤销后 A4 no-op,疑似需成功动作再装填); ⑧ 未解核心:小件如何从 rows24-32 抵达窗行 9-11/45-47(A1 循环不出三行槽;分裂后组件爬升但列相位 锁 48/51 且 A3 失效);相位切换触发器(5 塔入窗切换已证;切回塔相位的条件未知); 窗槽配对假设:顶 12w←4 塔带✅ / 顶 6w←4 小块 / 底 12w←5 塔带✅ / 底 6w←5 小块 / 12w 5 板=诱饵; ⑨ 本会话教学 32 步(step74-105)全部入 trace(1183 步),gen12 训练轮 06:28 启动 (日志 tag 误印 gen11@06:28 = 实际 gen12,sed 双引号未命中,产物路径无影响)。 **【L3 机制地图 v4 · 2026-09-25 06:5x(YZ9UOC7Y 会话,step 74-134 实测)——四层相位状态机】**: ① 动作语义随"焦点层"变化,焦点自动切换,实测四种焦点:塔层(A1=4塔下3+5塔上3 / A2=反 / A3=双塔左3(首按或仅未dock塔)/ A4=右3)、小件层(A1/A2/A3/A4=四小件整体上/下/左/右移3)、 爬升变换(A1=4塔上6+小件上3+a带拼片分裂为4板+5板 / A2=精确逆)、0 泵(A5 恒为 0 搬运); ② 四窗槽配对定论:顶 12w(12-14@9-20)←4 板或 4 塔带 / 顶 6w(9-11@12-17)←4 小块 / 底 12w(42-44)← 5 塔带或 5 板 / 底 6w(45-47)←5 小块;12w 窗被 12w 板/带填,6w 窗被 6w 小块填(宽度决定); ③ 单 dock 均已达成过:顶 12w(step92 塔带、step114 塔带)、底 12w(step94/118/121 塔带, A5 清 0 后完美=晶格全 b 无 0 残留);**双 dock 同时被跷跷板阻止**:A1/A2 塔层动作者 4塔与5塔反向耦合(band_top 和恒定 48,需 54 才双 dock),和值曾在 step103 爬升(吞 4 小块 18 格)时 -3,未找到 +3 恢复动作; ④ dock 锁定现象:step95-99 底 dock 后塔层冻结 5 动作(A1-A4 全作用于小件);触发疑与 A5 完成 dock 净化相关,step121 后同构状态未复现锁定,机制未破解; ⑤ 小件列对位达成(step134):4 小块(15-17)@12-17、4 板(18-20)@9-20、5 板(30-32)@9-20、 5 小块(33-35)@12-17 —— 全部列对齐,纯垂直余量:4 小块上6+4 板上6=顶窗双 dock(2 次 A1)、 5 小块下12=底 6w(4 次 A2);**障碍**:4 塔(带 9-11+柱 12-20@9-11)占据顶窗位需先上移 9 (塔层 A2×3),且 A1/A2 小件动作者四件同向(4 件上时 5 件也上)——需 dock 锁定配合或发现 分向动作;底 12w 窗待 5 塔带从 39-41 降 3(A2 塔层); ⑥ A5 泵细节:0 在 a 晶格行(row25/28 随相位)↔ 5 材料晶格点(柱/带/板/小块 ≡1 mod3 处)间搬运, 一次泵=材料 0 填充+a 行门开启(或反向);5 塔带入底窗前其 0 行必须洁净(step118 下降中 0 自动 排入柱、step120 A5 主动泵净均有效); ⑦ A7=单发撤销上一有效动作(step101 复证);A6=惰性(4 组坐标复证无效);材料守恒破缺:4 小块 曾被"吸收"(step113)并于 step114 重新出现——存在隐形容器/生成机制; ⑧ 本会话累计教学 61 步(74-134),gen12(1183 步快照)+gen13(1195 步快照)两轮训练完成/进行中, 产物 HEAD 验证 t4_assets_v5/checkpoints/;gen13 日志 tag 正确(gen13@06:44); ⑨ 下一步建议:塔层 A2×3 上移 4 塔让出顶窗 → 小件层 A1×2 顶窗双 dock → 观察 4 件是否锁定 → A2×4-6 底 6w 对位 → 5 塔带 A2 降 3 回底 12w → 全窗同时覆盖判 WIN。 **【L3 机制地图 v5 · 2026-09-25 06:55(YZ9UOC7Y 会话终版,step 74-139 实测)】**: ① **小件相位 A1/A2 = 分色定向移动**(step135-139 关键发现):A2=4 色小件上移 3 + 5 色小件下移 3 (相向而行/远离),A1=4 色下移 3 + 5 色上移 3;A3/A4=全体左/右移 3。四小件=4 小块(6w)、 4 板(12w)、5 板(12w)、5 小块(6w),列对位已全部达成(4 小块/5 小块@12-17,双板@9-20); ② **底部 T 曾完整合围**(step138 Config X):5 板 dock 底 12w(42-44@9-20,晶格全 b 无 0) + 5 小块 dock 底 6w(45-47@12-17),同按 4 次 A2 一次性达成;但 A1(4 件下/5 件上)立即解除 (step139),**dock 无持久锁定,全窗同时覆盖的跷跷板矛盾未解**; ③ 配态分析:Config X(A2 侧)=底部 T 完整 + 顶部差 6(4 板@6-8 需 12-14、4 小块@3-5 需 9-11); Config Y(A1 侧)=顶部近 3(4 板并带@9-11、4 小块@6-8)+ 底部破 3;两态振荡无净推进, 需要:a) 4 塔先让位(塔层 A2×3 上移 9:带 0-2/柱 3-11)+ b) 底 T dock 锁定触发器,二者未知; ④ 塔带可作窗填充者:4 塔带@9-11 时已覆盖顶 6w 窗(过覆盖 9-11/18-20 列无害);5 塔带与 5 板 合并(同色重叠不可分)后 row40 0 行重现需 A5 泵净; ⑤ 本会话终局统计:教学 66 步(74-139),gen12/13/14 三轮训练(trace 快照 1183/1195/1217 步), 数据集 choice 1204 / boolean 1216 / score 1217,全部产物 HEAD 验证 HF t4_assets_v5/checkpoints/; gen14 于 06:54 启动(日志 tag gen14 ✓); ⑥ 交棒清单:a) 等 gen14 ROUND DONE+HEAD ok;b) 下会话先 t4r/信封拉 obs 恢复局面(当前 step139: 4 塔带+4 板并@9-11、4 小块@6-8、柱@12-20/9-11、5 塔带+5 板并@39-41(0 行未净)、5 小块@42-44、 顶 12w 窗柱盖 9-11 列、底全空);c) 优先实验:A5 泵净 0 行 → 塔层相位触发器(试 5 塔带对齐 42-44 时按 A5 是否触发锁定的 step94 复现)→ Config X 复位(A2×1 回底 T 完整)→ 4 塔让位路径。 **【现行权威 2026-09-24】0S3BN0UN 会话(T4X2, 12h 窗)—— L1/L2 通关配方重放成功 + L3 机制图半解**: ① 本会话(游戏版 0c5556536)L1/L2 布局与旧会话不同(初始列位置随机化),但摆钟语法一致: **L1 配方(17 步)**:A4→A3×6(4 塔 33-41→51-59 对位蓝图)→A2×10(全体+3 下行入槽)→WIN; **L2 配方(24 步)**:A4×3(墙+9/press 扫过 4 塔触发世界重组)→A5(钻孔)→A2×8 (全体+3 降至蓝图行带)→A5→A3×6(4 脚手架 -6/press 行军拼装镜像 S 模具覆盖蓝图)→WIN; ② L2 语义图:A1=全体↑3/A2=全体↓3/A3=重排·左(5 件 −3,4 脚手架重组)/ A4=重排·右(世界相位 +3,4→5 转换+穿孔)/**A5=钻孔机+搬0**(pit 在墙轴↔件内 lattice 间搬运, 0 门恒在 rows≡1 mod3 × cols≡1 mod3)/**A7=免费 UNDO(撤销上一步,无风险实验钥匙)**/A6=惰性; ③ **L3 机制图(半解,~40 步实证)**:开局对称双塔(4 左 5 右,b 窗=晶格点);A3 一按重组为 水平墙+5 件套上半场+b 模具下半场;A1/A2=墙升降机(**墙停处门区烙 b = 行走蓝图打印机**); A5=铸造扳机(板内 lattice 钻孔 + 模具区材料化 4 柱);**墙=移动浇铸机**(身后浇铸 5 板垂直翻转的 4 复制品,随墙移动旧品蒸发);A2 亦可触发垂直色/形置换; 目标判定:4 复制品精确覆盖 b 模具(同 L1/L2 判据族)。 ④ 部署/训练坑(本会话实录):seed 块静默失败(中继吞响应+大下载被杀)→ **必须远端文件实证**; torchao 0.10.0 不满足 peft 0.19.1(需 ≥0.16)+ **坑 14 变体:exec 同进程 sys.modules 缓存 旧模块,pip 装完 import 仍见旧版** → 用子进程验证;手动训练轮 runner `ops/v5_round.py` (分离进程,RESULT 逐条落盘 /content/v5_round.log)。 **【L3 机制 v2 · 2026-09-24 晚(step 104-140,38 步实测)——复合体/0门状态机】**: ① **四复合体结构**(比"左右两块"更细):右5(12宽带+6宽带,正Full=12w上6w下,锁相对位)/ 右4(6宽带+12宽带,**倒Full=6w上12w下**)/ 左5(柱3w×9行+带12w)/ 左4(带12w+柱3w×9行); 无门时 A1/A2=右5↑↓3+右4↓↑3,A3/A4=右复合体水平±3(左复合体完全不动); ② **0 门系统**(A5 双向):A5 开门=墙轴 row34 打 21 个 0(cols≡1 mod3)+ 左复合体透明 9 洞 实体化为 0 洞(139 实测 7 个:柱 3+带 4);A5 再按=填门+洞还原(双向搬运); ③ **门开模式**:A1/A2=墙↑↓3+左4↑↓6+右4↑↓6(左5/右5 不动);A3=左复合体左移3(132 实测 一次,后重复按失效——**状态机有记忆效应,非纯函数**);A4 同理预期右移(138 实测失效); ④ **无门+墙离开底位 33-35 时**:A1=全局↑3(墙+左5+左4+右4,右5 除外,131 实测); A2=左5↓3+左4↓3(墙/右4/右5 不动,140 实测)——A1/A2 不对称,状态机更深; ⑤ **过模填充修正**:材料覆盖窗=b→4/5 显示,**材料离开窗立即重开(无锁定,110/137 双实测)** → WIN 需要全部窗同一时刻精确覆盖;晶格点(row≡1 mod3 且 col≡1 mod3)永久保持 b 烙印 (材料覆盖中也显示 b); ⑥ **窗-材料配对图**(推断+部分实测):右5 6w↔窗12-17@9-11(134 前曾精确对位)、 右5 12w↔窗9-20@12-14(116 曾精确对位)、右4 倒Full↔下窗组倒结构(12w窗9-20@42-44 上+ 6w窗12-17@45-47 下,A1门开×1+A3×1 可双窗)、左5带12w↔顶窗33-44@3-5、左5柱↔33-35@6-8 或 33-35@42-50(9 行精确匹配)、左4带↔9-20@42-44 或 33-44@51-53; ⑦ **A1 形状循环**(右5):Full(占6行)→Compact(12w单条,占3行)→Full,周期 3 步位移 9 行 (116-119 实测),6w 在 Compact 相位消失、Full 相位回归——倒 Full(右4 结构)从未在右5 出现,**窗组 12-17@9-11+9-20@12-14 需要倒 Full 才能双精确对位** = 未解核心矛盾; ⑧ gen4 训练轮 374+ 步数据集已启动(16:2x,v5_round 前台 exec 模式绕 Popen 沙箱限制)。 历史会话(VIK9H6GV)的塔式电梯地图见 §6 0.5;其 L1/L2 布局与现行版本不同,仅作参考。 **v5t 学生代际链(现行)**:gen1(181步)→gen2(240步)→gen3(326步)→**gen4(347步,loss 近零区+分歧尖峰6.00)** 全部 HEAD 验证在链 t4_assets_v5/checkpoints/;gen1/gen3 评测 均 0 关 0 重置(渐进预期);**0S3BN0UN 会话教学累计 354 步**(含 L1/L2 两个 WIN 正样本 + L3 深探 63 步),trace 快照 HEAD 200。L3 终局线索:对位停驻填充 (A4 过模填充但非永久)+ 宽带-宽窗列对齐(33-44@39-41 vs 51-53)。 **v5t gen-1 已完成并归档**:68 步 ar25 教学 → 66 choice/67 boolean/68 score 样本 → 从 v4b 续训(v0.4.13 新补丁:out_dir 已有 qwenjev_s1.pt 则 load_heads 续接)→ 40 步 → 全产物 HEAD 验证在 HF `t4_assets_v5/checkpoints/`。训练判读:choice loss 前段≈0 (v4b 与教师行为先验一致——坍缩是状态特异的),分歧状态 loss 高达 17+/13+ (这些行才是真教学信号)。bp35 另教 48 步(迷宫导航+全盘元胞自动机,无 levels 突破)。 ar25 机制地图 v3(Task 12 实测定稿,累计 ~240 步,**LEVEL 1/2 已通关 2/8**)—— **塔式电梯谜题**。 ① 双件:4件(实心9宽带+实心左对齐柱)与 5件(505505505 洞带+右对齐505柱)。 **通关判定实证:蓝图(rows45-53:带51-59×3行+柱51-53×6行,45 格实心)与 4 塔 同构——4 塔三段精确入槽 = WIN(lvl+1);5 塔带单独精确覆盖蓝图带槽无事件 (柱槽必须匹配);5 塔柱右对齐永不匹配 = 诱饵/配重**; ② 动作真语义(L1):A4=斜行程(5→+3/4←−3,首次触发后附带全体+3 下行一次); A3=5←3/4→+3;A1/A2=双塔同步升降 3 行(落地 row63 硬止动不扣费); A7=免费单发扳机(一次后熄火,需其他成功动作再装填);A6=纯惰性 0 耗; ③ 计数器:col63=付费预算显示(63/循环,**耗尽后下一付费动作自动重生新循环, 实际预算无限**);no-op 不扣费;**过关返还制胜步费用**; ④ 摆钟全高度工作("4件止步47"证伪);墙 cols30-32 可穿越(穿越时被裁剪显示); ⑤ **Level 2 新机制**:过关后棋盘镜像重生(4侧/5侧左右互换,双塔→四件套: 蘑菇+松散带堆叠);5 件洞值 0→9(透明);蓝图 72 格三段(带42-44@9-17 + 柱45-50@9-11 + 带51-53@3-11)= 4 侧堆叠整体 (−18,+24) 平移; **A3/A4 语义翻转且步幅×2**(A3=4侧−6、A4=4侧+6;双侧解耦 5 侧冻结); **垂直轴锁定 → A5=钻孔机**(溶解墙轴 col31 每 3 行的 0-pit 门 → A2 解锁); 过关后 4 塔长出 5 型洞(4>5 同化); ⑥ **Level 1 通关配方(可重放 ~17 步)**:出生(rows15-23, 4带@33-41) → A2×10 (降 30 行进 rows45-53)→ A3×6(4带 33-41→51-59,extent 监控对位)→ WIN; **Level 2 配方(~13 步)**:任意动作触发重生(4侧带27-35+松散带21-29, rows18-29)→ A5 钻轴 → A3×3(−18)→ A2×8(+24)→ 三件入槽 WIN; ⑦ **Level 3 = 全新谜题型(未解)**:横墙 row48(b-门 33-35)+ 点状轴井 row49 (每 3 格 0-pit)+ 双方尖塔蓝图(rows3-14 / rows42-53,点对称 234 格)+ 四块 5 拼片(3×9 柱@21-29/12-14、12×3 带@27-29/34-45、12×3 带@30-32/12-23、 6×3 带@30-32/47-52,共 ~103 格 < 蓝图 → 疑分段生长);完整开局存本地 scripts/t4/obs_current.json(step195);A7 触发重生免费;动作语义未测。 T4 (VIK9H6GV) 已于 Task 12 末死亡(uptime ~4.4h,tunnel offline)——损失内存局面 (L3 进行中)与轨迹 step 154-204(两次 WIN 演示);gen-4 检查点+数据(≤step153) HF 幸存。重连新 T4 时:上传 codepkg → 装依赖(§4 坑 10 cu128 锁)→ put teach_server.py + v5_daemon.py → nohup 拉起 → **按 §0⑥ 配方重放 L1/L2** (~30 步,为 v5t 学生产出第一批 WIN 正样本)→ 继续单步教学攻 L3。 **v4b 判定(第三次阴性)**:real_b loss 0.49 / real_c ECE 0.4469→0.3326, 对照评测 ar25 0关0重置、bp35 0关1重置。**复盘对照实验定案**:随机基线 ar25 600/150 步双 0 关 + v4b ar25×600 0 关 → 0 关是噪声地板,v3/v4/v4b 的 0 关 不构成模型失效证据。决策树曾触发 System-2 蒸馏方向,被用户否决改为亲自教学。 v4b 产物全 HEAD 验证在 HF `t4_assets_v4/`:qwenjev_s1.pt(校准头 276MB)、 qwenjev_s1_sft.pt(SFT 头)、qwenjev_s1_v4_calibrated.pt(v4 校准头独立备份)、 adapter_model.pt(LoRA)、dataset_v4.tgz、traces_real3.tgz; 评测报告 `eval_report_v4b_ar25_bp35.json` 入仓根+HF(HEAD 200)。 v0.4.10 新增:① 堵住头文件上传黑洞(wip_uploader 30 分钟节奏推 qwenjev_s1.pt, real_b 后正式上传 qwenjev_s1_sft.pt 276MB)——上次 T4 死亡真正丢的就是头; ② 新镜像环境坑(坑 10):必须锁回 torch cu128 栈;③ watchdog 检查点改为 env 驱动。 v4 恢复过程中的新发现:HF 上 v4 只有 LoRA(adapter_model.pt 69.8MB),**决策头 (qwenjev_s1.pt)从未上过 HF** → real_c 的 `load_heads` 硬依赖它 → 恢复脚本 直进 real_c 的方案不成立 → 改为 real_b 重跑重建头(max_steps 110 避开 s165 OOM 墙, LoRA 从 s160 恢复)。头重建 loss 20+→0.68-5.9 震荡区间(fresh 头 + 收敛 LoRA 的 再适应,末值 2.08);ECE 0.3589→0.227 优于 v3(0.4151→0.2727)。 v3 历史结论保留:real_b(SFT) 收敛止损 + real_c(RLCD) ECE 0.4151→0.2727, 对照评测 ar25+bp35 各 150 步 0 关 0 胜;产物在 HF `t4_assets_v3/checkpoints/`。 v0.4.8 铁律:**权重一律 .pt 入仓 + HEAD 验证**(HF 静默剔除 .safetensors/.bin,坑 9)。 **v4 对照评测(2026-09-24,阴性)**:ar25 0 关 0 重置、bp35 0 关 0 重置 (v3 bp35 有 2 重置,v4 行为又变但仍未触过关通路),best_level_sum=0。 解读:架构修复在表征层已验证(loss/ECE 全改善),但 150 步短窗内未转化为过关—— 下一变量是驱动源(ε0.45 数据已采完 400 集并 HEAD 验证在 HF `t4_assets_v4/data/traces_real3.tgz` 88.5MB),v4b = dataset_final + traces_real3 重训(进行中,见 §6)。System-2 教师蒸馏仍排 v5(GPU 冲突未解)。 **新 T4 恢复(一键,若本机又死)**:标准 bootstrap 装好代码+依赖后: ```bash cd /content/qwenjev && QWENJEV_OUT=qwenjev-s1-hf-v4 QWENJEV_ASSETS=t4_assets_v4 \ nohup python3 -u -B scripts/v4_recover_bootstrap.py > /content/v4_recover.log 2>&1 & ``` 自动:抽 dataset_final.tgz → 拉 v4 权重到 stage_a_lora/hf_lora → 盖 prep/data 章 → real_b 重跑重建头(max_steps 110)→ real_c → ALL_DONE → 对照评测。 ⚠️ 依赖必须锁 cu128 栈(见 §4 坑 10),否则 transformers 导入即炸。 ## 0.4 RCA 实录(v0.4.9,复现工具已入仓) | 探针 | 读数 | 结论 | |---|---|---| | processor batch | pixel_values (512,1536)+128 vision tokens | 图像确实进 forward,排除漏传 bug | | 视觉塔输出(图像 token 位)帧 A vs B | per-token cos **0.604** | 塔活着,帧区分度强 | | last-position 帧 A vs B | cos **0.991**(真游戏 0.9999) | 帧内容信号在读出点死亡 | | last-pos 有图 vs 无图 | cos 0.741 | 只编码“有图”,不编码内容 | | 真游戏 30 步动作分布 | ACTION3 占 70%,仅 3 种动作 | 候选分布坍缩 | | 候选文本敏感性 cos(A1,A6) | 0.9995 | 候选区分也近乎失效 | 工具:`ops/diagnose_v3.py`(逐步 JSONL+探针)、`scripts/proc_probe.py`、 `scripts/vision_probe2.py`。修复机制:`hf_compat.pooled_last_and_vision()`; 新配置键 `system1.pool_vision: true`;`evaluate_local.build_s1` 从检查点自动探测 (v3 无标志=旧池化,v4 有=true=2H)。 历史:第一轮 v3 在 real_b 中途(step ~58/180)被超时打断后,v0.4.6 建立防丢失铁律; v0.4.7 加入 GPU 硬门控(12.5GiB 预判跳行,旧 T4 step-58/152 两次 OOM 死亡根因)。 QwenJev(Qwen3-VL-2B 多模态改造的 ARC-AGI-3 双系统智能体)三阶段训练管线完整入仓; **2026-09-23 关键结论:v2(仅 mock 训练)× 真游戏 zero-shot 泛化失败** (2 局 300 步 0 关 0 胜,见 §3),v3 用真游戏数据训练接力,编排器 stamp 幂等。 ## 0.5 防丢失铁律(v0.4.6,因真实事故写入) **任何产物创建后数分钟内必须落 HF**——Colab 超时和本地沙盒重置都真实发生过,唯一持久存储是 HF 仓。已内置的自动保险: 1. **SFT 训练中**:`train_system1.py` 每 `save_every_steps: 20` 步(≈13 分钟)写 WIP (heads + LoRA + stage_b_meta.json);编排器 `wip_uploader` 线程每 10 分钟把变化的 WIP 推到 HF `t4_assets_v3/checkpoints/hf_lora_wip/`。最坏损失 = ~13 分钟训练。 2. **断点续训**:real_b 启动时若本地无 hf_lora 但 HF 有 hf_lora_wip → 自动拉取并覆盖 stage_a_lora 作为起点(接着练,不从 v2 重来)。 3. **合并数据集**:data 阶段合并完 dataset_final 立即 tgz 推 HF `t4_assets_v3/data/dataset_final.tgz`。 4. **远端轨迹**:`remote_chain.py` 检测到采集完成 → 先后台 tgz+推 `t4_assets_v3/data/traces_real2.tgz`,再拉起编排器。 5. **所有 autosave 走 `upload_soft`**:失败只告警不炸流水线;正式产物仍走三次重试的 `upload`。 ## 1. 资产位置(哪些是持久的,哪些是临时的) | 资产 | 位置 | 持久性 | |---|---|---| | 代码仓 v0.4.3 | https://huggingface.co/tchbcb/qwenjev (公开,155+ 文件) | 持久 | | v2 终模型 | 同仓 `t4_assets_v2/checkpoints/qwenjev_s1.pt`(323.8MB)+ `hf_lora/` 分片(sha256 `cae4663a…`) | 持久 | | CUDA 编译资产 | 同仓 `t4_assets*/` 下 NVRTC 内核 tar + compile_cache_note | 持久 | | 训练蓝图 | 同仓 `train.md`(v0.4.3,14 章) | 持久 | | 本地 git 仓 | `/home/z/my-project/qwenjev`(沙盒重置会丢,从 HF 恢复) | 半持久 | | 远端 Colab 现场 | `/content/qwenjev`(代码)+ `/content/hf_cache`(基座缓存) | **临时**,实例销毁即失效 | | 信封隧道 | `https://aitun.cc/ZMPBD8M2`(远端 Colab 的 Flask 执行器) | **临时**,每次重启换隧道码 | ## 2. 一键恢复(新机器 / 新会话) ```bash # 1) 拉代码(任一方式) git clone https://huggingface.co/tchbcb/qwenjev # 或 snapshot_download cd qwenjev # 2) 装依赖(GPU 机器) pip install torch==2.11.0 transformers==5.16.1 peft==0.20.0 accelerate==1.14.0 pip install arc-agi "torchao>0.16" # 游戏引擎 + 必须 >0.16(见 §4 坑 1) # 3) 评测(检查点/基座自动从 HF 拉,无需 token,公开仓匿名可读) python ops/run_eval.py --games all25 --backend hf --max-actions 150 \ --out eval_report_public25.json # 无 GPU 的机器:--backend tiny(仅 harness 验证,不能代表 v2 水平,见 §4 坑 3) ``` 远端 Colab 执行器(若用户提供了新隧道码 `XXXX`): ```bash export T4_URL=https://aitun.cc/XXXX python qwenjev/ops/t4exec.py status # 健康检查 python qwenjev/ops/t4exec.py runfile <本地.py> # 执行本地脚本(内含 put 逻辑可传文件) ``` ## 3. 评测基线(v2 终模型 × 公开游戏,T4 实测) - 配置:`--backend hf`(fp16 基座 + LoRA merge)`--max-actions 150`(GAME_OVER 自动重置续玩,同预算公平) - 速度锚点:真模型 ~0.25 步/秒(大网格);启发式兜底 200+ 步/秒(见 §4 坑 1 健康判据) - **zero-shot 基线(2026-09-23 T4 实测,用户拍板提前叫停)**: ar25:150 步/0 关/609s;bp35:150 步/0 关/608s —— **2/25 局、0 胜、best_level_sum=0**; mock→真游戏迁移无游戏能力,符合预期(v2 只见过 mock 推箱)。 完整报告远端 `/content/eval_v2_2games_final.json`,仓根留档 `eval_report_public25_v2_partial.json`。 **这把失败尺子正是 v3 的对照**:同命令重评,`best_level_sum` 升即真数据训练有效。 - **v3 真游戏训练(2026-09-23 已完成,对照阴性)**: ① 数据:本地+远端各采一批 → 167,635 样本(dataset_final.tgz 在 HF); ② 训练:real_b SFT 有效 ~276 步收敛止损(loss 0.26-0.30;64×64 长格 OOM 硬门控 跳行)+ real_c RLCD 120 步(ECE 0.4151→0.2727);产物在 HF `t4_assets_v3/checkpoints/`(qwenjev_s1.pt 254MB + adapter_model.pt 69.8MB); ③ **对照评测(同尺子:ar25+bp35×150 步×hf 后端)**:ar25 0 关 0 重置、bp35 0 关 2 重置 —— best_level_sum=0,与 v2 zero-shot 基线(0 关)持平,v3 无泛化增益。 唯一行为差异:bp35 出现 2 次 RESET(基线 0 次),说明策略有变化但未触及过关通路; ④ 下轮配方见 §6。 - **v4 视觉读出修复版(2026-09-24 恢复重训,对照阴性)**: ① 数据:同 v3(dataset_final 158,290 行); ② 训练:real_b 头重建 110 步(loss 20+→0.68-5.9 震荡,末值 2.08)+ real_c RLCD(ECE 0.3589→0.227,优于 v3);产物在 HF `t4_assets_v4/checkpoints/`(qwenjev_s1.pt 276MB 校准版 + qwenjev_s1_sft.pt 276MB SFT 头 + adapter_model.pt 69.8MB,全部 HEAD 验证); ③ **对照评测(同尺子)**:ar25 0 关 0 重置、bp35 0 关 0 重置 —— best_level_sum=0。 行为差异再变(bp35 重置 2→0),仍未触过关通路; ④ 结论:架构读出修复改善表征健康度(loss/ECE),但不足以过关 → 下一变量 = 驱动源数据(ε0.45×400 集 traces_real3 已在 HF),v4b 重训进行中。 ## 4. 已知坑清单(按踩中概率排序) 1. **torchao 必须 >0.16**(v0.4.3 实测坑):transformers 5.16.1 加载 Qwen3-VL 时校验 torchao, 0.10.0 会让 `build_s1` 抛异常 → run_eval **静默回退启发式策略**跑完全程(不报错!健康判据: `steps_per_s > 100` 必是启发式)。修复:`pip install -U torchao`(0.18.0 验证通过)。 2. **信封协议两规则**(ops/t4exec.py 已内置,改代码前必读): ① payload 必须单行 b64url(76 字符换行是文档写法,现中继会弄坏多行 payload → CRC mismatch); ② CRC = `crc32(解码后的原始代码字节)`,不是对 b64 文本算(`print(123, 456)` → `c03b37d5` 实证)。 3. **CPU 评测可行性矩阵**(2 核 / 3.9GB 容器实测): tiny 后端 + v0.2.0 头(128 维)✅ 完整可跑(25/25);hf 后端需 ≥8GB 内存(fp16 基座 4.4GB + 三头 254MB fp32)❌ 本容器不可行;bitsandbytes 4bit 仅 CUDA,CPU 无替代。 且 v2 头是 2048 维,tiny 骨干 128 维 —— **tiny 后端不能加载 v2 检查点**(维度不匹配)。 4. **kagglehub 竞赛下载需认证**:`competition_download('arc-prize-2026-arc-agi-3')` 实测抛 `UnauthenticatedError`(需 KGAT token + 官网接受规则)。**评测链路已不依赖它**: `arc-agi` 包匿名 key 自动下发(2026-09-23 实测 25 环境全部拉取成功,~3MB)。 5. **HF xet 吞 safetensors**:直接上传大 `.safetensors` 会坏 → 用 nonce 前缀 + 4 分片 `.pt` + manifest.json(sha256) + reassemble 方案(`run_eval.py` 的 `ensure_adapter_safetensors` 自动重组校验)。 6. **本沙盒后台进程会被收割**:本地容器里 nohup/setsid 活不过工具调用结束,长任务必须前台分块 (每块 <9 分钟);远端 Colab 无此问题(nohup 可跑数小时)。 7. **远端 exec 作用域陷阱**:信封执行的脚本里,自定义函数内部访问不到顶层 `import` 的模块 (exec globals/locals 分离)→ 远端脚本一律写线性代码,不定义函数。 8. **隧道码每次重启轮换**:旧隧道码会超时,用 `t4exec.py status` 先验活;换码只需 `export T4_URL=https://aitun.cc/<新码>`。 9. **HF 静默剔除 .safetensors/.bin(v0.4.8 事故实录,最重要)**:upload_file 报成功、 commit 落地,但文件本体被服务端剥离 → resolve 时 404。实证:同一 30MB 随机字节, 存 .pt → HEAD OK;存 .bin/.safetensors → 404(96B 小文件同样死,xet 开关无关, 推断为权重类扩展被强制 LFS 而本仓 LFS 对象通道损坏)。**铁律:① 权重一律以 .pt 入仓(upload/upload_soft 内置 hf_safe_name 映射 + verify_remote HEAD 校验); ② run_eval 的 ensure_adapter_safetensors 已支持 adapter_model.pt 单文件形态; ③ 任何上传后必须 HEAD 验证,成功日志必须含 'HEAD ok'**。v3 权重救援实录: safetensors 全丢 → 从 T4 磁盘 rename .pt 重传,69.8MB+254MB 均 HEAD 校验通过。 疑难排查工具:`scripts/xet_experiment{,2,3}.py`(三轮对照实验,可复现)。 10. **新 Colab 镜像 cu130 栈(v0.4.10 事故实录,2026-09-24)**:新镜像预装 torch 2.11.0+**cu130** + torchvision/torchaudio/torchcodec 全 cu13,直接跑 real_b 会在 transformers 导入链上炸:torchaudio 的 `_check_cuda_version()` 抛 "PyTorch has CUDA 12.8 whereas TorchAudio has CUDA version 13.0" → `ModuleNotFoundError: Could not import module 'AutoProcessor'`(误导性报错!真因 在 audio 包版本自检)。另有 cu13 NVRTC builtins 探测失败风险(libnvrtc-builtins .so.13.0 dlopen 不到)。**修复(已验证):锁定老 T4 验证组合** `pip install torch==2.11.0+cu128 torchvision==0.26.0+cu128 --index-url https://download.pytorch.org/whl/cu128` + `pip uninstall torchao torchaudio torchcodec` + `pip install bitsandbytes==0.50.2 peft==0.20.0 transformers==5.16.1`。 ⚠️ pip 大包走信封前台会 504(中继超时但服务端继续跑完)→ 用后台 nohup+轮询日志; 测试 LD_LIBRARY_PATH 修 NVRTC 时**绝不能替换整条路径**(会丢驱动 libcuda), 且 cu13/lib 混有 libcuda stub。 11. **exec 沙箱内 os.symlink 被禁**("Creating symbolic links is not allowed.")→ 修库文件用 shutil.copyfile 复制,不能用符号链接。 12. **nohup 子进程挂在 /execute 会话下会占住执行通道**(Task 8/10 实录):POST /execute 返回空响应但服务端实际已执行(GET /health /status 不受影响, /status recent_history 可核实);轮询至子进程退出后通道恢复。 13. **exec 同进程 sys.modules 缓存旧模块**(Task 10 实录):重传模块后再 import 仍拿旧版 → 内联执行绕过,或重启 colab_server。 14. **colab_server exec 共享作用域污染探针**(Task 12 误判实录):exec_globals/ locals 跨调用共享,远程探针里的函数/comprehension 会读到陈旧全局变量 (曾误判"机构重置+计数器重置",实为污染数据)→ **几何分析必须拉 obs 到 本地算**,或远程代码严格去函数化、每个变量现算。 15. **中继 502 风暴**(Task 12 实录,坑 12 变体升级):/execute 间歇 502 (成功一次→502 一次节奏),GET 不受影响 → 用 `scripts/t4/t4r.py`(重试 包装 run/get,指数退避)骑波动;写 cmd 前先读 obs 确认上步已生效,防盲发。 ## 5. 训练现场恢复(若要继续训练/放大) - 蓝图:`train.md` §5(两阶段配方 + 显存预算)+ §11(T4 实录:smoke 391 行流水线、scale 246 行); - **真游戏训练接力(2026-09-23 启动,三步链式 `/content/real_pipeline.py`)**: ① `python -m data.collect_selfplay --config configs/collect_real.yaml`(25 游戏启发式+ε 采集,已完成 8863 步 → `data/traces_real/`); ② `python -m data.build_dataset --in data/traces_real --out data/dataset_real`; ③ Stage B 重训 `configs/train_real.yaml`(4bit 基座 + LoRA r16 + 三头,120 步 ≈ 76 分钟,产物 `checkpoints/qwenjev-s1-hf-real/`); 查看进度:`grep -v 'it/s' /content/real_pipeline.log | tail`;接力中断就从断的那一步单跑; - **真游戏训练 OOM 根因链(v0.4.3 排障实录,重要)**: ① transformers 5.16 要求 torchao>0.16(§4 坑 1); ② hf 分支 prompt 不截断,64×64 state(~4k 字符)→ 4k token 序列 → SDPA 爆显存 (`clip_state_text` 已修:meta 行 + '*' 变化行优先 + 均匀采样到预算,完整画面交给视觉塔); ③ **`from_pretrained` 默认 eval 模式,gradient checkpointing 仅在 self.training 时生效**—— 训练循环不调 `model.train_mode(True)` 时 64×64 行反向持 ~10GiB 全激活(step 1-24 靠运气, 实测 step25 必爆)。修复:optim 构造后 `model.train_mode(True)`。修复后 4.9GiB 恒定跑通 120 步; ④ 兜底三件套:行级 OOM 容错(empty_cache+跳过)、非有限 loss 行跳过、clip_grad_norm_(1.0); - 训完后重评对照:`python ops/run_eval.py --games ar25 bp35 ls20 ft09 --max-actions 60 --checkpoint checkpoints/qwenjev-s1-hf-real --backend hf`; - CUDA 编译资产已在仓,T4 实例重启后解压到 `/root/.cache/torch/kernels/` 可跳过 NVRTC 重编译 (见仓内 `compile_cache_note.json`); - 断点续训:`resume_adapters()` 已修(commit dda44ec),Stage B/C 可从 `checkpoints/` 续。 ## 6. 下一步(按优先级) 0. **【进行中 2026-09-24 傍晚】0S3BN0UN 会话(T4X2 Kaggle 2×T4, 12h 窗口)增量**: - **L1/L2 通关配方重放成功**(见 §0 现行权威块),trace 已含两关 WIN 正样本 (291 步快照 HEAD 200;教学继续至 350+ 步)。 - **gen3 训练轮**:326 步数据集(choice 320/bool 325/score 326)训练中 (torchao==0.18.0 修复后)。完成判据:/content/v5_round.log 出现 ROUND DONE + HEAD ok 两行。**后续每 ~40 新教学步跑一轮 v5_round.py**。 - **L3 攻坚中**(机制图半解见 §0③):当前形态=两座复合塔+b 模具; 待试:墙降到模具行触发浇铸入位 / A5×N 连续铸造 / 复合塔 marching 对齐 12-14 列系。 - 待办队列:gen3 完成验证→gen3 评测(ar25@150 对照 v4b 0关0重置)→继续 L3 →bp35@150 随机基线补跑(`ops/random_baseline_runfile.py` 改 `[('bp35',150)]`)。 - 新工具:`ops/v5_round.py`(手动训练轮,daemon 冻结时的可靠替代); 部署脚本已改 gen2 种子(t4_assets_v5)+trace 先恢复后播种(防覆盖)。 0.5. **【历史】VIK9H6GV 会话产出 gen-1/2/3/4 代际(HEAD 200)**: teach_server + daemon 架构见 §0;VIK9H6GV 会话产出 gen-1/2/3/4 代际 (HEAD 200)。**教学工具链(本地 scripts/t4/)**:teach_step.sh(单信封 单步:写 cmd→睡→取 obs→渲染)、watch.sh(紧凑几何摘要)、t4r.py(重试 包装,骑 502 风波)、render_obs.py、fsm_analysis.py / journey.py(轨迹 离线状态机重建)。**新会话开局三步**:① t4r.py get obs 本地渲染恢复局面; ② pgrep 确认 teach_server/v5_daemon/errwatch 在位;③ 按配方续教。 1. **ar25 L1/L2 重放 + L3 攻坚**(机制地图 v3 见 §0):新 T4 后先按 §0⑥ 配方重放两关(~30 步,教学轨迹含 WIN 正样本 → daemon 自动产 gen-5+, 学生首次见到正标签);L3 多拼片谜题语义探测顺序:A3/A4(谁动/方向/步幅) → A1/A2(垂直是否需先钻孔)→ A5(横墙门 33-35 + 轴井 row49 的钻法)。 铁律:**每步拉 obs 本地算几何(坑 14),不确定不盲发**。 顺手补跑:随机基线 bp35@150(`ops/random_baseline_runfile.py` 改回 `[('bp35', 150)]` 即可);bp35 的 A6 需要 (x,y) 坐标(KeyError 'x' 实证)待探。 2. **Kaggle 提交实战**:`scripts/package_kaggle.py` 打包(禁网环境,权重走 Kaggle Dataset),先 `--games all25` 本地验证再花 Commit 配额(`train.md` §7)。 注:v4b 600 步评测 1.02 步/s vs 150 步尺子 0.24 步/s——长评测比预估快 4 倍, Kaggle 预算内全 25 游戏扫一遍是可行的。 3. **RHAE 对齐**:官方按关卡 `min(人类步数/智能体步数,1)²` 加权,本地拿不到人类 基线,提交后用 LB 反馈校准本地报告的横向可比性。 ## 7. 凭据与安全 - HF 写 token:仅通过环境变量 `HF_TOKEN` 传入(`push_hf.py` 自动读 env / `~/.secrets/hf_token`); **任何在聊天/截图里明文出现过的 token,用完建议立刻在 HF 设置里轮换**; - 仓内不含任何 token(`.gitignore` + `push_hf.py` ignore_patterns 双保险); - Kaggle KGAT:尚未配置(评测不需要;仅离线竞赛数据包下载需要,见 §4 坑 4)。