Contact us

Proprio · physical AI inference

The policy you validated. Bit for bit, faster.

Proprio runs an unmodified vision-language-action policy faster and proves, tick by tick, that the actions it produces are identical to the policy's own eager execution. If they are not identical, it refuses to deploy. Every run ships a Bitwise Certificate.

Technical preview · LeRobot checkpoints, unmodified · RTX 4090 · every figure measured

Eager (LeRobot) 246 ms · GPU busy 17%
Proprio exact 38.7 ms · GPU busy 83% · identical
torch.compile max-autotune 26.6 ms · actions differ by 0.068

The same 450M-parameter policy, the same inputs, the same noise. The compiler is faster and changes the robot's actions; Proprio is 6.4× faster and changes nothing.

6.4×SmolVLA, 246 → 38.7 ms per tick, 100 of 100 ticks bit-identical to eager measured
2.7×GR00T N1.7 (3B), 170 → 63.7 ms, 32 of 32 identical; pi0.5 2.7×, 100 of 100 measured
14.8×per robot with 16 SmolVLA robots on one GPU, every row identical to that robot's own single-robot run measured
0action error on every Proprio exact row; compilers, TF32 and cuDNN autotuning drift 0.01 to 0.3 on the same inputs measured

How

Faster, then proven identical.

The usual ways to make a policy faster, compilers, lower precision and autotuning, change its arithmetic, so the robot's actions change too. Proprio makes the same policy faster without changing a single action, and proves it on every run.

01 / LOAD

The unmodified policy

Proprio loads the checkpoint as LeRobot does, with no source edits, and prepares a faster run of the same policy.

02 / VERIFY

Bit for bit, on held-out inputs

Proprio's actions are compared with eager actions on held-out inputs, with fixed noise and seeds. Not close: identical, every byte of every action chunk.

03 / GATE

Refuse what is not identical

A tick that cannot be proven identical is not deployed; Proprio falls back to the original path and says why. A non-identical tier is reported with its measured error, never as "exact".

04 / CERTIFY

A Bitwise Certificate per run

Actions, identity count, error bounds, latency, device, driver, clocks, power state, seeds and a digest, signed. The document a safety review or a customer can check with a public key.

Single robot

Three policy families, three exact certificates.

One robot, one GPU, the policy as its authors shipped it. Latency is the median wall time of a full control tick including the host-side pre- and post-processing; identity is counted per tick against eager with the same inputs and noise.

PolicyParametersEager p50Proprio p50SpeedupBit-identical ticksEvidence
SmolVLA450M, fp32 under autocast241–246 ms36–39 ms6.2–6.5×100 / 100; identical across 6 fresh processes and 3 clock statesmeasured
pi0.53.3B, bf16266 ms98 ms2.7×100 / 100measured
GR00T N1.73B, bf16, whole tick170–178 ms64–66 ms2.7×32 / 32measured

measured RTX 4090, torch 2.11, LeRobot 0.6 checkpoints (lerobot/smolvla_base, lerobot/pi05_base, nvidia/GR00T-N1.7-3B). Eager is LeRobot's own inference path with no changes. Ranges span several certificate runs on different days; identity never varied.

Speed versus drift

Every free speedup moves the robot.

The accelerations teams reach for first, measured on the same 100 ticks with the same inputs and noise, next to the exact tier. Action error is the largest change in any normalised action value of the chunk; 0.07 to 0.1 is the size of the step between two consecutive actions.

PolicyModep50SpeedupRows identicalMax action errorWarm-up
SmolVLAeager (reference)246.1 ms1×reference3.1 s
SmolVLAProprio exact38.7 ms6.36×100%02.5 s
SmolVLAtorch.compile, cudagraphs49.5 ms4.97×0%0.08358.0 s
SmolVLAtorch.compile, max-autotune26.6 ms9.24×0%0.06836.2 s
SmolVLATF32 matmul239.7 ms1.03×0%0.0123.1 s
SmolVLAcuDNN benchmark242.5 ms1.01×0%0.1003.0 s
pi0.5 fp32eager (reference)330.5 ms1×reference3.6 s
pi0.5 fp32Proprio exact209.7 ms1.58×100%03.5 s
pi0.5 fp32torch.compile, max-autotune173.4 ms1.91×0%1.1e-05560.8 s
pi0.5 fp32TF32 matmul280.9 ms1.18×0%0.00713.1 s
pi0.5 fp32cuDNN benchmark330.3 ms1.00×100%04.3 s
pi0.5 fp32bf16 weights272.2 ms1.21×0%0.3053.4 s

