
NVIDIA released ASPIRE v1.0 in October: it's a coding agent that writes robot control programs, with 99% success on common benchmark tasks.
I wanted to know if it was a hype project or a real research direction. After doing some research, I counted 26 projects outside NVIDIA in the same space. A frozen LLM writes robot code, runs it, fixes it and keeps what works. It's called agentic robotics, and CoRL 2026 gave it a workshop.
So I set ASPIRE up on Anyscale.

ASPIRE's example program on 1xL4, success in 27 s.
ASPIRE learns by rewriting code, not weights
Its README calls "training" skill refinement by an AI agent, instead of gradient descent.
An agent writes a program and debugs it in simulations (using practice envs, then scoring on test envs). It iteratively adds fixes and remembers them as skills for the next task.

ASPIRE splits the robot from its services
The program talks to two parts.
One environment interface, in Python, with LIBERO, Robosuite, BEHAVIOR-1K or two real YAM arms behind it.
Three perception and planning services, each an HTTP server with its own dependencies:
- SAM3 finds objects from a text prompt. GPU.
- PyRoki solves inverse kinematics. CPU.
- cuRobo plans collision-free paths. GPU.

Many sims share one copy of each service, "rather than one model loaded per simulator process" (their code).
I pitched the same arch for scaling sims with Ray
On 21 Oct I spoke at Encord's Long Horizon: "Why Sim Platform Shouldn't Be a Batch Job."
A common setup today, gives each scenario its own batch job and model copy. The model works 15 ms of each 1 s tick. Its GPU sits 98% idle.

My fix: sims in one pool, robot policies in another.

Same split. Arms instead of cars.
Ray Serve can run that split on fewer GPUs
ASPIRE runs its services by hand on one machine.

More out of each GPU
- Batching: GPU services take one call at a time.
@serve.batchruns the queue as one pass. cuRobo 0.8 plans in batches. - Fractional GPUs: SAM3 and cuRobo used 3.8 GB of my L4's 24 GB. Serve packs them beside the sims.

Less to run by hand
- Composition:
move_to_posecalls PyRoki, then cuRobo. In one Serve app that's one call, and each step scales alone. - Compaction: copies follow the calls, to zero between runs. Anyscale's replica compaction packs the rest onto fewer nodes.
- Restarts: Serve replaces a dead copy. ASPIRE's supervisor stops all three.


I'm porting pieces of ASPIRE to Ray for my own curiosity and experiments.
Next: more experiments on less compute
ASPIRE's multi-GPU setup gives each GPU service its own card on a 4-GPU L40 machine.
My goal: more sims and service copies, on fewer GPUs.
First I'll measure how many sims one service copy can feed.
ASPIRE learns by testing code in sims. More sims per GPU means faster learning. Will share improvements in a later post.
ASPIRE is by Runyu Lu, Yubo Wu, Ethan Kou and colleagues at NVIDIA GEAR (paper).