A FASTER PATH TO EMBODIED INTELLIGENCE

Robot learning,
at a different pace.

Supervised fine-tuning and reinforcement learning
for robot foundation models. Less waiting. More learning.

OBSERVE. LEARN. ACT.Robot learning, in motion.
From observation to actionImages and an instruction flow into the SomaSpeed training engine. A robot arm picks up a block and places it at a marked target. A returning experience stream illustrates reinforcement learning. This is a conceptual illustration. camera observation “place the block” somaspeed SFT + RL · shared training engine 01 / OBSERVATION02 / LEARNING03 / ACTION From observation to actionImages and an instruction flow into the SomaSpeed training engine. A robot arm picks up a block and places it at a marked target. A returning experience stream illustrates reinforcement learning. This is a conceptual illustration. camera observation “place the block” somaspeed SFT + RL · shared training engine 01 / OBSERVATION02 / LEARNING03 / ACTION
Demonstrations → SFT   /   Experience → RLAnimated conceptual illustration
ONE TRAINER, THREE FOUNDATIONS
MolmoAct2GR00T N1.7π0.5

01 / PERFORMANCE

Results

More training samples, every second.
Supervised fine-tuning and reinforcement learning,
with GPU scaling across all three models.

SUPERVISED FINE-TUNING / TUNED THROUGHPUTLIBERO Spatial · 8 GPUs · BF16
TRAINING THROUGHPUT

MolmoAct2

Inside the benchmark Configurations & measurement
Configuration of the selected benchmark
ConfigurationNativeSomaSpeed
ParallelismLeRobot DDPHSDP · 4 replicas × 2 shards
Batch per GPU3224
Global batch256192
Activation checkpointingFullNone
OptimizerUpstream AdamWDense fused AdamW

MolmoAct2 uses eight flow timesteps. SomaSpeed moves preprocessing to data-loader workers.

How the numbers are measured

Each native → SomaSpeed pair ran on the same node and GPUs, with a 7,080-second budget per run including setup. Steady-state throughput is total samples divided by the sum of the slowest-rank step times after five warmup updates.

Batches are tuned separately. GPU interconnects differ across model comparisons. These are throughput measurements; convergence and robot task success are not evaluated here.

Tuned configurations, shared hardware within each pair. Batch sizes differ; speedup describes throughput, not time to convergence.

SUPERVISED FINE-TUNING / GPU SCALING

Supervised fine-tuning scaling

SomaSpeed across 1, 2, and 4 GPUs, with a fixed batch per GPU.

MolmoAct23.69×4-GPU throughput / 1-GPU throughput
010020030040040.081 GPU75.562 GPUs147.974 GPUs

24 samples / GPU / batch · 92.3% efficiency at 4 GPUs

GR00T N1.73.29×4-GPU throughput / 1-GPU throughput
0100200300400115.441 GPU221.952 GPUs380.114 GPUs

80 samples / GPU / batch · 82.3% efficiency at 4 GPUs

π0.53.54×4-GPU throughput / 1-GPU throughput
010020030040043.681 GPU79.922 GPUs154.764 GPUs

8 samples / GPU / batch · 88.6% efficiency at 4 GPUs

Samples / second · GPU counts evenly spaced · same vertical scale across models

Measurements & data
SomaSpeed throughput (samples / second)
Model1 GPU2 GPUs4 GPUsBatch / GPU
MolmoAct240.0875.56147.9724
GR00T N1.7115.44221.95380.1180
π0.543.6879.92154.768

One trial per setting on one node, with approximately 480 seconds of measured training. The global batch grows with GPU count. Efficiency is throughput divided by GPU count × the model’s 1-GPU throughput. These are separate runs from the tuned 8-GPU benchmark above.

REINFORCEMENT LEARNING / LIBERO SPATIAL

Reinforcement learning throughput

New observations per second with Flow-SDE PPO on 4 GPUs.

2 seeds per model
RL THROUGHPUT

MolmoAct2

Inside the benchmark Measurement & individual seeds
Individual seed measurements for the selected RL benchmark, in new observations per second
SeedBaselineSomaSpeed
12340.944.02
56781.034.42

How the numbers are measured

Matched baseline and SomaSpeed runs on the same allocation for each model, using seeds 1234 and 5678 in alternating run order. Each run has eight updates; the first two are excluded. Throughput pools measured observations and wall time across both seeds, includes learner waits and foreground snapshots, and counts each observation once.

Both modes use four PPO epochs, 12 LIBERO Spatial environments, four denoising steps, and BF16 compute. These short runs measure runtime throughput, not convergence or task success.

MolmoAct2 had zero policy/value objectives in these runs, while still executing PPO forward, backward, and optimizer work.

02 / METHOD

Method