measured 100 ticks, 4 mixed instructions, fixed noise. On SmolVLA, cuDNN autotuning alone buys nothing and still moves actions by 0.1. The fastest row, max-autotune at 9.2×, drifts 0.068 and needs 36 s of warm-up against 2.5 s. A drift of any size means the deployed policy is not the one that was validated.

Many robots per tick

Batch the fleet, keep every robot's answer.

Serving several robots or simulated environments per tick is the utilisation lever, but stock GPU kernels change their arithmetic with the batch size, so row i of a batched result is not what robot i gets alone. Proprio offers two tiers and certifies each row against that robot's own single-robot run.

EXACT TIER

Identical to the original policy

Every row is bit-identical to the original eager policy run for that robot alone. 12.5× per robot on SmolVLA at 16 robots.

INVARIANT TIER

Identical to its own single-robot run

Every row is bit-identical to the tier's single-robot run; its measured difference to stock eager is declared on the certificate. 14.8× per robot on SmolVLA.

UTILISATION

96% GPU busy at 16 robots

One eager SmolVLA process keeps the GPU 17% busy; a single exact run 83%; the batched tick 96% in both tiers (Nsight, RTX 4090). 55 to 67 robots per second on one card.

PolicyRobots / tickTierRows identicalEager, one robotProprio, per robotSpeedupDeclared diff vs eager
SmolVLA16exact64 / 64240.5 ms19.3 ms12.5×0
SmolVLA16invariant64 / 64227.2 ms15.3 ms14.8×0.090
pi0.5 fp328exact64 / 64314.9 ms174.7 ms1.8×0
pi0.5 fp328invariant64 / 64314.2 ms109.6 ms2.9×0.041
GR00T N1.78invariant64 / 64179.1 ms119.9 ms1.5×0.209
GR00T N1.74invariant32 / 32175.5 ms149.1 ms1.2×0.209
GR00T N1.74exact32 / 32176.7 ms237.1 ms0.75×0

measured Rows compared against each robot's own single-robot run with its own observation, noise and seed. Both tiers are correct floating-point implementations; the certificate declares the invariant tier's measured difference to eager and names which implementation was validated. A 3B-parameter model is already compute-bound at one robot on this GPU, so GR00T's headline stays the 64 ms exact single-robot tick; the exact tier's per-robot execution costs more than the batch saves there.

Bitwise Certificate

What every number here stands on.

Each table row above comes from one certificate, a JSON document the engine writes after a run. The hosted certification service signs it with an Ed25519 key; anyone can verify a signed certificate with the public key.

RESULT

Identity and error

Per-tick eager and engine actions, the count of bit-identical ticks or rows, max and mean absolute error, the reference used (original eager or same-tier single-robot) and, for a non-exact tier, the declared difference to eager.

TIMING

Latency and split

p50 and p99 of both paths, the host pre- and post-processing share, per-robot cost and batch size for rollout runs.

ENVIRONMENT

What it ran on

GPU, driver, torch build, clocks, power state and active throttle reasons at the time of the run, thread count, seeds and noise seed, weight-precision manifest, licence tier, digest and signature.

Status

Where Proprio stands today.

In plain language, for teams deciding whether to try it.

done

Exact single-robot tick

SmolVLA, pi0.5 and GR00T N1.7 certified bit-identical on an RTX 4090, 2.7 to 6.5× faster than LeRobot eager, including the host side of the tick.

done

Exact multi-robot rollout

Two certified tiers at 4 to 16 robots per GPU on all three policy families, 96% GPU busy on SmolVLA.

now

Design partners

Evaluation licences for teams running LeRobot policies on NVIDIA GPUs: a certificate on your checkpoint and your inputs within a day of access.

next

Jetson and other GPUs

Jetson Thor and data-centre cards; the method does not depend on the card, only the speedups do.

Your policy

Send a checkpoint, get a certificate.

Tell us the policy, the GPU and the control rate you need. We return a Bitwise Certificate on your checkpoint and your observations: the speedup, and the proof that nothing else changed.

hello@zenedgex.in