π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.
-
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.pydeclaresgpu="L4", where v13 listed["L4", "A100-40GB"]: a deployment names one card type. To run on another card, name that one instead.README.mdsays 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
# 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
-
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.pycopies openpi'spyproject.toml,README.md,LICENSE,src/andpackages/openpi-client/fromthird_party/openpiinto the image and installs them, editable at/opt/openpias before: change openpi there and deploy again, and your deployment runs your openpi.third_party/README.mdlists what goes into the image.- Everything else comes from
/seq/frozen(.template_files("pi05-libero", version=13)), with no index: the basenvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04by digest, the system packages as.debfiles, every Python package with its sha256 checked againstrequirements-policy.lock, and lerobot from its source.frozen.tomlsays 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
# 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.
-
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 commit215abfb217dbac7d5f1273282331b9b1866c0479, with its submodulethird_party/aloha(MIT). Left out, asthird_party/README.mdsays: 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) andNOTICE(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
# 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
-
The README says to declare
cpuandmemoryfor 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
# 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
-
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
# 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
- With
-
The README says
client.pyneeds 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.pyimports Pillow to rotate and resize the frames before they are sent, so with sequence-ai alonefrom client import preprocessfails withNo 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
# 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
-
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.pychecks out openpi at215abfb(openpi's main of 2026-08-24), installsuv0.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_COMMITand_PYPI_AS_OFforward together. - The model, its weights and
client.pyare v7's.
Use v8
# 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
-
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.25andmemory=12, and a README section onreplan_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
# 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
-
v6withdrawn
The policy has no batch wait of its own and declares
cpu=1.25andmemory=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.25andmemory=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--paramin 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.
-
The policy declares
max_gpus=1and what a worker uses,cpu=1andmemory=11: a second robot waits for the first, andseq policy scale <name> --max-gpus Nraises the cap without a redeploy.Needs sequence-ai 0.31.0 or later; beside the simulator, Pillow.
cpu=1andmemory=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
# 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
-
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
# 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
-
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 ownreplan_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.
-
to_commandsinclient.pyreads each step of a returned chunk as the plain list sequence-ai hands it; v1's failed withAttributeErroron every chunk.Needs sequence-ai 0.29.0 or later; beside the simulator, Pillow.
- v1's
to_commandsreadstep.values, which a returned step does not have. policy.pyis unchanged, so a deployment returns the same actions.
Use v2
# 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
- v1's
-
The first version: openpi's π0.5 fine-tuned on LIBERO, as a policy you deploy, with
client.pyfor the simulator.Needs sequence-ai 0.29.0 or later; beside the simulator, Pillow.
policy.pyserves openpi's pi05_libero checkpoint from the official template weights, on an L4 or an A100 (40 GB).- Each call returns the first
replan_stepsof 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 toenv.stepunchanged. client.pyprepares 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
# 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