Template updates

π0.5 LIBERO

pi05-libero · policy template by Physical Intelligence · π0.5 for the LIBERO suites · Franka Panda. Each version below is fixed once published, newest first.

seq init pi05-libero gives the stable version, seq init pi05-libero@beta the beta, and seq init pi05-libero@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. v14beta

    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; beside the simulator, Pillow, which sequence-ai 0.34.19 and later bring.

    • policy.py declares gpu="L4", where v13 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 v13's.
    Use v14
    pi05-libero v14shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v14 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v14
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v14 my-policy
  2. v13stable

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

    Needs sequence-ai 0.34.17 or later; beside the simulator, Pillow, which sequence-ai 0.34.19 and later bring.

    • policy.py copies openpi's pyproject.toml, README.md, LICENSE, src/ and packages/openpi-client/ from third_party/openpi into the image and installs them, editable at /opt/openpi as before: change openpi there and deploy again, and your deployment runs your openpi. third_party/README.md lists what goes into the image.
    • Everything else comes from /seq/frozen (.template_files("pi05-libero", version=13)), with no index: the base nvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04 by digest, the system packages as .deb files, every Python package with its sha256 checked against requirements-policy.lock, and lerobot from its source. frozen.toml says what is frozen.
    • The Python packages are the 209 that v12's image holds (pins-policy.txt), torch 2.7.1 and JAX 0.5.3 among them, and openpi, its client and lerobot from their sources: the build installs nothing from PyPI or GitHub.
    • openpi comes without its two submodules, which the image never used: LIBERO, and ALOHA's own code and hardware files.
    • 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 v12.
    Use v13
    pi05-libero v13shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v13 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v13
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v13 my-policy

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

  3. v12

    The source the image builds from comes with the template: 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; beside the simulator, Pillow.

    • third_party/openpi/: https://github.com/Physical-Intelligence/openpi at commit 215abfb217dbac7d5f1273282331b9b1866c0479, with its submodule third_party/aloha (MIT). Left out, as third_party/README.md says: the LIBERO submodule (its assets include objects under non-commercial terms and with no license given) and ALOHA 2's hardware files (102 MB); this template uses neither.
    • 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 v11.
    Use v12
    pi05-libero v12shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v12 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v12
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v12 my-policy
  4. v11

    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; beside the simulator, Pillow.

    • 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 v10's.
    Use v11
    pi05-libero v11shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v11 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v11
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v11 my-policy
  5. v10

    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; beside the simulator, Pillow.

    • 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.
    • The README gains "Several copies on a worker".
    Use v10
    pi05-libero v10shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v10 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v10
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v10 my-policy
  6. v9

    The README says client.py needs Pillow beside the simulator, which sequence-ai does not bring: pip install sequence-ai pillow.

    Needs sequence-ai 0.31.0 or later; beside the simulator, Pillow.

    • client.py imports Pillow to rotate and resize the frames before they are sent, so with sequence-ai alone from client import preprocess fails with No module named 'PIL'. The README's "Use it" now says what to install.
    • README only: the code and the image are v8's.
    Use v9
    pi05-libero v9shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v9 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v9
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v9 my-policy
  7. v8

    The image installs openpi at one fixed commit and its dependencies as PyPI had them on 2026-10-03, so a rebuild on any day installs exactly the same packages.

    Needs sequence-ai 0.31.0 or later; beside the simulator, Pillow.

    • policy.py checks out openpi at 215abfb (openpi's main of 2026-08-24), installs uv 0.12.22, and resolves openpi's dependencies with --exclude-newer 2026-10-03T03:32:00Z.
    • Earlier versions build openpi's latest commit with whatever PyPI has that day: on 2026-10-09 that was pyarrow 26.0.0, which needs NumPy 2, beside openpi's NumPy 1.26.4, and the policy no longer loaded.
    • To take newer versions, move _OPENPI_COMMIT and _PYPI_AS_OF forward together.
    • The model, its weights and client.py are v7's.
    Use v8
    pi05-libero v8shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@v8 my-policy
    seq deploy my-policy/policy.py
    
    # or move a deployment made from this template to it
    seq policy upgrade my-policy --to v8
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v8 my-policy
  8. v7

    The same template as v6, published again without the notes v6's files carried for our own records: no batch wait of its own, cpu=1.25 and memory=12, and a README section on replan_steps.

    Needs sequence-ai 0.31.0 or later; beside the simulator, Pillow.

    • Every file is as in v6; v6's changes from v5, listed under v6, all ship here.
    Use v7
    pi05-libero v7shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@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
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v7 my-policy
  9. v6withdrawn

    The policy has no batch wait of its own and declares cpu=1.25 and memory=12; its README explains how many steps of each chunk to run, replan_steps.

    • @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. v5's 5 ms cut a round into small batches, each padded up to a compiled size. A robot's act never waits.
    • cpu=1.25 and memory=12 (GiB), where v5 declared 1 and 11: serving one robot a worker used 1.05 cores and 10.25 GiB, and 0.95 cores and 9.9 GiB at the new values (measured on the platform), so the price shown at deploy is the price billed.
    • The README gains "Steps per call": the model predicts 10 actions a call and the policy answers with the first replan_steps (default 5). On LIBERO-Spatial, 10 succeeded in 99.5% of 200 episodes and 5 in 97.5%, with half the policy calls (measured on the platform).
    • On a real arm at 20 Hz, 5 actions take 250 ms, less than a call's round trip, so the arm stops on every chunk; 10 let the next chunk arrive while it moves. seq policy params, connect(params=) and --param in an eval set it.

    Withdrawn on 2026-10-08: its files carried notes written for our own records. v7 is the same template without them.

  10. v5

    The policy declares max_gpus=1 and what a worker uses, cpu=1 and memory=11: a second robot waits for the first, and seq policy scale <name> --max-gpus N raises the cap without a redeploy.

    Needs sequence-ai 0.31.0 or later; beside the simulator, Pillow.

    • cpu=1 and memory=11 (GiB): a ready worker holds 9.9 GiB, and one robot keeps about one core busy (measured on the platform). CPU and memory are billed at the greater of request and use.
    • The README gains "Cards, CPU and memory": a worker holds one card, an L4, or an A100 (40 GB) when no L4 is free.
    • The template's folder no longer includes a tests/ folder.
    Use v5
    pi05-libero v5shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@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
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v5 my-policy
  11. v4

    The same template as v3, published again with a README that names none of our own deployments: acts that reach a worker together run as one forward pass, and a request's seed fixes its noise.

    Needs sequence-ai 0.29.0 or later; beside the simulator, Pillow.

    • Every file but the README is as in v3; v3's changes from v2, listed under v3, all ship here.
    • The README gives the same measured start times without naming the deployments they come from.
    Use v4
    pi05-libero v4shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@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
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v4 my-policy
  12. v3withdrawn

    Acts that reach a worker together run as one forward pass of up to 16, and a request's seed now fixes its noise, so its chunk is the one it would get alone.

    • @seq.batched(max_batch_size=16, wait_ms=5) batches an eval's environments, or concurrent requests on one connection, each with its own replan_steps. A robot on a connection of its own holds a worker of its own, so robots are not batched with each other.
    • A request that sends a seed gets noise drawn from it, so the same observation and seed give the same chunk; v2 ignored the seed.
    • A batch is padded to the next compiled size (1, 2, 4, 8 or 16), and the warmup compiles every size: on one L4 the first worker loaded in 266.5 s and was ready 366 s after the deploy (measured on the platform), and later workers load from the compile cache.
    • The compile cache is per card: the first A100 worker of a version compiles every size again. Keep gpu="L4" if that wait matters more than the fallback.

    Withdrawn on 2026-10-04: its README named deployments of our own. v4 is the same template with those names taken out.

  13. v2

    to_commands in client.py reads each step of a returned chunk as the plain list sequence-ai hands it; v1's failed with AttributeError on every chunk.

    Needs sequence-ai 0.29.0 or later; beside the simulator, Pillow.

    • v1's to_commands read step.values, which a returned step does not have.
    • policy.py is unchanged, so a deployment returns the same actions.
    Use v2
    pi05-libero v2shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@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
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v2 my-policy
  14. v1

    The first version: openpi's π0.5 fine-tuned on LIBERO, as a policy you deploy, with client.py for the simulator.

    Needs sequence-ai 0.29.0 or later; beside the simulator, Pillow.

    • policy.py serves openpi's pi05_libero checkpoint from the official template weights, on an L4 or an A100 (40 GB).
    • Each call returns the first replan_steps of the model's actions (5 by default, as openpi's LIBERO example runs them): 7-D end-effector deltas at 20 Hz, LIBERO's own action space, sent to env.step unchanged.
    • client.py prepares each observation as openpi's LIBERO example does: both frames rotated 180 degrees and resized with padding to 224x224, and the 8-D state of end-effector position, axis-angle and the two gripper fingers.
    Use v1
    pi05-libero v1shell
    # start a policy from this version, then deploy it
    seq init pi05-libero@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
    
    # on the robot's machine: this version's client.py and its README
    pip install -U sequence-ai
    seq init pi05-libero@v1 my-policy