mcpField
E
evaluating-cosmos-policy

evaluating-cosmos-policy

github.com/orchestra-research测试与质量14.1k866 次安装19 周前更新
代码仓库

关于 evaluating-cosmos-policy

用于在 LIBERO 和 RoboCasa 仿真环境中评估 NVIDIA Cosmos Policy 的工作流指南,面向需要运行基准测试、配置无头 GPU 环境或分析推理性能的研究人员和开发者。

主要功能

  1. 01LIBERO 基准评估
  2. 02RoboCasa 仿真评估
  3. 03无头 EGL 渲染配置
  4. 04冒烟测试与结果验证
  5. 05推理延迟和吞吐量分析

适用场景

  1. 01运行 LIBERO 冒烟测试或完整基准
  2. 02评估 RoboCasa 任务中的策略
  3. 03在 GPU 集群配置无头仿真
  4. 04使用固定任务设置比较重复运行

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/orchestra-research/ai-research-skills --skill evaluating-cosmos-policy

安装后在 Claude Code 中输入/evaluating-cosmos-policy确认已加载。

附带文件references/libero-commands.mdreferences/robocasa-commands.md

详细介绍

Cosmos Policy 评估

用于在 LIBERO 和 RoboCasa 仿真环境中评估 NVIDIA Cosmos Policy 的工作流,基于公开的 cosmos-policy 仓库。涵盖空白机器设置、无头 GPU 评估和推理性能分析。

快速开始

使用官方公开评估模块运行最简 LIBERO 评估:

uv run --extra cu128 --group libero --python 3.10 \
  python -m cosmos_policy.experiments.robot.libero.run_libero_eval \
    --config cosmos_predict2_2b_480p_libero__inference_only \
    --ckpt_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B \
    --config_file cosmos_policy/config/config.py \
    --use_wrist_image True \
    --use_proprio True \
    --normalize_proprio True \
    --unnormalize_actions True \
    --dataset_stats_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_dataset_statistics.json \
    --t5_text_embeddings_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_t5_embeddings.pkl \
    --trained_with_image_aug True \
    --chunk_size 16 \
    --num_open_loop_steps 16 \
    --task_suite_name libero_10 \
    --num_trials_per_task 1 \
    --local_log_dir cosmos_policy/experiments/robot/libero/logs/ \
    --seed 195 \
    --randomize_seed False \
    --deterministic True \
    --run_id_note smoke \
    --ar_future_prediction False \
    --ar_value_prediction False \
    --use_jpeg_compression True \
    --flip_images True \
    --num_denoising_steps_action 5 \
    --num_denoising_steps_future_state 1 \
    --num_denoising_steps_value 1 \
    --data_collection False

核心概念

Cosmos Policy 是什么:NVIDIA Cosmos Policy 是一种视觉-语言-动作(VLA)模型,它使用 Cosmos Tokenizer 将视觉观测编码为离散 token,然后根据语言指令和视觉上下文预测机器人动作。

关键架构选择:

组件设计
视觉编码器Cosmos Tokenizer(离散 token)
语言条件对语言嵌入进行交叉注意力
动作预测自回归生成动作 token

公开命令接口:受支持的评估入口为 cosmos_policy.experiments.robot.libero.run_libero_eval 和 cosmos_policy.experiments.robot.robocasa.run_robocasa_eval。复现说明应以这些公开模块及其文档中说明的标志为准。

计算要求

任务GPU显存典型耗时
LIBERO 冒烟评估(1 次试验)1x A40/A100~16 GB5-10 分钟
LIBERO 完整评估(50 次试验)1x A40/A100~16 GB2-4 小时
RoboCasa 单任务(2 次试验)1x A40/A100~18 GB10-15 分钟
RoboCasa 全部任务1x A40/A100~18 GB4-8 小时

适用场景与替代方案

适用于以下场景:

  • 在 LIBERO 或 RoboCasa 基准上评估 NVIDIA Cosmos Policy
  • 分析 Cosmos Policy 的推理延迟和吞吐量
  • 在 GPU 集群上为机器人仿真设置无头 EGL 渲染

以下场景请使用替代方案:

  • 从头训练或微调 Cosmos Policy(请使用官方 Cosmos 训练文档)
  • 使用基于 OpenVLA 的策略(请使用 fine-tuning-openvla-oft)
  • 使用 Physical Intelligence pi0 模型(请使用 fine-tuning-serving-openpi)
  • 运行真实机器人评估,而非仿真评估

工作流 1:LIBERO 评估

复制此清单并跟踪进度:

LIBERO Eval Progress:
- [ ] Step 1: Install environment and dependencies
- [ ] Step 2: Configure headless EGL rendering
- [ ] Step 3: Run smoke evaluation
- [ ] Step 4: Validate outputs and parse results
- [ ] Step 5: Run full benchmark if smoke passes

步骤 1:安装环境

git clone https://github.com/NVlabs/cosmos-policy.git
cd cosmos-policy
# Follow SETUP.md to build and enter the supported Docker container.
# Then, inside the container:
uv sync --extra cu128 --group libero --python 3.10

