DeepSpeed
58aab420 - Reduce redundant work in AutoEP token routing (#8209)

Commit
1 day ago
Reduce redundant work in AutoEP token routing (#8209) **Motivations** ``count_tokens_per_expert`` function was called three times in each forward pass, and the ``torch.bincount`` inside it will introduce cpu-gpu sync. But the results of the first call could be reused. **Changes** • Reuse the router's histogram. The router already computes num_tokens_per_expert; reuse it through compute_split_plan  and the  ep_size == 1 path instead of recomputing it in AutoEPMoELayer.forward . • Faster count_tokens_per_expert. Replace  torch.bincount  with a pre-sized  zeros(num_experts, int32)  +  scatter_add_ , avoiding the device-to-host sync that  bincount needs . The helper now always returns an int32 histogram; the unused  out_dtype / deterministic_safe  params and padding logic are removed. • Remove deterministic_safe path in ``count_tokens_per_expert``. The histogram of integers is inherently deterministic. The op just sums 1 per bucket. Integer addition is associative and commutative, so the atomic accumulation order has zero effect on the result — every run produces identical counts • Remove the  TokenReorderer  module. Its logic (argsort by expert + score gather) is a two-liner, now inlined directly in the layer forward.  **Performance** The time below is measured from the moe gate kernel to the last kernel before first all-to-all communication. A100: 2.3ms -> 1.7ms. H200: 0.89ms -> 0.53ms. --------- Signed-off-by: Hongwei Chen <hongweichen@microsoft.com> Co-authored-by: Ma, Guokai <guokai.ma@gmail.com>
Author
Parents
Loading