A profiler breaks one training step (average of many steps) into phases:
Which phase is the best target for the first optimization attempt?
input_wait : 2 ms
forward : 18 ms
backward : 34 ms
collective : 6 ms
optimizer : 4 ms
-------------------
step total : 64 msWhich phase is the best target for the first optimization attempt?
- ainput_wait, since any nonzero wait means the pipeline is starving the GPU
- bcollective, because inter-rank communication tends to dominate hidden costs in a synchronous step
- cbackward, since it is by far the largest phase✓
- doptimizer, because its 4 ms is pure overhead, and overhead should be eliminated before real compute
Explanation:backward (34 ms) is more than half the step and larger than every other phase combined; a fixed percentage improvement there yields the largest absolute time saved. input_wait is only 2 ms (not a bottleneck), collective is a modest 6 ms here, and optimizer's 4 ms is normal, not 'pure overhead'.