步骤 2:配置无头渲染

export CUDA_VISIBLE_DEVICES=0
export MUJOCO_EGL_DEVICE_ID=0
export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl

步骤 3:运行冒烟评估

uv run --extra cu128 --group libero --python 3.10 \
  python -m cosmos_policy.experiments.robot.libero.run_libero_eval \
    --config cosmos_predict2_2b_480p_libero__inference_only \
    --ckpt_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B \
    --config_file cosmos_policy/config/config.py \
    --use_wrist_image True \
    --use_proprio True \
    --normalize_proprio True \
    --unnormalize_actions True \
    --dataset_stats_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_dataset_statistics.json \
    --t5_text_embeddings_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_t5_embeddings.pkl \
    --trained_with_image_aug True \
    --chunk_size 16 \
    --num_open_loop_steps 16 \
    --task_suite_name libero_10 \
    --num_trials_per_task 1 \
    --local_log_dir cosmos_policy/experiments/robot/libero/logs/ \
    --seed 195 \
    --randomize_seed False \
    --deterministic True \
    --run_id_note smoke \
    --ar_future_prediction False \
    --ar_value_prediction False \
    --use_jpeg_compression True \
    --flip_images True \
    --num_denoising_steps_action 5 \
    --num_denoising_steps_future_state 1 \
    --num_denoising_steps_value 1 \
    --data_collection False

步骤 4:验证并解析结果

import json
import glob

# Find latest evaluation result from the official log directory
log_files = sorted(glob.glob("cosmos_policy/experiments/robot/libero/logs/**/*.json", recursive=True))
with open(log_files[-1]) as f:
    results = json.load(f)

print(results)

步骤 5:扩大评估规模

使用全部四个 LIBERO 任务套件运行 50 次试验:

for suite in libero_spatial libero_object libero_goal libero_10; do
  uv run --extra cu128 --group libero --python 3.10 \
    python -m cosmos_policy.experiments.robot.libero.run_libero_eval \
      --config cosmos_predict2_2b_480p_libero__inference_only \
      --ckpt_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B \
      --config_file cosmos_policy/config/config.py \
      --use_wrist_image True \
      --use_proprio True \
      --normalize_proprio True \
      --unnormalize_actions True \
      --dataset_stats_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_dataset_statistics.json \
      --t5_text_embeddings_path nvidia/Cosmos-Policy-LIBERO-Predict2-2B/libero_t5_embeddings.pkl \
      --trained_with_image_aug True \
      --chunk_size 16 \
      --num_open_loop_steps 16 \
      --task_suite_name "$suite" \
      --num_trials_per_task 50 \
      --local_log_dir cosmos_policy/experiments/robot/libero/logs/ \
      --seed 195 \
      --randomize_seed False \
      --deterministic True \
      --run_id_note "suite_${suite}" \
      --ar_future_prediction False \
      --ar_value_prediction False \
      --use_jpeg_compression True \
      --flip_images True \
      --num_denoising_steps_action 5 \
      --num_denoising_steps_future_state 1 \
      --num_denoising_steps_value 1 \
      --data_collection False
done

工作流 2:RoboCasa 评估

复制此清单并跟踪进度:

RoboCasa Eval Progress:
- [ ] Step 1: Install RoboCasa assets and verify macros
- [ ] Step 2: Run single-task smoke evaluation
- [ ] Step 3: Validate outputs
- [ ] Step 4: Expand to multi-task runs

步骤 1:安装 RoboCasa

git clone https://github.com/moojink/robocasa-cosmos-policy.git
uv pip install -e robocasa-cosmos-policy
python -m robocasa.scripts.setup_macros
python -m robocasa.scripts.download_kitchen_assets

此分支会安装 Cosmos Policy 所需的 robocasa Python 包,同时保留公开 RoboCasa 评估路径中使用的已修补环境更改。请确认 macros_private.py 存在且路径正确。

步骤 2:运行单任务冒烟评估

uv run --extra cu128 --group robocasa --python 3.10 \
  python -m cosmos_policy.experiments.robot.robocasa.run_robocasa_eval \
    --config cosmos_predict2_2b_480p_robocasa_50_demos_per_task__inference \
    --ckpt_path nvidia/Cosmos-Policy-RoboCasa-Predict2-2B \
    --config_file cosmos_policy/config/config.py \
    --use_wrist_image True \
    --num_wrist_images 1 \
    --use_proprio True \
    --normalize_proprio True \
    --unnormalize_actions True \
    --dataset_stats_path nvidia/Cosmos-Policy-RoboCasa-Predict2-2B/robocasa_dataset_statistics.json \
    --t5_text_embeddings_path nvidia/Cosmos-Policy-RoboCasa-Predict2-2B/robocasa_t5_embeddings.pkl \
    --trained_with_image_aug True \
    --chunk_size 32 \
    --num_open_loop_steps 16 \
    --task_name TurnOffMicrowave \
    --obj_instance_split A \
    --num_trials_per_task 2 \
    --local_log_dir cosmos_policy/experiments/robot/robocasa/logs/ \
    --seed 195 \
    --randomize_seed False \
    --deterministic True \
    --run_id_note smoke \
    --use_variance_scale False \
    --use_jpeg_compression True \
    --flip_images True \
    --num_denoising_steps_action 5 \
    --num_denoising_steps_future_state 1 \
    --num_denoising_steps_value 1 \
    --data_collection False

