exp(dagger-deploy): 轮次19——APG 修复两个既有 bug(_cat_gaps in-place、段边界 queue.detach 无梯度)后可跑,但碰撞铰链尺度失控(40万)且与部署形态不一致,暂不采用;转反馈蒸馏

This commit is contained in:
cbb
2026-10-20 07:56:58 +08:00
parent 5675159987
commit ff160f576e
3 changed files with 18 additions and 2 deletions
+4 -1
View File
@@ -139,7 +139,10 @@ def main():
stats['tgt'] += lt.mean().item()
(seg_loss / nseg).backward()
seg_loss = torch.zeros((), device=dev)
q, qp, queue, prev_d = q.detach(), qp.detach(), queue.detach(), prev_d.detach()
# 只 detach 状态并重置队列:段边界下一 plan 走 r=0 重新提交(新图有梯度);
# 沿用旧 queue 会跨过已 backward 的图(二次 backward 报错),也避免整段无梯度
q, qp, prev_d = q.detach(), qp.detach(), prev_d.detach()
queue = torch.zeros(B, 0, 6, device=dev)
# BC 锚定
X, Y, V, SG = data.batch(C['batch'] * 4)
with torch.autocast('cuda', dtype=torch.bfloat16, enabled=amp):
+2 -1
View File
@@ -131,7 +131,8 @@ class Kin:
def _cat_gaps(parts, starts):
out = {'gm': torch.cat([p.pop('gm') for p in parts], 0)}
if 'b' in parts[0]:
for p, s in zip(parts, starts): p['b'] += s
# 非 in-place:b 会被 autograd 的索引反向图引用(APG 的碰撞铰链梯度路径),+= 会让 backward 报 version 错
for p, s in zip(parts, starts): p['b'] = p['b'] + s
for k in ('b', 'i', 'j', 'gap'): out[k] = torch.cat([p.pop(k) for p in parts]) # 逐键拼、拼完即释放
return out