60 秒回答模板

专家数量到上千时,路由延迟不能只理解成 Gate 多算了一个 softmax。完整链路包括 router logits 计算、从上千专家里选 top-k、专家到设备的查表、按目的专家生成 token 分桶、再触发后续 dispatch。优化可以分几层:第一,计算上把 router 做成批量 GPU 矩阵计算,避免逐 token CPU 循环,使用低精度、融合 softmax/top-k、减少中间张量读写;第二,算法上减少候选空间,例如分层路由,先选 expert group 或节点,再在组内选专家,或者根据任务、语言、domain、拓扑限制候选专家;第三,系统上把路由决策和 token packing 融合,保持 expert metadata 常驻 GPU,避免 host-device 往返,并让路由、通信和上一层/下一层计算尽量重叠;第四,质量上要监控 routing entropy、专家利用率、负载均衡和下游 loss,防止近似 top-k 或候选裁剪让模型退化。最终目标不是把专家数做大本身,而是在质量、稀疏激活、路由延迟和通信成本之间找到可部署的 Pareto 点。

考点 延迟拆解
难度 真实面经题
回答目标 讲清千级专家路由延迟优化

深入解析

01

先拆清路由延迟的组成

上千专家带来的延迟包括 router projection 计算、对 expert logits 做归一化或打分变换、top-k 选择、expert id 到设备的映射、token count 统计、prefix sum 和 dispatch buffer 构造。面试中如果只回答优化 softmax,会漏掉很多真实延迟来自 top-k 和数据重排准备。

02

避免逐 token 和 CPU 参与

路由应尽量在 GPU 上按 batch 或 micro-batch 计算,把 token hidden states 一次性做 router matmul,再用融合 kernel 完成打分、top-k、权重归一化和必要的 metadata 写出。逐 token for-loop、把 logits 拷回 CPU 做排序、或频繁查 host 侧专家表,都会在专家数很大时放大固定开销。

03

用分层路由缩小候选空间

如果每个 token 都对一千个专家完整打分并做精确 top-k,复杂度和内存读写都会增长。常见思路是分层选择:先选 expert group、节点、语义簇或路由桶,再在候选组内选 top-k 专家。这样可以把全局上千专家的搜索变成较小集合内的选择,但代价是路由空间被约束,需要通过训练和评估保证质量。

04

近似和裁剪必须有质量护栏

可以考虑候选专家预筛、approximate top-k、只计算活跃专家子集、限制跨节点候选或复用某些稳定前缀的路由结果,但这些优化都可能改变 token 到专家的分配。必须监控下游 loss、任务指标、专家熵、负载均衡和长尾样本表现,不能只看 router latency 下降。

05

系统优化要贴着 dispatch 做

路由决策之后立刻要做 token packing 和 dispatch,因此 router 输出格式应直接服务通信层,例如写出紧凑的 expert id、position、combine weight 和目标 rank buffer。把 top-k 输出再多次转换格式,会让千专家场景的 metadata 处理变成瓶颈。更好的实现会把排序、计数、分桶和 buffer 写入尽量融合。

06

端到端评估 p99 而不是单点耗时

优化路由决策延迟要看端到端 MoE 层耗时、p50/p95/p99、不同 batch size、不同输入分布和跨节点比例。一个 router kernel 更快,如果造成专家负载更偏、跨节点 dispatch 更多或质量下降,整体并不一定更优。最终要用质量、延迟、吞吐、显存和专家利用率一起判断。

易错点

  • 只说减少专家数量,没有回答上千专家规模下如何保持路由可用。
  • 把延迟完全归因于 softmax,忽略 top-k、metadata、分桶和 dispatch 准备。
  • 建议把路由放到 CPU 上做排序,忽略 host-device 往返和逐 token 调度开销。
  • 认为 approximate top-k 或分层路由必然无损,没有设置质量和负载护栏。
  • 只优化 router kernel 时间,不看后续跨节点通信和专家负载是否变差。
  • 把专家数越多直接等同于效果越好,没有讨论稀疏激活、路由质量和部署成本。

面试官追问

上千专家时一定要对所有专家做精确 top-k 吗?

不一定。可以用分层路由、候选专家预筛或近似 top-k 缩小搜索空间。但这些方法改变了可选专家集合,需要用质量指标和负载均衡指标验证。

router logits 计算和 top-k 哪个更可能成为瓶颈?

要看 hidden size、专家数、batch size 和实现。router matmul 可以被 GPU 高效批量化,top-k、scatter、metadata 写出和后续分桶有时反而更显著,所以需要 profiler 拆分。

路由缓存有没有用?

只在输入前缀、模板或某些 token 分布非常稳定时可能有局部价值。通用生成场景 token hidden state 随上下文变化,不能假设路由可以简单缓存复用,否则会影响质量。

分层路由的主要风险是什么?

它可能过早排除真正合适的专家,让专家专业化受限,或者让某些 group 过热。训练时要让分层选择可学习,并用下游任务和负载指标做验证。

为什么减少跨节点候选能降低路由延迟?

它不一定降低 router 计算本身,但会降低后续 dispatch 的跨节点通信比例和尾部延迟。路由优化要和专家放置、通信拓扑一起看。