Template updates

π0.5 RoboTwin

pi05-robotwin · policy template by Physical Intelligence · 14 joint targets for two Aloha-AgileX arms at 30 Hz, 50 at a time · L4. Each version below is fixed once published, newest first.

seq init pi05-robotwin gives the stable version, seq init pi05-robotwin@beta the beta, and seq init pi05-robotwin@v<N> any version below that is not withdrawn. A deployment made from this template names the version it runs in seq policy versions and on its page in the console; seq policy upgrade moves it to the newer stable one.

  1. v7beta

    A deployment of this version runs on one card type, the L4: a worker starts only on an L4, never on an A100.

    Needs sequence-ai 0.34.17 or later.

    • policy.py declares gpu="L4", where v6 listed ["L4", "A100-40GB"]: a deployment names one card type. To run on another card, name that one instead.
    • README.md says so where it spoke of the A100.
    • The image, its frozen files, the weights, the contract and the serving code are v6's.
    Use v7
    pi05-robotwin v7shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v7 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v7
  2. v6stable

    The image installs XPolicyLab's openpi from third_party/xpolicylab-pi05-openpi, the copy in your folder, and everything else only from this version's frozen files, which the platform keeps: v5's packages, the same on any day.

    Needs sequence-ai 0.34.17 or later.

    • policy.py copies XPolicyLab's openpi - its pyproject.toml, README.md, LICENSE, src/ and packages/openpi-client/ - from third_party/xpolicylab-pi05-openpi into the image and installs them, editable at /opt/xpolicylab/policy/Pi_05/openpi as before: change it there and deploy again, and your deployment runs your version.
    • Everything else comes from /seq/frozen (.template_files("pi05-robotwin", version=6)), with no index: the base nvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04 by digest, the system packages as .deb files, and every Python package with its sha256 checked against requirements-policy.lock. frozen.toml says what is frozen.
    • The Python packages are the 225 that v5's image holds (pins-policy.txt): the versions XPolicyLab's lockfile gives - torch 2.10.0, JAX 0.5.3 and typing-extensions 4.13.2 among them - and uv, which v5 took at its newest when its image was built, pinned at 0.13.0; openpi and its client come from this folder. The build installs nothing from PyPI or GitHub.
    • The image no longer clones the rest of XPolicyLab, which it never used.
    • third_party/xpolicylab-pi05-openpi/ holds what was third_party/openpi/: the folder is named for where it comes from, and upstream.toml says nothing inside policy/Pi_05/openpi is left out.
    • To add a package or change a version, add your own step after the template's (.uv_pip_install(...)); it installs from PyPI as any image does.
    • The weights, the contract and the serving code are as in v5.
    Use v6
    pi05-robotwin v6shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v6 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v6

    In the console, Deploy deploys this version: the console deploys the stable one.

  3. v5

    The source the image builds from comes with the template: XPolicyLab's Pi_05 openpi at the commit the image pins, in third_party/, with its licenses; LICENSE and NOTICE come with the template too.

    Needs sequence-ai 0.31.0 or later.

    • third_party/openpi/: policy/Pi_05/openpi of https://github.com/XPolicyLab/XPolicyLab at commit fa431ecd893ee706883e64fe5fe1464ec8cd928d, the part the image installs. The rest of XPolicyLab, which holds other policies under other licenses, some of them non-commercial, is left out.
    • LICENSE (Apache-2.0, for the template's own files) and NOTICE (the checkpoint's terms - Gemma's notice first - and where the code comes from) come with the template.
    • The image, its weights and what it installs are as in v4.
    Use v5
    pi05-robotwin v5shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v5 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v5
  4. v4

    The README says to declare cpu and memory for all the copies when a worker runs several copies of the model.

    Needs sequence-ai 0.31.0 or later.

    • Each copy is a process of its own, with its own host memory: two pi05-libero copies on one L4 used up to 20.4 GiB, where one copy uses about 10 (measured on the platform).
    • For two copies, declare cpu=2.5, memory=24. The price shown at deploy counts the CPU one robot uses, and a worker with a robot on every copy is billed at the greater of request and use.
    • README only: the code and the image are v3's.
    Use v4
    pi05-robotwin v4shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v4 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v4
  5. v3

    A worker that runs several copies of the model starts in about the time of one: the copies share one bf16 copy of the params and warm a lone request only.

    Needs sequence-ai 0.31.0 or later.

    • With @seq.concurrent(replicas_per_gpu=N) under @seq.policy, the first load leaves the params as bf16 (about 6.7 GB) in the deployment's compile cache, and every later load maps them from there instead of each copy restoring the checkpoint into its own memory.
    • On such a worker the warmup compiles a lone request only. Each copy compiles a batch size the first time a batch of that size comes (an eval's): about 5 s each on a B200, once an earlier worker has compiled it.
    • Eight pi05-libero copies on one B200 went from start to ready in 69-82 s, against 153-185 s before and 62 s for one copy alone (measured on the platform).
    • The shared copy is billed as storage, like the rest of the compile cache. A worker of one copy keeps none, warms every batch size and loads as before.
    Use v3
    pi05-robotwin v3shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v3 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v3
  6. v2

    The policy has no batch wait of its own: an eval's acts are gathered until they stop coming, where a 5 ms wait cut a round into small padded batches. It declares cpu=1.25 and memory=12.

    Needs sequence-ai 0.31.0 or later.

    • @seq.batched(max_batch_size=16) declares no wait: the platform gathers an eval's acts until none comes for 20 ms, 250 ms at most. v1's 5 ms cut a round into small batches, each padded up to a compiled size.
    • cpu=1.25 and memory=12 (GiB), where v1 declared 1 and 11. This is pi05-libero's model with a third camera to decode, and pi05-libero serving one robot used 1.05 cores and 10.25 GiB (measured on the platform), so the price shown at deploy is the price billed.
    Use v2
    pi05-robotwin v2shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v2 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v2
  7. v1

    The first version: the RoboTwin team's co-trained pi0.5 for the Aloha-AgileX as a policy, three cameras and the arms' 14 joint values in, 50 joint targets for both arms at 30 Hz out, built as RoboTwin's own eval server builds it.

    Needs sequence-ai 0.33.5 or later.

    • seq deploy policy.py deploys it on an L4, or an A100 40 GB when no L4 is free, as one worker (max_gpus=1) with cpu=1 and memory=11. The weights are the official template weights pi05-robotwin v1: the RoboTwin team's checkpoint and norm stats, with openpi's PaliGemma tokenizer.
    • Through the adapter robotwin-openpi (in the robotwin template) it takes the head and two wrist cameras at 320x240, the 14-D joint state and the instruction, and returns 50 of RoboTwin's joint targets, which RoboTwin's eval runs one after the other before it asks again (replan_steps).
    • The image installs openpi as XPolicyLab vendors it, at a pinned commit and from its lock file, and the model is built from the training config pi05_base_aloha_full_sim_arx-x5_seed_0 with the norm stats the checkpoint carries.
    • Its noise comes from the request's seed and the state it carries: new at every act, the same when an episode is replayed. --param policy.fresh_noise=true draws it unseeded, as openpi's server does.
    • Acts that reach a worker together run as one forward pass, up to 16; an eval's are gathered for up to 5 ms.
    • RoboTwin's leaderboard lists this checkpoint at 70.7% in the clean setting and 46.0% randomized, 100 episodes a task.
    Use v1
    pi05-robotwin v1shell
    # start a policy from this version, then deploy it
    seq init pi05-robotwin@v1 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v1