DeepEP原理分析(二):low latency模式代码详解(更新中)
最近在做基于 DeepEP 和 SGLang 的推理优化。DeepEP 是一个用于取代 MoE 模型中 AlltoAll 操作、非常精妙和细致的点对点通信 kernel,好好研读其实现过程对 CUDA 编程、MoE rank 间通信都有巨大好处(下面的分析基于0625 main版本,详细代码请自行上 github 上搜索) 1 dispatch 1.1 入参详解 1、接收与打包参数:主要用于在目标 GPU 上存储从其他 GPU 接收到的数据 - packed_recv_x:用于存储接收到的已打包好的 token 特征数据,这些数据将直接用于本地专家的计算。这是数据在接收方的最终存储位置 - packed_recv_x_scales:如果使用 FP8 量化传输,这个指针指向用于存储 packed_recv_x 对应 FP8 scale(缩放因子)的缓冲区 - packed_recv_src_info:存储每个接收到的 token 在其来源 GPU 上的原始索引 。这个信息在后续 combine 阶段至关重要,用于将计算结果正确地写回 - packed_recv_layout_range:记录由每个本地专家从各个源 rank 接收到的 token 的布局信息。它通常将来自某个源 rank 的 token 总数和 token 在 packed_recv_x 缓冲区中的起始偏移量打包成一个 64 位整数,其结构可参考下面这个二维数组示意图,这个结构使得 dispatch kernel 能够记录每个本地专家从哪个源 rank 接收了多少 token,以及这些 token 在接收缓冲区中的具体位置。随后 combine kernel 可以利用这些信息,将处理后的 token 结果正确地发送回它们最初的源 rank - packed_recv_count:原子计数器,每个本地专家都有一个属于自己的该计数器,用来追踪该专家已经接收了多少 token,以便为新到达的 token 计算正确的存储偏移量 - cumulative_local_expert_recv_stats:用于累计每个本地专家接收到的 token 总数,作为统计信息 2、RDMA 缓冲区参数:RDMA 通信过程所需的空间和信号 - rdma_recv_x:RDMA 接收缓冲区。从其他节点通过网络发送过来的数据会先被存...