mcpField
E
evaluating-cosmos-policy

evaluating-cosmos-policy

github.com/kalarislabsその他7343 回インストール4 日前に更新
リポジトリ

evaluating-cosmos-policy について

LIBERO と RoboCasa のシミュレーションで NVIDIA Cosmos Policy の推論評価を設定・実行するスキルです。研究者向けに、ヘッドレス GPU 実行、結果確認、推論プロファイリングを案内し、学習や実機評価は対象外です。

主な機能

  1. 01LIBERO ベンチマーク評価
  2. 02RoboCasa タスク評価
  3. 03ヘッドレス GPU と EGL の設定
  4. 04スモークテストと結果検証
  5. 05推論レイテンシとスループットの分析

活用シーン

  1. 01LIBERO のポリシースコア再現
  2. 02RoboCasa でのポリシー評価
  3. 03ヘッドレス GPU クラスターの準備
  4. 04推論性能のプロファイリング

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-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 です。再現に関するメモは、これらの公開モジュールと、ドキュメントに記載されたフラグに基づいてください。

必要な計算リソース

タスクGPUVRAM標準的な所要時間
LIBERO スモーク評価(1 試行)1x A40/A100~16 GB5-10 min
LIBERO 全体評価(50 試行)1x A40/A100~16 GB2-4 hours
RoboCasa 単一タスク(2 試行)1x A40/A100~18 GB10-15 min
RoboCasa 全タスク1x A40/A100~18 GB4-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-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が設定ファイルのパスを要求する

対処法:あらかじめ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を参照してください。

リソース

エージェントの運用手順

  1. 環境を確認します。 GPU メモリ、モデルのチェックポイントとライセンス、フレームワークのバージョン、入力形式を確認します。
  2. 入力を特定します。 データまたはユーザーに確認し、形式、識別子、パラメーターを確定します。結果に影響する値は推測せず、質問してください。
  3. まず小規模に実行します。 最初に、低解像度または短い長さで単一サンプルの推論を実行します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 出力を定性的に確認し、タスクの指標を用いて評価します。また、生成コンテンツに適用されるライセンス上の制限を確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未解決の不確かな点を示します。
発生した問題対処方法
大きな入力でメモリ不足が発生する解像度やシーケンス長を下げる、半精度を使用する、または入力をタイル分割します。
インストール済みバージョンに、この手順に記載された関数、フラグ、エンドポイントがないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、対応方法を調整してユーザーに伝えます。API を捏造してはいけません。
必須の入力、識別子、パラメーターが曖昧であるユーザーに質問するか、実行前に前提を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計を捏造してはいけません。実行または検証できない場合は、率直に伝えてください。
  • 商用利用または公開利用の前に、モデルとデータセットのライセンスを確認します。
  • ここに記載されているバージョン固有の詳細は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認します。
  • 費用が発生する、共有 GPU やクラウドのクォータを消費する、個人データや患者データに触れる、または元に戻せない操作を行う前に、許可を求めます。

関連するスキル

  • fine-tuning-serving-openpi:JAX または PyTorch バックエンドを使用して、Physical Intelligence の OpenPI モデル(pi0、pi0-fast、pi0.5)をファインチューニングし、ロボットポリシーの推論向けに提供します。acr…
  • fine-tuning-openvla-oft:連続アクションヘッド、LoRA 適応、a…を使用して、ロボットのアクション生成向けに OpenVLA-OFT および OpenVLA-OFT+ ポリシーをファインチューニングして評価します。
  • phoenix-observability:LLM のトレーシング、評価、モニタリングのためのオープンソース AI オブザーバビリティプラットフォームです。

コメント