diag: F 段——MeanFlow 一步采样残留噪声(开环 1/2/4/8 段与零噪声的幅度/抖动/残差-噪声相关;闭环 4 段、零噪声);sample_k 加 steps、rollout 加 steps/z_scale;删 E 段;本机执行清单更新

This commit is contained in:
Hark
2026-10-18 19:10:32 +00:00
parent cafa038110
commit 1bf59e7175
4 changed files with 52 additions and 124 deletions
+10 -63
View File
@@ -3,90 +3,37 @@
本文件是 Hark 对本机计算的唯一要求清单。按顺序执行,每一步把「回传」里的文件或输出原样交给用户,不要跳步,不要自行改代码。
所有命令在仓库根目录(G:\Robot_v2\机器人手臂)的 Git Bash 里运行。完成的条目由 Hark 在下一次提交里删掉。
## 已知结论(截至 2026-10-19 02:43 回传)
## 已知结论(截至 2026-10-19 03:07 回传)
- 特征口径 Python 与 JS 一致(最大差 3.6e-6):排除「闭环输入没见过」。
- 子目标排除:不用子目标、用老师真实途经点,与基线完全一样(0% 到达 / 99.6% 碰撞)。
- 闭环方向对但极慢:2 s 只把目标误差缩小 18.5%,首撞中位 1.46 s,主碰撞组对 2-4。开环(老师状态上)几乎精确。
- 现在的嫌疑:模型「抄上一帧速度」。第 2 步的 E 段专门验证。
- gaps 显存:粗筛分块已生效(1.05 / 1.40 GiB),4096×40 的 4.46 GiB 全在拼接胶囊对。本版默认只返回 gm,不再拼胶囊对(只有 APG 要)。
- 特征口径 Python 与 JS 一致;子目标、抄上一帧速度、起步都已排除(老师轨迹中段带速度起步也 0% 到达、96% 碰撞)。
- gaps 显存已过:三条都 1.05 GiB,与点数无关。
- 稳定现象:策略动作幅度在开环、起点、闭环三处都是老师的 1.4–1.6 倍,开环 16 步末端却准(~6 mm)。幅度大、终点准 = 每步叠着来回抵消的抖动;闭环只执行前 3 步,抖动不抵消,表现为「动得多、走得少」。
- 现在的嫌疑:MeanFlow 一步生成没把噪声去干净。第 1 步的 F 段专门验证。
## 第 0 步:同步代码
```bash
git status --short # 有未提交改动就先 commit,不要丢
git pull --rebase gitea main
git log --oneline -1 # 应是 Hark 的「fix(kin/diag): gaps 默认不拼胶囊对 …」
git log --oneline -1 # 应是 Hark 的「diag: F 段 …」
```
- 训练控制台若开着先点「停止」,确认没有 python 训练进程在跑。
- 不要启动 DAgger / M5,等 Hark 看完第 1、2 步结果再定。
- 不要启动训练 / DAgger / M5,等 Hark 看完第 1 步结果再定。
## 第 1 步:gaps 显存峰值(不到 1 分钟)
```bash
PYTHONUTF8=1 python - <<'EOF'
import torch
from ml.common.kin_torch import Kin
kin = Kin(device='cuda')
for n, cap in [(512, 40.0), (4096, 4.0), (4096, 40.0)]:
q = kin.lo + (kin.hi - kin.lo) * torch.rand(n, 6, device='cuda')
torch.cuda.empty_cache(); torch.cuda.reset_peak_memory_stats()
with torch.no_grad(): kin.gaps(q, cap)
print(f'n={n:5d} cap={cap:4.0f} peak {torch.cuda.max_memory_allocated() / 2**30:6.2f} GiB', flush=True)
EOF
```
- 通过:三行峰值都 ≤ 2 GiB。
- 专用显存接近 22 GB 或共享显存开始上涨:立刻 Ctrl+C,回传已打印的行,不要继续第 2 步。
- 回传:终端 3 行。
## 第 2 步:闭环失败定位(含新加的 E 段,约 5–8 分钟)
## 第 1 步:闭环失败定位(含新加的 F 段,约 6–10 分钟)
```bash
PYTHONUTF8=1 python -m ml.eval.diag_cl --ckpt ml/runs/base/last.pt --n 256 --out ml/runs/diag_cl.json
```
- 专用显存超过 22 GB 就 Ctrl+C 并回传终端输出。
- 新增输出:`E0_openloop`(开环动作幅度 ÷ 老师幅度;把 dq 抹成 0 后的幅度;起点行幅度);`E1_mid_teacher_vel` / `E1_mid_zero_vel`(从老师轨迹 30% 处起步,带老师速度 vs 静止起步:到达、碰撞、1 s 目标误差比、前 1 s 速度 ÷ 老师速度)。D 段已删。
- 新增输出:`F0_openloop_sampler`(开环 1/2/4/8 段采样与零噪声:幅度比、抖动比、残差与噪声相关、前 3 步与 16 步末关节误差);`F1_4step`、`F1_z0`(闭环用 4 段采样、零噪声:到达、碰撞、2 s 目标误差比)。E 段已删。
- 回传:`ml/runs/diag_cl.json`。
## 回传汇总
| 步骤 | 回传内容 |
|---|---|
| 1 | 终端 3 行峰值 |
| 2 | ml/runs/diag_cl.json |
| 1 | ml/runs/diag_cl.json |
| 任一步出错 | 终端最后 30 行输出 |
---
## 执行回传(2026-10-19 04:05,本地 AI)
### 第 0 步:同步代码
pull 前无未提交的 tracked 改动;两个 untracked 文件原位保留未丢(`ml/eval/diag_collision.py` —— 早前已被 diag_cl 取代的旧诊断脚本;根目录「视频轮播-绿幕间隔.html」—— 用户个人文件,两者都未入仓)。log 顶部 = `527bc25`「fix(kin/diag): gaps 默认不拼胶囊对 …」✓。无训练进程。
### 第 1 步:gaps 显存峰值(实测)
```
n= 512 cap= 40 peak 1.05 GiB
n= 4096 cap= 4 peak 1.05 GiB
n= 4096 cap= 40 peak 1.05 GiB
```
**通过**:三行都 ≤ 2 GiB,且都等于单粗块(446 点)的固有水平——默认不拼胶囊对后,峰值与总点数完全无关。
### 第 2 步:闭环失败定位(E 段;完整 JSON 已更新到 ml/runs/diag_cl.json)
A/B/C 与前两轮一致(A/B 全过;C:0% 到达 / 99.6% 碰撞、2 s 误差比 0.815、主碰撞对 J3-J5)。E 段新增:
- **E0_openloop**(开环 val 随机 4096 行):老师幅度 0.319;策略开环幅度比 **1.438**;**把 dq 抹成 0 后幅度比 1.399(只降 2.7%)**;老师正在动的行上抹 dq 也 1.385(不降);抹 dq 前后 16 步末端动作差 p50 7.8°;起点行(静止起步)幅度比 **1.521**。
→ **排除「抄上一帧速度」**:若幅度靠 dq 撑着,抹 dq 应暴降;实测几乎不动(1.438→1.399)。反过来,开环/起点幅度本身就系统性偏大(1.44~1.52×)。
- **E1_mid_teacher_vel**(老师轨迹 30% 处起步、带老师上一帧速度):到达 **0%** / 碰撞 **96.1%** / 1 s 误差比 **0.627** / 前 1 s 速度比 **1.565**
- **E1_mid_zero_vel**(同起点、静止起步):到达 **0%** / 碰撞 **97.7%** / 1 s 误差比 **0.829** / 速度比 **1.442**
→ 带老师速度只把 1 s 误差比从 0.829 改善到 0.627,但两者都 0% 到达、~96–98% 碰撞(老师剩余时长中位 1.5 s):**不是起步问题**,中段带速度起步也全灭。
**本轮观察(供定位)**:策略幅度在开环(1.44)、起点行(1.52)、闭环前 1 s(1.44~1.57)三处一致地是老师的 **1.4~1.6 倍**——幅度系统性偏大是稳定的模型级现象,不是起步或 dq 造成的。
### 第 1、2 步都没出错,无终端报错段。