LeanProfiler

2.8. The resulting event tree🔗

After these choices, one step of the training capture has a clear structure:

training
├── batch.load                 step=17, activity=data
├── model.forward              step=17, module=encoder.block.0
│                              backend=eager, device=cuda
├── loss.backward              step=17, phase=backward
└── optimizer.step             step=17, phase=optimizer

withStep supplies metadata; it does not create another span. The trace therefore keeps step 17 on each event while preserving the actual parent relationships. The summary combines repeated steps under stable keys. The synchronized forward interval states what completion means, and any memory fields come from an identified adapter. Nothing in the report has to be interpreted as an unlabelled convention.