Short answer: no — but nothing went wrong. The run completed all 20,000 steps with a clean, monotone curve and finished at loss 0.138. It was still improving when the step budget ran out. Here is the evidence, and the two things this curve cannot tell you.
Over the last 5,000 steps the mean loss still fell 13.2%. A converged run is flat there.
Separately, eval_freq was None, so every number on this page is
training loss: it measures fit to the recorded demonstrations, not whether the
policy generalises. 0.138 is not evidence that the policy learned the task.
Log scale, because the run spans two orders of magnitude. Monotone, no divergence, no oscillation. The ten ticks under the axis are the checkpoint saves — filled where the weights still exist, hollow where they were deleted.
Log scale flatters the tail of every loss curve. Zoomed in and linear, the trend is still clearly downward — the dashed line is a least-squares fit over these 50 points, sloping −0.0094 per 1,000 steps. That is what "cut short" looks like.
ACT's loss is L1 action error plus a KL term. L1 is the one that matters for behaviour;
it is also still descending. KLD collapsed to 0.004 despite kl_weight = 10.0,
which means the CVAE latent is effectively unused.
save_freq = 2000 wrote a checkpoint every 2,000 steps and all ten completed.
Eight were then deleted from the Jetson under disk pressure and had never been uploaded.
The two that survive do so because someone pushed them to the Hub.
| Step | Loss | L1 | KLD | Grad norm | Epoch | Weights | Where |
|---|
The plan had been to test 8k / 12k / 16k / 20k on hardware. Those four are gone. What remains — 4,000 vs 20,000 — is still a usable contrast: step 4,000 is visibly undertrained (loss 1.178, 0.41 epochs). If both behave the same on the real arm, the bottleneck is not training length.
eval_freq = None. Nothing here measures overfitting. The only generalisation
evidence in the project comes from the sibling SmolVLA run, which was held out a cup
position: unseen 0.2300 vs trained 0.2348, a ratio of 0.98×. That is still
offline replay of recorded observations, not a closed-loop rollout.
Effective batch size was 2 on 8 GB of unified memory. 20,000 steps moved 40,000 samples through a 19,453-frame dataset. ACT is normally trained far longer; the curve's shape is consistent with a run that stopped early rather than one that finished.
KLD fell from 1.122 to 0.004 against kl_weight = 10.0. The model has
degenerated to deterministic chunk regression. Not unusual for ACT on a small
single-task set, but do not treat the latent as carrying anything.
As of 2026-08-21 neither checkpoint has driven the physical arm. The policy-to-motor path goes through the safety wrapper first: NaN/inf rejection, per-joint absolute and per-step clamps, Cartesian envelope rejection, base zeroing, head lock.