> ## Documentation Index
> Fetch the complete documentation index at: https://phyai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# VPP2

> 运行 VPP2 动作与视频推理，配置 CFG 和张量并行。

`vpp2` 插件支持 [VPP2](https://github.com/roboterax/video-prediction-policy-2)
的 RoboDojo、LIBERO 动作策略和独立视频预测。

准备好 PhyAI [CUDA 环境](https://phyai.mintlify.site/zh/index.md#安装)和完整的 VPP2 发布目录，
包括 `config.json`、Wan 资源、tokenizer、模型权重和 `dataset_stats.json`。
以下命令均在 PhyAI 仓库根目录运行。

## 动作推理

```bash theme={null}
uv run python examples/vpp2/run_vpp2.py \
  --checkpoint /path/to/VPP2 \
  --variant robodojo_joint2b_100k \
  --image /path/to/composed-observation.png \
  --task "Pick up the object." \
  --proprio 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \
  --steps 10 --seed 1 \
  --output action.pt
```

将示例中的零状态换成实测机器人状态。`--image` 可以接收一张已合成图像，
也可以按下表顺序接收各相机的图像路径：

| 模型 | 相机顺序 | 状态维数 | 动作形状 |
| - | - | -: | - |
| `robodojo_joint2b_100k` | 头部、左腕、右腕 | 16 | `[32, 16]` |
| `libero_video10k_action30k` | 外部、腕部 | 8 | `[32, 7]` |

输出的 `.pt` 文件包含 CPU 张量：`action` 使用 checkpoint 定义的动作单位，
`normalized_action` 为归一化动作。添加 `--return-video` 可将完整解码视频
保存到 `video_full`。动作推理仅支持 guidance scale `1`。

历史条件使用 `--condition-history` 和 `--condition-observation`，
张量格式见 `--help`。观测历史和动作执行由调用方管理。

## 视频预测

```bash theme={null}
uv run python examples/vpp2/run_vpp2.py \
  --checkpoint /path/to/VPP2 \
  --variant video_stage2_17f \
  --image /path/to/first-frame.png \
  --task "The robot picks up the object." \
  --guidance 4 --steps 30 --seed 3402 \
  --output video.pt
```

`video_stage2_17f` 生成 17 帧，换成 `video_stage1_49f` 可生成 49 帧。
两者默认使用 30 步、CFG scale `4`。输出包含 `video_latents` 和解码视频
`video`；后者形状为 `[1, 3, T, H, W]`，数值范围为 `[-1, 1]`。

## 多 GPU

将 `uv run python` 替换为
`uv run torchrun --standalone --nproc_per_node=N`，再添加对应参数：

| 模式 | N | 附加参数 |
| - | -: | - |
| 两路 TP，动作或视频 | 2 | `--tp 2` |
| 并行 CFG，仅视频 | 2 | `--cfg-parallel 2` |
| TP × CFG，仅视频 | 4 | `--tp 2 --cfg-parallel 2` |

进程数必须等于 `tp × cfg-parallel`。当前不支持 DP、CP 或序列并行。

## 配置

示例自动选择 kernel 策略，也可用 `--kernel-config /path/to/policy.yaml` 覆盖。

| `examples/vpp2/` 下的策略文件 | DiT attention | GEMM |
| - | - | - |
| `kernels_action.yaml` | FlashInfer | Torch |
| `kernels_video.yaml` | SDPA | Engine 默认 |

两份 YAML 还选择了归一化、调制和 RoPE 融合 kernel。请使用与推理模式对应的策略。

CUDA graph 默认开启，`--no-cuda-graph` 可关闭。首次请求包含图捕获和编译开销。
连续推理应复用同一个 `Engine`；Python API 和资源释放用法见
`examples/vpp2/run_vpp2.py`。自行构造 Engine 时，将对应 YAML 通过
`KernelConfig(config_path=...)` 传入 `EngineConfig.kernel`。

## 性能

RoboDojo 测试使用单张 **NVIDIA H200** GPU、`240 × 416` 分辨率、17 帧视频、
32 个动作和 10 步 Euler。FlashInfer **0.7.4**、Humming **0.1.19** 下的结果为：

| 计时范围 | 预热后耗时 |
| - | -: |
| 已编码条件 → GPU 动作 | 128.4–129.3 ms |
| 已预处理 CPU 图像和 token ID → 编码器 → CPU 动作 | 145.4–145.8 ms |

区间为各轮中位数的范围，每轮预热三次后测量十个请求。计时不包含图像预处理、
分词、权重读取、视频解码及首次请求的图捕获。

下方折线图记录依赖升级前的优化阶段，使用 FlashInfer **0.6.17** 和
Humming **0.1.16**：

![VPP2 优化阶段：已编码输入的推理耗时，以及单独计时的观测到动作路径。](https://mintcdn.com/phyai/c9OJUHlGWSO5eEZ2/images/models/vpp2/acceleration.png?fit=max\&auto=format\&n=c9OJUHlGWSO5eEZ2\&q=85\&s=5e72dc9e98c80177ee32fa7f68b892aa)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.