This document explains how to package your policy into a Docker image that organizers can pull and run for the CVPR challenge evaluation.
We use an MME-VLA (framesamp+modul) model as an example.
- A Docker image containing your policy server code and all dependencies.
- A checkpoint location that the organizers can download.
- One command to start your policy server inside the container.
Implement the Policy class compatible with the challenge interface.
-
Copy the challenge_interface directory from the benchmark repo into your repo.
For example, in this repo, we copied the participant-oriented files into the
challenge_interfacedirectory.challenge_interface ├── __init__.py ├── msgpack_numpy.py ├── policy.py ├── scripts │ └── deploy.py └── server.py -
Override
inferandresetin your policy implementation.For example, we wrapped the original MME-VLA policy in the
MyPolicy_for_CVPR_Challengeclass for the challenge. -
Adjust
challenge_interface/scripts/deploy.pyfor your own policy.For example, in this repo, we modified it into this for the
MyPolicy_for_CVPR_Challengeclass.
Upload your model checkpoint(s) somewhere the organizers can download them.
- For example, we uploaded the framesamp+modul MME-VLA model to Hugging Face.
We provide a challenge_interface/docs/Dockerfile example.
You may edit it to include any additional dependencies your policy requires, or use your own Dockerfile.
Build the Docker image:
docker build -f challenge_interface/docs/Dockerfile -t <my_cool_model_name>:latest .- Run your container locally:
docker run --rm -it --gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,video \
-v "$PWD/<dir>:/app/<dir>" \
-p <port>:<port> \
my_cool_model_name:latestMap the server port and mount the directory correctly. Here we put all the model checkpoints under the runs directory and use port 8001.
- Inside the container, start the policy server using your modified
deploy.py.
# Inside the container
uv run python -m challenge_interface.scripts.deploy --port <port> --checkpoint-dir <dir>
- From another terminal, run the benchmark eval client outside the policy server container for evaluation.
cd <robomme_benchmark>
uv run python -m challenge_interface.scripts.phase1_eval --port <port>
Push your image to a registry so the organizers can pull it from Docker Hub.
docker tag <my_cool_model_name>:latest <dockerhub_user>/<my_cool_model_name>:latest
docker login
docker push <dockerhub_user>/<my_cool_model_name>:latestFor example, organizers pushed an image for framesamp+modul to Docker Hub.
Prepare the following information:
- policy_name
- action_space: you can only choose one of "joint_angle", "ee_pose", or "waypoint".
- evaluation_method: set as
docker. - Checkpoint URL (downloadable by organizers), e.g.
https://huggingface.co/Yinpei/perceptual-framesamp-modul - Docker image (registry path + tag), e.g.
<dockerhub_user>/my_cool_model_name:latest - Command to start the policy server, e.g.
uv run python -m challenge_interface.scripts.deploy --checkpoint-dir runs/ckpts/perceptual-framesamp-modul/79999. The organizers will rundeploy.pyto start your policy server, then run evaluation. - Other flags:
use_depth,use_camera_params(default:false)
An example JSON file can be found here.
After we receive your submitted JSON file, we will:
- Pull your docker image (based on the image name/tag you provided), for example:
docker pull yinpeidai/perceptual-framesamp-modul:latest- Download your checkpoint(s) (based on the URL you provided), for example:
git clone https://huggingface.co/YinpeiDai/perceptual-framesamp-modul runs/ckpts/perceptual-framesamp-modul- Run your container, for example:
docker run --rm -it --gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,video \
-v "$PWD/runs:/app/runs" \
-p 8001:8001 \
yinpeidai/perceptual-framesamp-modul:latestThen, inside the container, start the policy server based on the command you provided, for example:
uv run python -m challenge_interface.scripts.deploy --port 8001 --checkpoint-dir runs/ckpts/perceptual-framesamp-modul/79999- Run evaluation (phase 1), using the eval script from the RoboMME benchmark repo:
cd robomme_benchmark
uv run python -m challenge_interface.scripts.phase1_eval --port 8001 --action_space joint_angle --team_id 0000After determining the top 5–10 teams, the organizers will run phase 2 evaluation.