SomaSpeed provides a shared training system for MolmoAct2, GR00T N1.7, and π0.5. Model adapters handle each model’s checkpoints, input preprocessing, action representation, supervised loss, and learning-rate schedule. These model-specific pieces connect to the same machinery for distributed execution, attention, and optimizer updates.

Supervised fine-tuning learns from recorded demonstrations. Reinforcement learning collects experience in an environment and uses rewards to update the policy. In the expert-training configuration shown here, the pretrained vision-language backbone stays frozen while the action expert learns. SomaSpeed organizes computation around that division: distribute the work that needs memory, reuse context that stays fixed, and coordinate the operations that repeat at every update.

MolmoAct2GR00T N1.7π0.5
Model adaptersPreserve the model’s recipe

Checkpoint loading · preprocessing · model loss · learning-rate schedule

Shared training runtimeDistribute work · reuse context · fuse updates
SFT

Demonstrations → action loss → model update

RL

Rollouts → PPO update → refreshed policy → rollouts

01

Distributed training

Training requires memory for model weights, gradients, and the optimizer’s running estimates. PyTorch FSDP2 partitions this state across GPUs. Each GPU stores its own shard, gathers the weights needed to compute a model block, and receives the corresponding gradient shard after backward. The optimizer then updates the locally owned weights and state. This makes room for models and batches that would otherwise consume too much memory on one GPU.

Hybrid sharding, or HSDP, adds data parallelism to that arrangement. A group of GPUs jointly holds one copy of the model; several such groups process different batches. In the diagram, GPUs 1 and 2 form one replica and GPUs 3 and 4 form another. Matching shards synchronize their gradients before the update, so both replicas learn from the combined data.

Tensor parallelism divides computation within a layer, such as splitting a projection matrix and combining its partial outputs. Pipeline parallelism assigns successive model blocks to different GPUs and passes activations and gradients between their owners. SomaSpeed’s pipeline stages execute synchronously in the model’s original call order. These strategies can be combined, with the choice of layout balancing memory capacity and communication cost.

GPU placement and communication
Two batches, two replicas, two shards per replicaFSDP2 + HSDP · illustrative 4-GPU layout
DATA REPLICA 1Batch A
GPU 1Shard 1 / 2
W₁G₁M₁
GPU 2Shard 2 / 2
W₂G₂M₂
Gather weights for compute
Return gradients to their owning shards
DATA REPLICA 2Batch B
GPU 3Shard 1 / 2
W₁G₁M₁
GPU 4Shard 2 / 2
W₂G₂M₂
Gather weights for compute
Return gradients to their owning shards
Synchronize gradients between matching shardsGPU 1 ↔ GPU 3 · GPU 2 ↔ GPU 4
ThenEach GPU updates its local weight shard and optimizer state
W · weightsG · gradientsM · optimizer moments
02

Frozen context and structured attention

A frozen backbone still performs useful computation: it turns camera images and language into the context needed to choose an action. Its weights stay fixed during expert training. The action expert uses that context together with robot state and noisy action tokens, and learns to predict the model’s action output. Backward therefore needs gradients through the trainable action paths, while the frozen backbone can remain outside the update.

Attention is the connection between the action computation and its context. Queries describe what the action module needs to read, keys identify context entries, and values carry their information. SomaSpeed computes attention in tiles, reading the relevant keys and values as it goes. This avoids storing a full attention-score matrix and allows the kernel to skip gradient work for inputs that are frozen.

The exact structure depends on the model. MolmoAct2 can share context across multiple sampled flow timesteps without making a repeated copy of its keys and values. GR00T’s action head cross-attends to frozen backbone features; projections inside the trainable head still receive gradients. π0.5 reads frozen prefix keys and values separately from the trainable action stream. The model tabs show these distinctions rather than treating every attention path as identical.

Action-expert attention
FROZEN / NO WEIGHT UPDATES
ImagesLanguage
Vision-language prefixEncode the observation and instruction
Prefix keys + valuesRead as a separate attention stream
read context →Frozen backbone
receives no gradients
TRAINABLE / ACTION EXPERT
Robot stateNoisy actions + timestep
Action queries, keys + valuesProject the trainable action tokens
Structured attention
Frozen prefix K/VTrainable action K/V
Stream tiles → combine attention → action features
Action prediction→Model loss
Backward updates trainable paths
π0.5: prefix and action attention

Action queries attend to both frozen prefix and trainable action keys/values. Backward reads both streams for action-query gradients, but computes key/value gradients only for the action stream. The full score matrix and a concatenated K/V buffer are never stored.

03

Fused optimizer updates

After backward, each trainable tensor has a gradient. The training system must normalize those gradients for the effective batch, measure their overall magnitude, apply gradient clipping, and update AdamW’s weights and running moments. These operations repeatedly touch the same data. Performing them separately for many small tensors adds GPU launches and memory traffic between learning steps.

