专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
51好读  ›  专栏  ›  GiantPandaLLM

在 SGLang 中实现 Flash Attention 后端 - 基础和 KV 缓存

GiantPandaLLM  · 公众号  · 3D  · 2025-04-30 17:34

正文

请到「今天看啥」查看全文


执行模型的前向传递。

在第 9 步 : model.forward 将调用每个层的 forward 函数,大部分时间花费在自注意力部分。因此,注意力后端成为模型推理的瓶颈。除了性能之外,还有许多不同类型的注意力变体,如 MHA , MLA , GQA , Sliding Window , Local Attention 需要仔细优化的注意力后端实现。

注意力后端继承关系

以下是注意力变体的继承关系:

让我们通过 AttentionBackend 类中的方法来看看 SGLang 中的注意力后端是什么:

  1. forward() : 当 model.forward() 被调用时, AttentionBackend 中的 forward 方法将被调用。它将根据 forward_batch.forward_mode 调用 forward_extend() forward_decode() 。在这篇博客中,我们只关注 EXTEND DECODE 模式。
  2. forward_extend() : 当 forward_mode EXTEND 时,此方法将被调用。
  3. forward_decode() : 当 forward_mode DECODE 时,此方法将被调用。
  4. init_cuda_graph_state() : 此方法将在服务器启动期间被调用,它将预分配那些将在 CUDA Graph 重放中使用的张量。
  5. init_forward_metadata() : 当 model.forward() 被调用时,此方法将被调用。它可以在整个 model.forward() 调用中预计算一些元数据,并被每个 layer 重用,这对于加速模型推理至关重要。有趣的是,这个元数据是注意力后端中最复杂的部分,一旦我们设置好它,在这种情况下的 计算就相当简单了。
  6. init_forward_metadata_capture_cuda_graph() : 此方法将在服务器启动期间被调用, CUDAGraphRunner






请到「今天看啥」查看全文