Skip to main content
MolmoAct2 根据相机图像、任务指令和机器人状态, 预测一段机器人动作。PhyAI 以 BF16 运行它的视觉语言骨干网络和连续动作 expert。 本页使用 franka_droid 机器人配置。你会先运行一次合成 observation, 再使用已采集的样本和 Python API。每个示例返回 15 个动作,每个动作包含 8 个值。
allenai/MolmoAct2 是面向多种机器人形态的基础 checkpoint,用于后续机器人任务微调。 本页示例检查推理和输入处理流程,不代表机器人上的任务成功率。 Ai2 在微调模型合集中发布了面向具体部署场景的 checkpoint。

快速开始

你需要 Linux、Python 3.12 或更新版本、uv,以及支持 BF16 且有足够空闲显存加载模型的 NVIDIA GPU。CUDA 环境见安装说明。以下命令在 PhyAI 仓库根目录运行。
1

安装 PhyAI

如果已有仓库和环境,激活该环境后,从仓库根目录继续。
2

下载 checkpoint

下载完整模型仓库。除了权重,processor 还需要 tokenizer、图像处理配置、Python 文件和 norm_stats.json。PhyAI 使用 trust_remote_code=True 从这个本地目录加载 processor。如果已经下载好模型,将 MOLMOACT2_CHECKPOINT 设为已有目录。后续命令继续在同一个 shell 中运行,保留这个变量和已激活的环境。
3

运行一次推理

用 nvidia-smi 选择可用的 GPU。下面的命令使用 GPU 0:
--synthetic 生成相机图像,并使用所选机器人配置的平均状态,因此首次运行无需准备 observation 文件。脚本加载模型、预测动作,并保存后处理后的数组。日志中会出现:
4

读取结果

第一行应为 (1, 15, 8) float32 True,表示一次 observation、15 个未来动作, 每个动作包含 8 个值。对于 franka_droid,这些值依次是 joint_0 到 joint_6, 最后是 gripper;checkpoint 中的控制模式为 absolute joint pose。

运行已采集的 observation

官方 DROID 样本 提供一张外部相机图像、一张腕部相机图像,以及对应的状态。 只下载这两张图像,并保存样本中的状态:
样本只提供一路外部相机视角。按照上游示例,将这张图像传入两次,分别填入两个外部相机 输入位置,再传入腕部视角:
这里仍使用前面下载的基础 checkpoint,通过真实 observation 演示文件输入流程。 下载样本图像不会将模型切换为 DROID 微调版本。

使用自己的相机图像和状态

将样本文件替换为同一时刻采集的 observation。对于 franka_droid,重复传入的 --image 参数须按下表排列: 提供 RGB 图像;CLI 会将图像文件转换为 RGB。Python 输入使用形状为 (height, width, 3) 的 uint8 数组,缩放和裁剪由 processor 处理。 使用自己采集的数据时,第 2 路应传入对应的第二台外部相机图像。 将测得的状态保存为 float32 NumPy .npy 数组,形状为 (8,) 或 (1, 8), 顺序为 [joint_0, joint_1, ..., joint_6, gripper]。传入原始状态值;processor 负责按 checkpoint 归一化并编码为离散状态 token。 状态和动作的约定必须与所选 checkpoint 及机器人配置一致。

选择其他机器人配置

--norm-tag 决定相机顺序、状态和动作的归一化统计、控制模式,以及动作序列长度, 必须与 observation 匹配。为其他机器人准备数据前,先查看可用 tag 及对应维度:

使用 Python API

将下面的代码保存为仓库根目录下的 run_molmoact2_api.py。它使用前面设置的 checkpoint 变量和准备好的样本文件。相机字典明确指定每一路对应的图像;你也可以传入 有序图像列表。
run_molmoact2_api.py
第一行输出为 (1, 15, 8) torch.float32 cpu。在这组配置下,engine.step() 返回的是经过维度补齐的归一化动作,形状为 (1, 15, 32)。processor.postprocess() 移除补齐维度、截取所需动作步数,并按 tag 的统计数据反归一化。 在应用中,让 engine 和 processor 持续处理多次 observation,应用结束时再关闭 engine。

推理参数

运行 python examples/molmoact2/run_molmoact2.py --help 查看全部输入参数。 使用 Python API 时,在 MolmoAct2Request 中设置 num_steps,在 MolmoAct2Processor.from_pretrained() 中设置 n_action_steps。 CUDA Graph 捕获动作速度计算。图像和文本前处理、prefill 在图外执行,首次请求还包含 捕获过程。复用 engine 可以复用兼容的已捕获图。要关闭 Python 示例中的捕获,设置 RuntimeConfig(use_cuda_graph=False)。

排查问题

连续动作推理要求 checkpoint 包含 action expert,且 action_mode 为 "continuous" 或 "both"。底层 API 还提供 MolmoAct2GenerationRequest,用于贪心生成 token ID;本页动作示例使用 MolmoAct2Request 及对应的 processor。 如需在本地进程之外部署,见并行服务。