evaluating-cosmos-policy について
LIBERO と RoboCasa のシミュレーション環境で NVIDIA Cosmos Policy を評価する手順をまとめたスキルです。ベンチマーク実行、ヘッドレス GPU 環境の構築、推論性能の分析を行う研究者や開発者向けです。
主な機能
- 01LIBERO ベンチマーク評価
- 02RoboCasa シミュレーション評価
- 03ヘッドレス EGL レンダリング設定
- 04スモークテストと結果検証
- 05推論レイテンシとスループットの分析
活用シーン
- 01LIBERO のスモークテストや全評価の実行
- 02RoboCasa タスクでのポリシー評価
- 03GPU クラスターでのヘッドレスシミュレーション設定
- 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 の評価
公開 cosmos-policy リポジトリを使用した、LIBERO および RoboCasa シミュレーション環境向け NVIDIA 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 を使って視覚的な観測を離散トークンにエンコードし、その後、言語による指示と視覚的なコンテキストを条件としてロボットの動作を予測します。
主なアーキテクチャの選択:
| コンポーネント | 設計 |
|---|---|
| 視覚エンコーダー | Cosmos Tokenizer(離散トークン) |
| 言語条件付け | 言語埋め込みへのクロスアテンション |
| 動作予測 | 自己回帰型の動作トークン生成 |
公開コマンドの範囲:サポートされている評価のエントリーポイントは cosmos_policy.experiments.robot.libero.run_libero_eval と cosmos_policy.experiments.robot.robocasa.run_robocasa_eval です。再現に関するメモは、これらの公開モジュールと、ドキュメントに記載されたフラグに基づいてください。
必要な計算リソース
| タスク | GPU | VRAM | 標準的な所要時間 |
|---|---|---|---|
| LIBERO スモーク評価(1 試行) | 1x A40/A100 | ~16 GB | 5-10 min |
| LIBERO 全体評価(50 試行) | 1x A40/A100 | ~16 GB | 2-4 hours |
| RoboCasa 単一タスク(2 試行) | 1x A40/A100 | ~18 GB | 10-15 min |
| RoboCasa 全タスク | 1x A40/A100 | ~18 GB | 4-8 hours |
使い分け
このスキルを使う場合:
- 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:規模を拡大する
50 試行で 4 つすべての LIBERO タスクスイートを実行します。
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
このフォークは、公開 RoboCasa 評価パスで使用されるパッチ適用済みの環境変更を維持しながら、Cosmos Policy が想定する robocasa Python パッケージをインストールします。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-Spatial | 98.1% | 公式のLIBERO空間タスクの結果 |
| LIBERO-Object | 100.0% | 公式のLIBEROオブジェクトタスクの結果 |
| LIBERO-Goal | 98.2% | 公式のLIBERO目標タスクの結果 |
| LIBERO-Long | 97.6% | 公式のLIBERO長期タスクの結果 |
| LIBERO-Average | 98.5% | LIBEROスイート全体の公式平均 |
| RoboCasa | 67.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が設定ファイルのパスを要求する
対処法: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環境変数を整合させてください。ジョブがゼロ以外の終了コードで終了しない限り、終了処理のみで発生する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を参照してください。
リソース
- Cosmos Policyリポジトリ:https://github.com/NVlabs/cosmos-policy
- LIBEROベンチマーク:https://github.com/Lifelong-Robot-Learning/LIBERO
- Cosmos互換のRoboCasaフォーク:https://github.com/moojink/robocasa-cosmos-policy
- RoboCasaの上流プロジェクト:https://github.com/robocasa/robocasa
- MuJoCoドキュメント:https://mujoco.readthedocs.io/