exp(dagger-deploy): 轮次19——APG 修复两个既有 bug(_cat_gaps in-place、段边界 queue.detach 无梯度)后可跑,但碰撞铰链尺度失控(40万)且与部署形态不一致,暂不采用;转反馈蒸馏
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user