Dream-Tac Smoke 实验报告

论文: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 实验成功证明:

  1. 当前 A100 环境能够运行 Dream-Tac;
  2. 主模型和 Wan tokenizer 能正确加载;
  3. 四路视触觉 Franka 数据可以进入模型;
  4. 单次前向、反向和参数更新可以完成;
  5. 完整训练状态可以保存为 checkpoint。

本次结果不包含真实机器人成功率、模型收敛性或预测视频质量,因此不能等同于论文指标复现。

暂无评论

发送评论 编辑评论


				
登录后会自动同步第三方昵称作为评论昵称。
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