对于大规模部署大语言模型的机器学习工程师而言,随着上下文长度增加,注意力计算成本呈爆炸式增长,这是一个熟悉且严酷的现实。无论是处理检索增强生成(RAG)管道、智能体AI工作流,还是生成长篇内容,注意力的计算复杂度始终是主要瓶颈。
本文介绍了一种称为Skip Softmax的技术,这是一种硬件友好、即插即用的稀疏注意力方法,无需任何重新训练即可加速推理。下文将阐述Skip Softmax如何实现高达1.4倍的首个令牌生成时间(TTFT)加速,以及高达1.4倍的每个输出令牌时间(TPOT)加速,并介绍如何在TensorRT-LLM中开始使用该技术。
Skip Softmax的核心是提供一种动态修剪注意力块的方法。这之所以可行,是因为它利用了Softmax函数的一个基本特性:exp(很小的负数) ≈ 0。
在标准的FlashAttention中,GPU会为查询(Q)和键(K)块计算注意力分数(logits)。然后应用softmax将这些分数归一化为概率(P),并与值(V)相乘。
然而,注意力本质上是稀疏的。对于许多注意力块,其注意力分数相对于主导令牌来说非常低,以至于它们对最终输出的贡献在统计上是可忽略的。Skip Softmax修改了FlashAttention循环,以便早期检测到这些块并直接跳过它们。
该算法直接在FlashAttention内核中实现,其逻辑遵循以下启发式方法:
L_local_max)。L_local_max)与运行的全局最大值(L_global_max)之间的差值是否超过一个已校准的阈值(T)。V块。Skip Softmax 提供了即插即用的兼容性、硬件效率、灵活性和通用性。
与需要特定架构修改的方法(例如线性注意力)不同,Skip Softmax与使用标准注意力机制(如MHA、GQA或MLA)的现有预训练模型兼容。它经过优化,能够充分利用某中心Hopper和某中心Blackwell GPU的特定张量核心和内存层次结构。它也可以与其他优化方法结合使用。例如,在预填充阶段使用XAttention,在解码阶段使用Skip Softmax,已被证明可以在不影响准确性的情况下带来显著的加速效果。
Skip Softmax的通用性在于它同时解决了预填充和解码两个阶段的瓶颈。基于在Hopper和Blackwell架构上的性能数据,Skip Softmax在带宽受限的解码阶段和计算受限的预填充阶段都有益处,尤其是在长上下文场景中。
带宽受限的解码
在生成(解码)阶段,LLM推理通常受限于内存带宽。GPU移动KV缓存数据的时间比计算时间更长。
V块。计算受限的预填充
在预填充阶段(处理输入提示时),系统受计算限制。
长上下文场景
Skip Softmax的效果随着序列长度的增加而提高。跳过阈值(T)与上下文长度(L)在数学上存在关系:T ≈ K / L。这意味着随着上下文增长,安全识别和跳过稀疏块的机会也随之增加。
对于任何近似技术,一个显而易见的问题是:“这种方法对准确性有何影响?”
在RULER(合成的长上下文)和LongBench(现实的长上下文)基准测试上的广泛测试表明,稀疏性存在一个明确的“安全区”。
表 1. 与无稀疏性基线的准确性差异
模型 | 数据集 | 稀疏性 | 与基线的准确性差异 |
|---|---|---|---|
Llama 3.1 8B | RULER-16K | 预填充阶段约50% | -0.19% |
Qwen-3-8B | MATH500 | 解码阶段约50% | 0.36% |
表 2. Qwen3-30B-Instruct模型在128K超大序列长度下的加速效果
场景 | 阈值 | 加速 (BF16) | 基线准确性 | 稀疏准确性 | 准确性差异 |
|---|---|---|---|---|---|
仅上下文 | 0.2 | 1.30x | 37.21% | 36.74% | -0.47% |
上下文加生成 | 0.6 | 1.38x | 35.81% | 34.42% | -1.39% |
部署时的其他优化包括:
Skip Softmax Attention 已直接集成到 TensorRT-LLM 中,并在某中心Hopper和某中心Blackwell数据中心GPU上得到支持。这使得用户能够在TensorRT-LLM提供的最先进LLM推理性能基础上,进一步加速注意力计算。
可以通过LLM API的稀疏注意力配置启用 Skip Softmax Attention:
from tensorrt_llm import LLM
from tensorrt_llm.llmapi import SkipSoftmaxAttentionConfig
sparse_attention_config = SkipSoftmaxAttentionConfig(threshold_scale_factor=1000.0)
# 此外,可以为预填充和解码阶段分别配置 threshold_scale_factor。
sparse_attention_config = SkipSoftmaxAttentionConfig(threshold_scale_factor={"prefill": 1000.0, "decode": 500.0})
llm = LLM(
model="Qwen/Qwen3-30B-A3B-Instruct-2507",
sparse_attention_config=sparse_attention_config,
# 其他LLM参数...
)实际阈值等于 threshold_scale_factor 除以上下文长度。
也可以通过额外的LLM API选项YAML文件来指定配置。下面是一个启动OpenAI兼容端点的示例:
cat >extra_llm_api_options.yaml <<EOF
sparse_attention_config:
algorithm: skip_softmax
threshold_scale_factor: 1000.0
EOF
# 此外,可以为预填充和解码阶段分别配置 threshold_scale_factor。
cat >extra_llm_api_options.yaml <<EOF
sparse_attention_config:
algorithm: skip_softmax
threshold_scale_factor:
prefill: 1000.0
decode: 500.0
EOF
trtllm-serve Qwen/Qwen3-30B-A3B-Instruct-2507 --extra_llm_api_options extra_llm_api_options.yaml了解更多信息,请参阅《BLASST: Dynamic Blocked Attention Sparsity via Softmax Thresholding》以及TensorRT-LLM文档中关于LLM API和CLI的部分。校准功能将由某中心模型优化器支持,该优化器允许用户指定目标稀疏度并获得所需的阈值缩放因子。
Skip Softmax 稀疏注意力内核也将通过 FlashInfer Python API 提供。敬请关注即将发布的 TensorRT-LLM、模型优化器和 FlashInfer 更新中的官方版本。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。