CudaSlice::clone() allocates device memory, which is forbidden during CUDA stream capture. Inline the launch_l2_norm and launch_ema_update_per_step calls to avoid the &mut self borrow conflict that forced the .clone() workaround. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>