步骤 3:验证输出

  • 确认评估日志输出了预期任务名称、对象划分和检查点/配置值。
  • 检查日志中最后的 Success rate: 行。

步骤 4:扩大范围

增加 --num_trials_per_task 的值或添加更多任务。为确保多次运行结果可比较,请保持 --obj_instance_split 不变。


工作流 3:空白机器集群启动

Cluster Launch Progress:
- [ ] Step 1: Clone the public repo and enter the supported runtime
- [ ] Step 2: Sync the benchmark-specific dependency group
- [ ] Step 3: Export rendering and cache environment variables before eval

步骤 1:克隆并进入受支持的运行环境

git clone https://github.com/NVlabs/cosmos-policy.git
cd cosmos-policy
# Follow SETUP.md, start the Docker container, and enter it before continuing.

步骤 2:同步依赖项

uv sync --extra cu128 --group libero --python 3.10
# or, for RoboCasa:
uv sync --extra cu128 --group robocasa --python 3.10
# then install the Cosmos-compatible RoboCasa fork:
git clone https://github.com/moojink/robocasa-cosmos-policy.git
uv pip install -e robocasa-cosmos-policy

步骤 3:导出运行环境

export CUDA_VISIBLE_DEVICES=0
export MUJOCO_EGL_DEVICE_ID=0
export MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl
export HF_HOME=${HF_HOME:-$HOME/.cache/huggingface}
export TRANSFORMERS_CACHE=${TRANSFORMERS_CACHE:-$HF_HOME}

预期性能基准

官方评测的参考值(与特定设置和随机种子相关):

任务套件成功率备注
LIBERO-Spatial98.1%官方 LIBERO 空间任务结果
LIBERO-Object100.0%官方 LIBERO 物体任务结果
LIBERO-Goal98.2%官方 LIBERO 目标任务结果
LIBERO-Long97.6%官方 LIBERO 长时程任务结果
LIBERO-Average98.5%LIBERO 各套件的官方平均结果
RoboCasa67.1%官方 RoboCasa 平均结果

复现说明:公布的成功率仍取决于检查点选择、任务套件、随机种子和模拟器设置。报告任何数值时,请同时记录确切的命令和环境。


不可妥协的规则

  • EGL 对齐:在无头 GPU 节点上,始终同时设置 CUDA_VISIBLE_DEVICES、MUJOCO_EGL_DEVICE_ID、MUJOCO_GL=egl 和 PYOPENGL_PLATFORM=egl。
  • 优先使用官方运行时:如果在宿主机 Python 环境中安装时遇到二进制兼容性问题,请先按照 SETUP.md 使用受支持的容器工作流,再调试软件包内部问题。
  • 缓存一致性:设置和评测时使用相同的缓存目录,以便重复使用 Hugging Face 和依赖项缓存。
  • 运行可比性:重复运行时,固定任务名称、物体划分、随机种子和试验次数。

常见问题

问题:宿主机 Python 环境中的二进制兼容性问题或加载器故障

解决方法:按照 SETUP.md,在官方容器/运行时中重新运行。不要假设宿主机软件包的重新构建结果会与公开发布环境一致。

问题:LIBERO 在非交互式 Shell 中提示输入配置路径

解决方法:预先创建 LIBERO_CONFIG_PATH/config.yaml:

import os, yaml

config_dir = os.path.expanduser("~/.libero")
os.makedirs(config_dir, exist_ok=True)
with open(os.path.join(config_dir, "config.yaml"), "w") as f:
    yaml.dump({"benchmark_root": "/path/to/libero/datasets"}, f)

问题:EGL 初始化或关闭时出现提示信息

解决方法:先对齐 EGL 环境变量。如果作业退出码不为零,则将仅在 teardown 阶段出现的 EGL_NOT_INITIALIZED 警告视为低参考价值信息。

问题:RoboCasa 中 Kitchen 物体采样出现 NaN 或资源查找失败

解决方法:重新运行资源设置,并确认已修补的 robocasa 安装完好:

python -m robocasa.scripts.download_kitchen_assets
python -c "import robocasa; print(robocasa.__file__)"

问题:MuJoCo 渲染不匹配

解决方法:验证 GPU 设备是否对齐:

import os
cuda_dev = os.environ.get("CUDA_VISIBLE_DEVICES", "not set")
egl_dev = os.environ.get("MUJOCO_EGL_DEVICE_ID", "not set")
assert cuda_dev == egl_dev, f"GPU mismatch: CUDA={cuda_dev}, EGL={egl_dev}"
print(f"Rendering on GPU {cuda_dev}")

高级主题

LIBERO 命令矩阵:参见 references/libero-commands.md RoboCasa 命令矩阵:参见 references/robocasa-commands.md

资源

评论

支持 Markdown