Shared Physics Studio 夜间迁移(2026-08-01 历史 runbook)¶
状态说明:本文记录 2026-08-01 当晚迁移窗口,保留其历史 gate 与时间边界, 不再作为当前
oursresidual integration 的训练授权。当前实现以docs/project/ours_residual_architecture.md和用户已确认的执行合约为准: 三个 canonical case 先分别完成 fresh 200-epoch partial gate,满足 gate 后可自动 进入各自 fresh 1200-epoch full train;trainer/checkpoint/RMS/eval 均使用 Studio CommonAgent 路径,不复用 reference runtime 或 residual checkpoint。
目标是在 2026-08-01 00:00–07:00(Asia/Shanghai) 内,把当前 Physics Studio
和 xuyuan 的 PHC-X teacher + residual policy 收敛到唯一共享工程
/mnt/cvda_mnt/projects/arthoi4d/。该历史窗口只证明迁移后的代码、算法和统一接口正确;
当晚未跑 full train,不整理全部历史结果,也不删除任何旧路径。当前 full-train 规则见
页首状态说明。
完成条件¶
07:00 前必须能用证据回答下表。只有产物真实存在才能标记 PASS。
| Gate | 完成条件 |
|---|---|
| Shared root | 共享根可导入 Studio,配置和 submodule 路径不依赖旧工程绝对路径 |
| Ours integration | PHC-X teacher + residual policy 位于 pipeline/physics/ours/,复用作者 trainer/PPO |
| Tensor parity | 固定 fixture 的 teacher/residual observation、action、reward 通过数值对照 |
| Update parity | 同一 PPO batch 的 loss、gradient 和一次 parameter update 通过对照 |
| Reload | Studio 保存的 checkpoint 可 reload,reload 前后固定输入输出一致 |
| D3D smoke | 一个 canonical D3D case 完成 5 个原生 PPO outer iterations 和短 eval |
| Common output | 短 eval 写出合法 common_rollout.npz、二元 evaluation 和 common-renderer 视频 |
| ARCTIC | 必要 ARCTIC 数据已迁入共享根,至少一个固定样本可由新工程读取 |
| Safety | 两个源工程没有被修改或删除,现有训练没有被覆盖或中断 |
本轮不以 reward 收敛或最终 Success 为验收条件。5 iterations 只验证完整训练路径、参数更新、 checkpoint 和统一下游;正式训练在本轮通过后另行启动。
固定路径与边界¶
只读源路径:
唯一写入目标:
关键数据源:
/DATA/intern/hoi4d/projects/zhanbaiting/ArtHOI4D/data/d3dhoi
/DATA/intern/hoi4d/projects/zhanbaiting/ArtHOI4D/data/partnet
/mnt/cvda_mnt/xuyuan/data/hoi/ARCTIC
当前 D3D canonical full20 入口:
/DATA/intern/hoi4d/projects/zhanbaiting/ArtHOI4D/output/runs/
d3dhoi_shared_ground_v40_default_hoi_align_s100k_m10k_full20_v001
xuyuan 算法审查入口:
/mnt/cvda_mnt/xuyuan/project/intermimic-phcx/isaacgym/src/intermimic/env/tasks/phcx_base.py
/mnt/cvda_mnt/xuyuan/project/intermimic-phcx/isaacgym/src/intermimic/env/tasks/articulated_target_ext.py
/mnt/cvda_mnt/xuyuan/project/intermimic-phcx/scripts/run_ig_ablation_studio3.py
严格遵守:
- 不对两个源路径执行代码编辑、格式化、Git 操作、移动或删除。
- 不使用
rsync --delete,目标路径已有内容先列清单,不覆盖来源不明文件。 - 两台机器使用各自本地 Conda。源代码和 config 不能硬编码 Python executable。
TORCH_EXTENSIONS_DIR、Python cache 和 adapter 临时文件写本机/tmp。- 不停止当前 CoDA/InterMimic 队列;GPU smoke 只能使用检查后确认空闲的 0–5 号卡。
- 不复制全部
output/、data/prev、legacy、wandb、cache、临时目录或失败 run。 - 不在迁移过程中顺手重构无关代码。
最终代码边界¶
Studio 继续唯一负责:
case.json + result.ptcanonical input;- shared humanoid、full-J articulated asset、ground/support 和 reset;
- reference timeline、contact、common rollout;
- Success/Fail evaluator、common renderer 和 Viser。
xuyuan 中只迁移 PHC-X teacher + residual policy 的算法部分:
pipeline/physics/ours/
__init__.py
policy.py # frozen PHC-X teacher 与 residual network
task.py # residual observation、reward、action composition
train.py # 调用作者 InterMimic trainer/PPO/buffer/GAE
run.py # Studio train/eval/checkpoint 边界
允许直接 import InterMimic/PHC-X 的作者实现;禁止复制或重写简化版 PPO/trainer。不要迁入 xuyuan
的独立 manifest、scene loader、asset loader、renderer、evaluation 或 result.pkl 下游。算法代码如果
依赖这些旧边界,应在 run.py/task.py 做最小输入替换,不能在 Studio 内保留第二条 runtime。
00:00–07:00 执行表¶
00:00–00:20:冻结证据¶
- 记录两个源工程的 Git HEAD、branch、submodule commit、
git status --short和 dirty diff checksum。 - 记录必要 checkpoint 的路径、大小和 SHA256。
- 检查目标路径是否已有文件;非空时只记录并增量补齐,不删除。
- 检查 GPU 0–5 和现有训练进程;把可用 GPU 写进状态报告。
- 创建本轮产物目录:
产物至少包括 source_inventory.txt、checksums.txt 和 gpu_inventory.txt。
00:20–01:10:后台迁移,前台不停工¶
并行启动两类 rsync,先 --dry-run,确认目标后再正式执行。局域网/NFS 迁移不使用压缩。
代码白名单:
submodule 只复制本轮导入和 smoke 所需的源码、配置、asset 与 checkpoint;排除其 outputs、wandb、 cache 和编译产物。数据白名单:
data/d3dhoi/
data/partnet/
data/contact_regions/
data/physics_cache/
ARCTIC 必要数据与 PHC-X teacher/residual checkpoint
当前 canonical full20 的 case.json/result.pt 及它们实际引用的 contact/chunk 文件
当前有效、后续仍需比较的 physics checkpoints/results
代码复制结束后立即进入下一阶段;大数据继续后台传输,不等待无关历史数据。
00:40–01:20:共享 Studio 基线 smoke¶
与数据迁移并行:
- 从共享根导入
pipeline.physics。 - 严格加载一个 D3D
case.json + result.pt。 - 校验 full-J articulated scene、shared humanoid 和 reference timeline。
- 加载一个现有 common rollout,执行 evaluator 和 renderer。
- 搜索新工程正式运行路径中的两个旧绝对工程路径;测试 fixture/迁移记录可以包含,runtime/config 不得包含。
这个阶段若失败,先修共享路径和缺失文件,不能开始改算法来掩盖基础迁移错误。
01:20–03:20:迁移 ours 算法¶
- 先从 xuyuan 原代码画出最短调用链:teacher obs/action → residual obs/network/action → reward → 作者 PPO update。
- 原样迁移算法数学和 checkpoint layout,不做命名美化、结构大改或超参数调整。
- 使用 Studio 提供的 canonical human/object/contact tensors 替换其独立 loader。
- 使用 Studio full-J object;active joint 只决定监督目标,inactive free joints 保持被动物理,不固定, drift 只诊断、不判 Fail。
- reset 必须复现训练协议:采样参考帧
t时,人和对象都重置到 reference 的绝对状态q(t);stateInit=Starteval 从case.json的绝对初始值开始。 - 保留作者 PHC-X teacher、normalizer、action scale、PPO/GAE/buffer、horizon、minibatch、curriculum 和 checkpoint 语义;本轮只把 env 数量和 outer iterations 缩小用于 smoke。
03:20 时必须已有可 import、可构造 task/network 的 Studio ours 路径。若还在大规模重写,立即停止重写, 改为直接复用作者模块并只写边界 adapter。
03:20–04:40:固定 fixture 数值等价¶
从同一份原始输入、seed、checkpoint 和 normalization statistics 分别运行旧 xuyuan 路径与新 Studio 路径,保存并比较:
| 对象 | 验收 |
|---|---|
| teacher observation/action | shape、顺序一致;max_abs_error <= 1e-6 |
| residual observation/action | shape、顺序一致;max_abs_error <= 1e-6 |
| action composition | teacher、residual scale、最终 action 一致 |
| reward | 每个分量、权重、总和、termination boolean 一致 |
| one PPO update | loss、gradient、parameter delta 一致;确定性张量 <=1e-6 |
| short simulation | reset/done/event sequence 一致;PhysX state 目标 <=1e-4 |
不得只比较最终 scalar reward。遇到 PhysX 非确定性时,先要求进入 simulator 前的 canonical state、obs、 action 和 reward 数学严格一致,再记录 state tolerance;不能用“随机性”解释明显的坐标系、root height、 joint order 或 normalization 错误。
把比较结果写入:
output/verification/shared_migration_20260801/parity.json
output/verification/shared_migration_20260801/parity.md
04:40–06:10:端到端最小验证¶
优先并行运行:
- GPU A:一个 canonical D3D case,16–32 env,作者完整 PPO 路径,5 个 outer iterations。
- GPU B:固定 fixture/checkpoint reload 与 deterministic 32–64 frame eval。
- CPU/空闲 GPU:读取一个已迁移的 ARCTIC 样本,校验路径、shape、FPS、人体/对象 reference。
D3D smoke 必须完成以下整条链:
canonical input
→ Studio full-J env
→ PHC-X teacher + residual policy
→ author PPO 5 iterations
→ checkpoint save/reload
→ deterministic eval
→ common_rollout.npz
→ binary evaluation
→ common renderer video
检查 loss/reward 为有限数值、参数确实更新、checkpoint reload 前后固定输入输出一致。视频必须肉眼抽查 首帧、中间帧和末帧,排除 T-pose、黑屏、错误 reset 后继续录制、人体/物体错位和 joint order 错误。
06:10–06:40:共享运行检查¶
- 再次搜索 runtime/config 中的旧工程绝对路径。
- 验证所有 Python/cache/temp 路径均可由机器本地环境提供,没有写进源码。
- 验证输出使用唯一 run 目录,不覆盖当前实验。
- 若可登录第二台机器,从同一共享根执行 import、canonical load 和 checkpoint load smoke;否则明确记为
NOT_RUN,不得伪报PASS。 - 记录最终代码 HEAD/dirty diff 和 submodule commit;后续 full train 启动前冻结该状态。
06:40–07:00:结果封板¶
将最终报告写入:
报告只需要:
- 上述九个 Gate 的
PASS/FAIL/NOT_RUN; - 实际运行命令;
- 关键数值误差;
- checkpoint、common rollout、evaluation、视频的绝对路径;
- 未完成项的真实 blocker 和下一条最短动作;
- 两个只读源路径的最终 Git 状态对照,证明没有被修改。
冲刺规则¶
- 单个问题连续 20 分钟没有缩小范围,就换成更直接的 A/B fixture 或原模块 import,不继续猜。
- 不因 smoke reward 低而启动长训练;先证明训练实现和数据流正确。
- 不因代码“丑”而重构。今晚只保留正确、最短、可验证的正式路径,清理另开任务。
- 不为旧输出增加 runtime fallback;缺失数据用一次性迁移补齐。
- 可并行做只读审查、数据复制和 GPU smoke,但共享 checkout 的代码编辑/Git 操作只允许一个 writer。
- 07:00 到达时不得用“正在训练”代替结果;停止新增工作,写出真实 Gate 状态和全部产物路径。
迁移后再做(仅指 2026-08-01 历史窗口)¶
以下内容明确不占用本轮 7 小时:
- full train 与收敛比较(当前任务已在 partial gate PASS 后授权自动执行);
- full20 批量实验;
- 重复运行同一 case 的多-seed评测;
- 全量历史 output/legacy 搬运;
- 无关 Physics Studio 重构和测试清理;
- 删除
/DATA/.../ArtHOI4D或 xuyuan 原工程。
只有用户检查本轮报告并明确确认后,才允许归档或删除旧路径。该限制不阻止当前任务按 页首状态说明执行 fresh partial/full train。