SomaSpeed batches that work across tensors using shared Triton kernels. It first computes the statistics needed for one global clipping decision, accounting for distributed ownership so that each gradient shard contributes once. The final update reads the original gradients and applies normalization, clipping, and AdamW together as it updates the weights and moments. Gradient buffers remain unchanged, and parameter groups and learning-rate schedules retain their configured behavior. Frozen parameters do not enter this optimizer path.

Gradient normalization and AdamW updateShared Triton kernels
INPUT

Trainable gradients

Tensor A Tensor B Tensor C

Read original gradient buffers

01 / MEASURE

Normalize & reduce

All gradient tiles
↓
One global norm

Account for accumulation
and distributed shards

02 / COORDINATE

Choose the clip factor

c × every gradient

One global clipping factor
Per-group update settings

03 / UPDATE

Fused AdamW

Weights θMoments m, v

Apply normalization + clipping
as weights and moments update

The update rereads the original gradientsGradient buffers stay unchanged · frozen weights are excluded
04

Pipelined reinforcement learning

The RL workflow uses Flow-SDE PPO. Rollout workers run the robot policy in LIBERO environments, sampling a denoising trajectory to produce an action chunk. A value head estimates future reward. The workers record the sampled trajectory, rewards, values, old log probabilities, and policy version, giving the learner the information needed to replay experience and evaluate the PPO objective.

PPO uses the same rollout for several training epochs. The frozen backbone would produce the same features for that recorded observation on every replay. SomaSpeed caches those features during collection and passes them with the rollout, so the learner can train the policy and value heads without rerunning the backbone. New observations are encoded as they arrive; the reuse applies to the recorded context associated with a rollout.

Collection and learning use separate GPU roles and proceed concurrently. Independent environments feed batched policy inference, and a bounded queue passes compatible experience to the learner. Updated policy and value heads return to rollout workers asynchronously. The frozen backbone stays in place, while each worker stages a coherent head snapshot and switches versions at a rollout boundary. Tracking the policy version and limiting lag keeps experience from becoming too stale for the learner.

For compatible learner executions, CUDA graphs replay repeated forward and backward work with less launch overhead. The learner can also use distributed model layouts when more memory is needed. The diagram distinguishes the environment loop, the cached rollout packet, the PPO update, and the return of updated heads; each connection carries a different part of the learning process.

Rollouts, learner replay, and policy updatesAll three models · single node
ROLLOUT GPUs / COLLECT EXPERIENCE
Independent LIBERO environmentsObservations + rewards
observations ↓↑ action chunks
BATCHED POLICY INFERENCE
Frozen backbonePolicy + value heads

Encode context · sample actions · estimate values

BOUNDED EXPERIENCE QUEUE
Rollout packetObservations + sampled actionsRewards + old log probabilitiesValues + policy versionCached frozen features
Compatible minibatches
LEARNER GPUs / UPDATE HEADS
REPLAY CACHED CONTEXTPolicy + value headsMultiple PPO epochs

Advantages + clipped PPO loss
Backward → fused optimizer

Coherent head snapshotOnly trainable state is published
Asynchronous head updates return to rollout workersStage in the background · swap at rollout boundaries · bound policy lag
01Reuse frozen context

Skip backbone recomputation during learner replay.

02Overlap collection + learning

Independent environments and batched inference feed the learner.

03Replay repeated GPU work

CUDA graphs reduce launch overhead for compatible replay shapes.

05

Memory and execution controls

The runtime exposes several ways to trade memory for computation or communication. Activation checkpointing saves fewer intermediate activations and recomputes them during backward. Retaining frozen weights in their compute representation can avoid repeated gathers. Optional CPU storage for frozen master weights reduces GPU storage while keeping the frozen compute weights available on the device.

Frozen vision blocks can process independent image segments within a configured memory budget, without splitting tokens that must attend to one another. Compact saved views retain only the features needed later instead of holding oversized backing allocations alive. Indexed projections read the appropriate source weights directly, avoiding a batch-expanded copy of those weights.

Data preparation and execution have their own controls. Preprocessing in data-loader workers prepares samples before the training loop needs them, and GPU prefetch can move the next batch while the current batch computes. Optional block compilation and graph replay reduce repeated execution overhead for supported workloads. These controls are configured independently, so each model can use the combination that fits its memory and execution requirements.

03 / THE ROAD AHEAD

What’s next

Three robot foundations are a starting point.
The direction is a wider, faster path for embodied AI.

Follow the project
01

A broader model family

Extend the adapter approach to more robot foundation models.

02

A wider performance picture

Extend the measurements to more GPU architectures, larger meshes, and longer training runs.

03

Beyond samples per second

Expand evaluation toward convergence and downstream robot task success.