趋近智
虽然专家混合(MoE)层的大部分计算发生在专家本身,但门控网络(即路由器)在指导令牌方面发挥着不可或缺的作用。尽管路由器通常在计算上比专家轻量,但其执行直接影响整体推理延迟。在大批量、长序列或对时间要求严格的场合中,优化路由器变得重要。此外,路由器的操作,特别是训练期间专家并行性常伴随的全对全(All-to-All)通信模式,在推理部署时可能带来不同的难题。用于在推理时优化路由器表现的方法有多种,包括缓存策略和架构调整。
典型的路由器涉及一系列操作:通常是对令牌表示进行线性投影,然后是softmax函数以生成专家概率,最后是top-k选择机制以确定每个令牌的目标专家。
设 x∈Rd 是输入令牌表示(维度为 d),设 Ne 是专家数量。门控权重是 Wg∈Rd×Ne。核心计算包括:
对于并行处理的 B 个令牌批次,路由器总成本会相应扩展。虽然 d×Ne 可能远小于专家内部的计算量,但此操作发生在MoE层处理的每个令牌上。优化这些步骤可以带来明显的延迟减少。
一种直接减少路由器计算的方法是避免重新计算最近已处理的令牌或序列的专家分配。缓存路由器的输出(即给定输入令牌表示所选的专家索引)在特定条件下会有效果。
当输入模式表现出重复性时,缓存最有益。考虑以下情况:
一种简单的实现方式是使用哈希映射,键源自输入令牌表示(或其量化/哈希版本),而值则是选定的专家索引列表。
# 路由器缓存示例
router_cache = {} # 作为缓存的字典
def get_expert_indices(token_representation, gating_network):
# 使用表示的可哈希版本作为键
# 注意:浮点表示需要谨慎哈希(例如,量化或位转换)
cache_key = hash_representation(token_representation)
if cache_key in router_cache:
# 缓存命中
return router_cache[cache_key]
else:
# 缓存未命中:计算路由决策
logits = gating_network.linear(token_representation)
probabilities = torch.softmax(logits, dim=-1)
top_k_values, top_k_indices = torch.topk(probabilities, k=2) # 假设 k=2
# 存储到缓存中(考虑缓存淘汰策略,如LRU)
router_cache[cache_key] = top_k_indices
return top_k_indices
# 哈希函数的占位符
def hash_representation(representation):
# 示例:将张量转换为字节并哈希,或者在适当情况下使用感知哈希。
# 需要仔细处理浮点精度。
# return hash(representation.tobytes()) # 简化概念
# 一种方法可能涉及在哈希前进行量化或四舍五入
quantized_repr = torch.round(representation * 1000).int() # 示例量化
return hash(quantized_repr.cpu().numpy().tobytes())
路由器缓存在受限环境或特定解码算法中通常更实用,因为这些情况下输入重复性在结构上得到保证。
在没有缓存的情况下,路由器本身的计算可以通过架构修改和专门实现进行优化。
将量化(例如INT8、FP8)应用于路由器的权重(Wg)和激活可以大幅减少内存占用,并能加快线性投影步骤,尤其是在具有用于低精度专用矩阵乘法单元的硬件上。
现代深度学习编译器(例如Triton、TensorRT、XLA)可以执行内核融合。对于路由器,这可能涉及将线性投影、softmax计算,甚至top-k选择融合到一个单一的计算内核中。
路由器操作可能融合到一个计算内核中,以减少开销并增强数据局部性。
top-k选择的效率很大程度上取决于所用算法和底层硬件。虽然库通常提供优化实现,但了解这些选择会有帮助:
std::partial_sort 或等效的GPU实现等算法,如果只需要top k个元素,可以比完全排序更快。在目标硬件上对不同的top-k实现进行基准测试通常是必需的,以便找到给定专家数量 (Ne) 和 k 下表现最好的选项。
在典型的推理管线中,层级的路由器计算必须在相应的专家计算开始之前完成(因为专家需要知道要处理哪些令牌)。然而,存在重叠的机会:
实现这种重叠需要复杂的推理服务器和执行框架,这些框架能够进行细粒度调度和管理异步操作。
与优化专家本身相比,优化路由器是次要效应,但可以在生产MoE推理中带来有价值的延迟减少。重要方法包括:
这些方法的最佳组合取决于特定的MoE模型架构、目标硬件、推理批次大小以及输入数据分布的特点。仔细的性能分析和实验对于在推理过程中最大限度地提高路由器效率极为重要。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造