Files
myWiki/concepts/block-sparse-attention.md

2.2 KiB
Raw Blame History

title, created, updated, type, tags, sources
title created updated type tags sources
Block-Sparse Attention Mask (分块稀疏注意力掩码) 2025-06-02 2025-06-02 concept
attention
training-optimization
multi-turn-reasoning
goru-one-pass-to-reason-2025

Block-Sparse Attention Mask

goru-one-pass-to-reason-2025 中设计的自定义注意力掩码,通过为不同 token 类型指定不同的可见性规则,在单次前向传播中同时满足"生成时可见、上下文时隐藏"的冲突需求。

可见性规则

在多轮推理对话中token 被分为四种角色:

Token 类型 角色 可见范围
hi 人类消息 A(H_{<i}) — 只看历史
ti 推理 token A(H_{<i}, hi) — 看历史+当前人类消息
ri_in 上下文副本 A(H_{<i}, hi) — 不看推理 token
ri_out 生成副本 A(H_{<i}, hi, ti) — 看全部

结构特点

  1. 分块稀疏:整个掩码按对话轮次和 token 类型划分为 block每个 block 有不同的稀疏模式
  2. 因果性保持:所有 token 仍遵循因果约束(不偷看未来)
  3. 选择性可见核心创新——ri_in 和 ri_out 虽然内容相同,但对 ti 的可见性不同

与标准掩码的区别

  • 标准因果掩码:所有 token 看到所有之前的 token
  • Block-Sparse Mask:特定 token 类型跳过特定块ri_in 跳过 ti

高效生成

因为掩码需要在 GPU 上为每个 batch 动态生成,论文提出了向量化生成算法:

# 伪代码
M[i][j] = can_see(role[i], role[j]) AND causal(i, j)
# role 映射: 0=pad, 1=human, 2=thinking, 3=response_in, 4=response_out

用卡诺图Karnaugh map化简布尔逻辑最小化逻辑运算次数。

实现后端

使用 flex-attentionDong et al., 2024因为 FlashAttention-2 不支持传入自定义掩码。

与 packing 的兼容

可与 sequence-packing 叠加:打包掩码(防跨样本污染)与自定义注意力掩码通过逻辑 AND 结合。

相关