论文:Dream-Tac: A Unified Tactile World Action Model for Contact-Rich Robot Manipulation
实验平台:1 × NVIDIA A100-SXM4-80GB
实验结论:PASS
说明
本次实验的目标不是复现论文的真实机器人成功率,而是完成一个最小 smoke test,验证 Dream-Tac 的训练链路能否在当前 A100 上运行。
Smoke 成功表示:模型权重和 tokenizer 能加载,最小视触觉数据能进入模型,程序能完成 1 次前向传播、反向传播和优化器更新,并保存可用 checkpoint。
第一部分:Smoke 实验的内容、要求及论文依据
1.1 Smoke 实验验证什么
本次 smoke 包含以下六项检查:
| 检查项 | 要求 |
|---|---|
| GPU 环境 | PyTorch 能识别 A100,并能执行 CUDA 计算 |
| 基础权重 | 能加载 Cosmos-Predict2-2B Video2World 主权重 |
| Tokenizer | 能加载 Wan2.1 VAE tokenizer |
| 最小数据 | 能读取两路 RGB、两路触觉、机器人状态、动作和语言嵌入 |
| 单步训练 | 完成 1 次 forward、backward 和 optimizer step |
| 保存结果 | 保存 model、optim、scheduler、trainer 四部分 checkpoint |
1.2 这些要求如何从论文中提取
输入与输出
论文图 1、图 2及第 3 节说明,Dream-Tac 使用:
- 第三人称 RGB 图像;
- 腕部 RGB 图像;
- 左、右指尖触觉图像;
- 机器人本体状态;
- 语言指令。
模型联合预测未来视觉、未来触觉和机器人动作。因此,smoke 数据必须至少包含四路图像、机器人状态、动作和语言条件。
基础模型与 tokenizer
论文附录 A.5 说明 Dream-Tac 从 Cosmos-Predict2-2B Video2World checkpoint 微调,并使用 Wan VAE 编码视觉和触觉图像。因此 smoke 必须同时准备:
model-480p-16fps.pt
tokenizer/tokenizer.pth
只检查文件存在还不够,训练过程中必须真正加载它们。
数据形状
论文附录 A.5 给出:
- RGB 输入为 224 × 224;
- 使用同步第三人称、腕部和左右触觉图像;
- proprioception 和 action 需要归一化;
- 动作块长度固定为
H = 20。
因此 smoke 保留动作块长度 20,并检查数据加载后的图像与动作形状。
训练计算
论文第 3.4 节说明模型使用统一扩散去噪训练目标,同时学习视觉、触觉和动作。因此 smoke 不能只执行 import 或 dry-run,而必须真正完成一次梯度更新。
Checkpoint
论文实验需要周期性保存 checkpoint。为确认单步训练结果可继续使用,本次 smoke 检查模型、优化器、调度器和训练状态是否全部保存。
1.3 与论文完整实验的区别
论文完整训练使用真实 Franka 机器人数据和多张 H100。本次 smoke 进行以下缩减:
| 项目 | 论文完整实验 | 本次 Smoke |
|---|---|---|
| 数据 | 真实机器人演示 | 人工生成的最小兼容样例 |
| GPU | 8 × H100 | 1 × A100 80GB |
| Batch size | 视触觉配置每卡 16 | 1 |
| 训练步数 | 完整训练计划 | 1 |
| 评价目标 | 成功率、泛化、效率 | 工程链路能否运行 |
第二部分:Smoke 实验的必要前置工作与进行过程
2.1 必要前置条件
硬件与环境
本次最终使用的环境为:
GPU NVIDIA A100-SXM4-80GB
Python 3.10.20
PyTorch 2.7.1+cu128
CUDA Runtime 12.8
nvcc 12.8.93
FlashAttention 2.7.3
NATTEN 0.21.0
Transformer Eng. 2.2.0
环境位于:
/dev/shm/Dream-Tac-env
代码、数据和模型分别位于:
/code/Dream-Tac/repo
/data/Dream-Tac
/model/Dream-Tac
这些是运行 smoke 必须具备的前置工作。依赖安装完成后,项目自带检查结果为:
Core dependencies: 20/20 passed
PyTorch/CUDA: OK
Optional GPU packages: 3/3 installed
INSTALLATION SUCCESSFUL
基础权重
Smoke 使用以下两个文件:
/model/Dream-Tac/Cosmos-Predict2-2B-Video2World/model-480p-16fps.pt
/model/Dream-Tac/Cosmos-Predict2-2B-Video2World/tokenizer/tokenizer.pth
验证大小:
| 文件 | 大小 |
|---|---|
| 主模型 | 3,913,017,214 bytes |
| Tokenizer | 507,609,880 bytes |
tmux
训练在 dream-tac tmux 会话中运行,防止 SSH 断开导致任务终止:
tmux new-session -A -s dream-tac
安全离开 tmux 使用 Ctrl+B,松开后按 d,而不是输入 logout。
2.2 准备最小 Smoke 数据
为了不依赖真实机器人数据,生成了一个 32 步的合成 Franka episode:
/data/Dream-Tac/smoke/cut_banana/
├── t5_embeddings.pkl
└── train/
├── episode_000.hdf5
├── episode_000_cam_front.mp4
├── episode_000_cam_high.mp4
├── episode_000_tactile_left.mp4
└── episode_000_tactile_right.mp4
HDF5 包含机器人 qpos 和 action,四个 MP4 对应两路视觉和两路触觉。T5 文件提供最小语言条件。
通过 FrankaDataset 读取后得到:
video (3, 45, 224, 224)
actions (20, 7)
t5_text_embeddings (512, 1024)
tactile gate 0.150287
这些结果说明最小样例已经进入 Dream-Tac 的视触觉数据管线。
2.3 验证基础模型加载
主模型文件通过 torch.load 进行结构检查:
BASE_CHECKPOINT_ARCHIVE_OK
keys=715
由于官方基础权重是单个 .pt 文件,而训练器主要使用分布式 checkpoint 目录,smoke 增加了 .pt 兼容加载逻辑,并要求模型参数覆盖率达到最低阈值。
2.4 运行 dry-run
使用 Cut Banana 配置运行 dry-run,检查配置能否解析、数据路径和训练参数能否建立。
期间出现:
AttributeError: 'functools.partial' object has no attribute '__qualname__'
日志同时说明程序会 falling back to LazyConfig.save_yaml。这是配置保存的备用流程,不会阻止真实训练,因此没有作为失败处理。
2.5 第一次真实训练:补充 tokenizer
第一次进入真实训练时发现 Wan tokenizer 路径仍是占位值:
Checkpoint path .../tokenizer/tokenizer.pth does not exist
随后下载并上传官方 tokenizer.pth,放到 /model/Dream-Tac,并为代码中的默认路径建立软链接。再次检查后文件大小为 507,609,880 bytes。
2.6 处理 HDF5 重建问题
重新运行时,/data 对象存储无法原地覆盖已有 HDF5,出现:
OSError: Unable to synchronously create file
将旧的合成 HDF5 改名保留后重新创建,数据生成与读取恢复正常。这个问题只涉及可再生的 smoke 样例,不影响模型权重。
2.7 完成单步训练
训练配置被缩减为:
batch size 1
max iterations 1
gradient accum. 1
validation disabled
checkpoint step 1
GPU count 1
程序完成模型初始化、基础权重加载、数据读取、前向传播、反向传播和优化器更新,最终输出:
Done with training.
2.8 定位并验证 Checkpoint
真实训练任务目录为:
/model/Dream-Tac/output/dream_tac_smoke/a100/
one_step_20260828T144435Z/checkpoints/iter_000000001
逐项检查结果:
model=OK
optim=OK
scheduler=OK
trainer=OK
latest_checkpoint=OK
DREAM_TAC_SMOKE_OK
第三部分:Smoke 实验结果
3.1 终端汇总
========== Dream-Tac Smoke ==========
Status : PASS
Pipeline : [weights OK] -> [data OK] -> [forward OK] -> [backward OK] -> [optimizer OK] -> [save OK]
Train step : [####################] 1 / 1
GPU memory : [#########-----------] 35.48 / 80 GB PyTorch peak=33.06 GB
Checkpoint : [optim 80%|model 20%] total=19.57 GB
Components : model=3.91 GB optim=15.66 GB scheduler=OK trainer=OK
Location : /model/Dream-Tac/output/dream_tac_smoke/a100/one_step_20260828T144435Z/checkpoints/iter_000000001
=====================================
3.2 Checkpoint 结果
| 部分 | 大小 | 状态 |
|---|---|---|
| model | 3.91 GB | OK |
| optim | 15.66 GB | OK |
| scheduler | 8,328 bytes | OK |
| trainer | 1,904 bytes | OK |
| 合计 | 19.57 GB | OK |
3.3 GPU 占用
| 指标 | 数值 |
|---|---|
| PyTorch 峰值 GPU 显存 | 33.06 GB |
| PyTorch 峰值预留显存 | 33.26 GB |
| NVML 已用 GPU 显存 | 35.48 GB |
| NVML 空闲 GPU 显存 | 44.52 GB |
3.4 最终结论
本次 smoke 实验成功证明:
- 当前 A100 环境能够运行 Dream-Tac;
- 主模型和 Wan tokenizer 能正确加载;
- 四路视触觉 Franka 数据可以进入模型;
- 单次前向、反向和参数更新可以完成;
- 完整训练状态可以保存为 checkpoint。
本次结果不包含真实机器人成功率、模型收敛性或预测视频质量,因此不能等同于论文指标复现。