pi05-base-p300x2

pi-0.5 (lerobot/pi05_base) on two Tenstorrent Blackhole p300 boards via tt-nn, in two serve profiles: single-robot (53 ms per action chunk) and multi-robot (two chip pairs, 47 action chunks per second for four robots).

Runs on p300x2 — see the serve profiles below.

Packaged and published with tt-model-manager 0.1.0 (manifest schema 5.1).

Quickstart

tt-model pull  changh95/pi05-base-p300x2 --with-weights
tt-model serve changh95/pi05-base-p300x2

pull --with-weights fetches the image and the pinned lerobot/pi05_base weights. serve listens on port 20000 and is ready when it logs Application startup complete (a few minutes on first start).

Run with tt-cli

tt serve changh95/pi05-base-p300x2                          # single-robot (default)
tt serve changh95/pi05-base-p300x2 --profile multi-robot    # several robots share the box
printf '{"images":["%s","%s"],"prompt":"pick up the cube","state":[0.1,-0.2,0.3,0,0,0,0.5,-0.5]}' \
  "$(base64 -w0 media/sample_base.png)" "$(base64 -w0 media/sample_wrist.png)" > req.json
curl -s localhost:20000/predict -H 'Content-Type: application/json' -d @req.json
tt model stop changh95/pi05-base-p300x2

API

  • POST /predict
    • images: 1-2 base64 PNG/JPEG, base camera then wrist camera.
    • prompt (task text) or tokens (≤224 PaliGemma ids).
    • optional state (≤32 floats in [-1, 1]) and seed.
  • Response: actions (50 × 32, normalised), batched_as, timing_ms.
  • GET /health, GET /info.

single-robot profile (default)

All four chips work on every request. The SigLIP + Gemma-2B prefix is tensor-parallel over the 4 chips; the Gemma-300M action expert is replicated. One Metal trace, batch 1. Concurrent requests run one after another.

Latency vs batch (in process, traced; 2 × 224² images, 224 tokens, 10 denoising steps):

batch prefix (4 chips) action expert, 10 steps (4 chips) total per request
1 18.4 ms 33.7 ms 50.5 ms 50.5 ms
2 26.7 ms 39.8 ms 64.9 ms 32.4 ms
4 50.9 ms 65.6 ms 117.3 ms 29.3 ms

The profile serves batch 1. Rows 2 and 4 are the same layout with PI05_BATCH_SIZES=1,2,4.

Accuracy and speed:

metric value
PCC vs the fp32 torch reference, 2 observations 0.9986 / 0.9988
PCC, 16 random observations min 0.93, mean 0.98, median 0.99
HTTP, 1 client 53 ms per chunk
HTTP, 2 / 4 / 8 clients 19.5 req/s at 102 / 204 / 408 ms per chunk
same code on one p300 chip 84 ms per chunk
determinism repeats bit-exact

multi-robot profile

The four chips form two independent pairs. Each pair runs the whole model: the prefix tensor-parallel over its 2 chips, the action expert replicated on both. A request goes to the pair with fewer requests in flight; requests arriving within 4 ms at a busy pair share a batch of 2. Sized for up to 4 robots.

Latency vs batch, one pair (in process, traced):

requests on the pair prefix (2 chips) action expert, 10 steps (2 chips) total
1 24.6 ms 33.7 ms 57.2 ms
2 38.0 ms 42.5 ms 78.1 ms

Robots vs latency and throughput (HTTP, closed loop, median per request):

robots per pair latency throughput
1 1 63 ms 15.8 req/s
2 1 + 1 64 ms 31.0 req/s
3 2 + 1 81 ms 37.5 req/s
4 2 + 2 84 ms 47.3 req/s
8 queueing 158 ms 49.2 req/s

Accuracy and speed:

metric value
PCC vs the fp32 torch reference, 2 observations 0.9955 / 0.9879 (2-chip prefix partials)
two pairs concurrently, 1 / 2 requests each (in process) 57.9 / 82.0 ms wall
determinism repeats bit-exact; both pairs give identical outputs

Beyond four robots, PI05_DP_GROUP=1 runs four independent single chips instead of two pairs. A chip alone takes 84 ms per chunk, but the expert is no longer duplicated, so the ceiling is higher:

robots two pairs (this profile) four single chips
4 85 ms, 47.1 req/s 94 ms, 42.3 req/s
6 119 ms, 45.4 req/s 95 ms, 47.4 req/s
8 160 ms, 48.5 req/s 146 ms, 51.3 req/s
16 320 ms, 48.8 req/s 273 ms, 56.9 req/s

Response

{"actions": [[-0.0203, -0.0197, -0.0349, ...], ...], "action_horizon": 50, "action_dim": 32, "normalized": true,
 "denoising_steps": 10, "num_tokens": 142, "batched_as": 1, "timing_ms": {"preprocess": 1.1, "inference": 50.5, "total": 51.6}}

actions are in lerobot's normalised QUANTILES space, zero-padded to 32 dims. Denormalise with (a+1)*(q99-q01)/2+q01 from your dataset and slice to your action dim.

Caveats

  • Fixed inputs: 1-2 images at 224 × 224, ≤224 prompt tokens, ≤32 state floats, 10 steps.
  • Needs all four chips of a 2× p300 box. One profile at a time. multi-robot alone costs 63 ms per chunk (2-chip prefix); beyond 4 robots requests queue.
  • The tokenizer google/paligemma-3b-pt-224 is gated: accept the Gemma terms and hf auth login, or send tokens.
  • Base checkpoint, normalised actions. No closed-loop benchmark was run.

Licensing

Links

lerobot/pi05_base · arXiv:2504.16054 · Physical-Intelligence/openpi · single chip: changh95/pi05-base-p150 · design notes: code/models/experimental/pi0_5/README.md

Serve profiles

Pick one with --profile: single-robot (default) or multi-robot. Both run on p300x2; see the table above.

Provenance

The exact sources the image was built from — code/ in this repo is byte-identical to the model code inside the image:

component built from
tt-metal 975015c2f03bb818eaee2422c3845fba381eaf8c
code/ digest c9c924f989682aea (sha256, first 16 hex digits)
built 2026-09-18T21:21:27+00:00 by tt-model 0.1.0
Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading

Model tree for changh95/pi05-base-p300x2

Finetuned
(781)
this model

Paper for changh95/pi05-base-p300x2