M-FALCON:HSTU 中解决“一对多”推荐推理的终极武器

在 Meta AI 提出的 HSTU(万亿参数推荐大模型)论文中,除了惊艳的生成式训练范式,还有一个非常硬核的推理加速技术:M-FALCON。本文将为你深入浅出地拆解它的原理,以及它和我们常说的 KV-Cache 有什么异同。
1. 推荐系统排序阶段的”灾难性”痛点
在推荐系统的排序(Ranking)阶段,我们面临着一个典型的**”一用户对多候选”**(Target-aware Ranking)的场景:
- 我们有一段长度为 $n$ 的用户历史行为序列(比如用户过去看过的 1000 个视频)。
- 我们有 $m$ 个需要被评估打分的候选视频(Target)。
1.1 朴素方法的计算瓶颈
如果我们直接用标准的 Transformer(自回归模式)来计算,意味着每评估一个候选视频,都要把”用户历史 + 这个候选视频”送进模型跑一遍。对于 $m$ 个候选,这就需要跑 $m$ 次,整体计算复杂度高达 $\mathcal{O}(m \cdot n^2)$。
具体来说,这个复杂度可以拆解为:
- 单次 Attention 计算:对于长度为 $n$ 的序列,标准自注意力机制的复杂度为 $\mathcal{O}(n^2 \cdot d)$,其中 $d$ 是隐层维度。
- 重复计算:每个候选视频都需要独立地与整段用户历史交互,相当于把 $\mathcal{O}(n^2)$ 的计算重复了 $m$ 次。
- 实际数量级:在工业级场景中,$n$ 通常在 $500 \sim 2000$,$m$ 通常在 $500 \sim 5000$。这意味着单次请求的计算量可以轻松达到 $10^9$ 级别的浮点运算。
当 $m$ 达到成千上万,且 $n$ 也很长时,在线推理的延迟是不可接受的。工业推荐系统通常要求排序阶段在 10~50ms 内完成,朴素方法根本无法满足这一要求。
1.2 为什么不能简单地缩小模型?
一个自然的疑问是:既然计算量太大,能不能缩小模型?答案是不行,原因如下:
- HSTU 的核心价值在于用超大模型(万亿参数)来统一建模用户行为序列,缩小模型会严重损害推荐质量。
- 用户历史序列的长度 $n$ 直接关系到推荐效果,截断历史会丢失宝贵的长期兴趣信号。
- 排序阶段的候选数 $m$ 由上游召回模块决定,不能随意减少。
因此,推理加速成为了唯一可行的路径,M-FALCON 正是为此而生。
2. 前置知识:KV-Cache 机制详解
在深入 M-FALCON 之前,我们需要先理解它所依赖的基础技术——KV-Cache。这一机制最初在大语言模型(LLM)的自回归推理中被广泛使用。
2.1 标准 Transformer 自注意力回顾
在标准的多头自注意力(Multi-Head Self-Attention)中,给定输入序列 $X \in \mathbb{R}^{L \times d}$,我们通过三个投影矩阵得到:
- Query(查询):$Q = X W_Q$
- Key(键):$K = X W_K$
- Value(值):$V = X W_V$
注意力计算公式为:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$2.2 自回归推理中的冗余计算
在 LLM 的自回归生成中,模型逐个 Token 生成输出。当生成第 $t$ 个 Token 时:
- 需要计算当前 Token 的 Query $q_t$。
- 需要用 $q_t$ 与所有已生成 Token 的 Key 和 Value 做注意力计算。
如果每次都重新计算所有 Token 的 K 和 V,复杂度为 $\mathcal{O}(t^2)$——这是极大的浪费,因为前 $t-1$ 个 Token 的 K 和 V 在之前的步骤中已经计算过了。
2.3 KV-Cache 的核心思想
KV-Cache 的做法非常直观:
- 缓存历史:将每一步计算出的 $K_t$ 和 $V_t$ 存入一个不断增长的缓存中。
- 增量计算:在第 $t$ 步,只需计算当前新 Token 的 $Q_t$、$K_t$、$V_t$,然后将 $K_t$、$V_t$ 追加到缓存,再用 $Q_t$ 与完整的缓存做注意力计算。
- 复杂度降低:单步推理从 $\mathcal{O}(t^2)$ 降至 $\mathcal{O}(t)$,总生成 $T$ 个 Token 的复杂度从 $\mathcal{O}(T^3)$ 降至 $\mathcal{O}(T^2)$。
KV-Cache 的关键优势在于:
- 避免重复计算:已生成 Token 的 K、V 只计算一次。
- 以空间换时间:需要额外的显存来存储缓存,但换来了显著的速度提升。
- 数值等价:缓存机制不改变计算结果,是一种无损加速。
2.4 KV-Cache 的局限性
传统 KV-Cache 是为 ”一对一” 的自回归场景设计的,即一个前缀序列对应一个后续生成序列。但在推荐系统的排序场景中:
- 同一个用户前缀需要对应 $m$ 个不同的候选——这是一个 ”一对多” 的场景。
- 即使用了 KV-Cache 避免了用户历史的重复计算,$m$ 个候选仍需逐个送入模型,逐个推理的方式受限于内存访存带宽(Memory-bound),无法充分利用 GPU 的并行算力。
这正是 M-FALCON 要解决的问题。
3. M-FALCON 是如何破局的?
M-FALCON 全称是 Microbatched Fast Attention Leveraging Cacheable OperatioNs。为了打破上述瓶颈,它采用了两个核心策略:KV-Cache 共享与特殊掩码的微批处理 (Microbatching)。
3.1 用户历史的 KV-Cache 预计算
既然这 $m$ 个候选视频都要和同一段用户历史进行交互,那么用户历史在 Transformer 中计算出的 Query, Key, Value 其实是完全一致的。
M-FALCON 借用了大语言模型(LLM)中成熟的 KV-Cache 思想:首先把长度为 $n$ 的用户历史的 KV 矩阵计算出来并缓存(Cache)住。这样后续计算候选物品时,就不需要再重复计算历史序列的特征了。
具体步骤如下:
- Prefill 阶段:将长度为 $n$ 的用户历史序列送入 HSTU 模型的所有 Transformer 层,得到每一层的 $K^{(l)}_{\text{hist}}, V^{(l)}_{\text{hist}} \in \mathbb{R}^{n \times d_k}$,其中 $l$ 表示层编号。
- 缓存存储:将所有层的 KV 对存储在 GPU 显存中。对于 $L$ 层、$H$ 头的模型,总缓存量为 $2 \times L \times H \times n \times d_k$。
- 复用:后续每个候选物品的计算都直接读取这份缓存,无需重新计算。
3.2 微批处理与特殊的 Attention Mask
这是 M-FALCON 最巧妙的地方。如果只用 KV-Cache,逐个计算候选商品依然很慢(内存访存带宽瓶颈,即 Memory-bound)。
M-FALCON 将这 $m$ 个候选商品划分成大小为 $b_m$ 的微批次(Microbatch),把它们拼接在用户历史的后面一起送入模型。
但这里有一个关键问题:同批次内的候选商品,彼此之间不能产生注意力交互(也就是候选 A 不能”看到”候选 B),否则就会发生信息泄露(Crosstalk)。
3.2.1 为什么 Crosstalk 是致命的?
在排序场景中,每个候选物品应该独立地获得一个打分。如果候选 A 的表征受到了候选 B 的影响:
- 排序不一致:同一个候选物品在不同的微批次中会得到不同的分数(因为同批次的其他候选不同)。
- 信息泄漏:候选物品之间产生了不该存在的信息流动,违反了排序任务的独立性假设。
- 训练-推理不一致:训练时每个候选是独立计算的,推理时如果引入了 Crosstalk,等于改变了计算图。
3.2.2 注意力掩码的精确构造
为此,M-FALCON 设计了一种特殊的 Attention Mask(注意力掩码)。假设序列拼接后为 $[\text{hist}_1, \dots, \text{hist}_n, \text{cand}_1, \dots, \text{cand}_{b_m}]$,掩码矩阵 $M \in \mathbb{R}^{(n+b_m) \times (n+b_m)}$ 的构造规则为:
- 用户历史内部:标准的因果掩码(Causal Mask),即 $M_{ij} = 1$ 当且仅当 $i \geq j$(对于 $i, j \leq n$)。
- 候选 $\to$ 历史:所有候选商品都可以”看到”(Attend to)完整的用户历史,即 $M_{ij} = 1$(对于 $i > n, j \leq n$)。
- 候选 $\to$ 自身:候选商品对自己是可见的(对角线为 1),即 $M_{ii} = 1$。
- 候选 $\to$ 其他候选:互相不可见,即 $M_{ij} = 0$(对于 $i \neq j$ 且 $i, j > n$)。
用直观的矩阵形式表示,掩码结构如下:
$$M = \begin{pmatrix} \text{CausalMask}_{n \times n} & \mathbf{0}_{n \times b_m} \\ \mathbf{1}_{b_m \times n} & I_{b_m \times b_m} \end{pmatrix}$$其中 $I$ 是单位矩阵,表示候选只能看到自己。
3.2.3 微批次大小的选择
微批次大小 $b_m$ 是一个需要精心调优的超参数:
- $b_m$ 过小:微批次数量 $\lceil m / b_m \rceil$ 过多,KV-Cache 的重复读取开销增大,无法充分利用 GPU 并行度。
- $b_m$ 过大:单次前向传播的序列长度 $n + b_m$ 增大,Attention 的计算量 $\mathcal{O}((n+b_m)^2)$ 快速增长,可能超出 GPU 显存限制。
- 最佳平衡点:通常 $b_m$ 取值在 $16 \sim 128$ 之间,具体取决于 $n$ 的大小、模型的层数和头数、以及 GPU 显存容量。
3.3 完整推理流程总结
M-FALCON 的完整推理流程可以归纳为以下步骤:
- Prefill:输入用户历史序列,计算并缓存所有层的 KV。
- 分批:将 $m$ 个候选划分为 $\lceil m / b_m \rceil$ 个微批次。
- 并行解码:对每个微批次,构造特殊掩码,读取 KV-Cache,执行一次前向传播,得到该批次所有候选的分数。
- 合并输出:将所有微批次的分数汇总,输出最终排序列表。
4. 复杂度分析的详细推导
4.1 朴素方法的复杂度
不使用任何优化时,每个候选需要独立地与整段用户历史做 Attention:
$$T_{\text{naive}} = m \cdot \mathcal{O}((n+1)^2) \approx \mathcal{O}(m \cdot n^2)$$其中 $+1$ 是候选自身,当 $n \gg 1$ 时可忽略。
4.2 仅使用 KV-Cache 的复杂度
使用 KV-Cache 后,用户历史的 KV 只计算一次,但每个候选仍需独立推理:
$$T_{\text{kv-cache}} = \underbrace{\mathcal{O}(n^2)}_{\text{Prefill 阶段}} + \underbrace{m \cdot \mathcal{O}(n)}_{\text{逐个解码}}$$- Prefill 阶段计算用户历史的 KV:$\mathcal{O}(n^2)$。
- 每个候选只需用自己的 Query 与缓存的 KV 做一次注意力:$\mathcal{O}(n)$。
- 总复杂度:$\mathcal{O}(n^2 + m \cdot n)$。
相比朴素方法,节省了 $m$ 倍的 Prefill 开销,但逐个解码仍然是 Memory-bound 的(每次只计算一个 Token 的输出,算术强度极低)。
4.3 M-FALCON 的复杂度
使用 M-FALCON(KV-Cache + 微批处理)后:
$$T_{\text{M-FALCON}} = \underbrace{\mathcal{O}(n^2)}_{\text{Prefill}} + \underbrace{\lceil m/b_m \rceil \cdot \mathcal{O}(b_m \cdot (n + b_m))}_{\text{微批次解码}}$$微批次解码的详细推导:
- 每个微批次有 $b_m$ 个候选 Token,它们各自需要 Attend to $n$ 个历史 Token 和自身,因此单个微批次的 Attention 计算量为 $\mathcal{O}(b_m \cdot (n + b_m))$。
- 更严格地,考虑完整的 $(n+b_m) \times (n+b_m)$ 注意力矩阵,由于掩码的存在,实际有效计算量为 $\mathcal{O}(n^2 + b_m \cdot n + b_m)$,其中 $n^2$ 部分可以通过 KV-Cache 跳过,所以增量计算只有 $\mathcal{O}(b_m \cdot (n + 1))$。
- 总复杂度:$\mathcal{O}(n^2 + \lceil m/b_m \rceil \cdot b_m \cdot n) = \mathcal{O}(n^2 + m \cdot n)$。
4.4 三种方法的复杂度对比
| 方法 | 复杂度 | 典型值 ($n=1000, m=1000$) | 瓶颈类型 |
|---|---|---|---|
| 朴素方法 | $\mathcal{O}(m \cdot n^2)$ | $10^9$ | Compute-bound |
| KV-Cache only | $\mathcal{O}(n^2 + m \cdot n)$ | $2 \times 10^6$ | Memory-bound |
| M-FALCON | $\mathcal{O}(n^2 + m \cdot n)$ | $2 \times 10^6$ | Compute-bound |
关键观察:
- KV-Cache only 和 M-FALCON 的理论复杂度相同,但 M-FALCON 通过微批处理将瓶颈从 Memory-bound 转化为 Compute-bound。
- 在现代 GPU 上,Compute-bound 的操作能更好地利用硬件的并行算力,实际延迟远低于 Memory-bound 的逐个解码。
- 论文实验表明,M-FALCON 在实际部署中可以带来 2~4 倍的端到端延迟降低。
5. M-FALCON 原理流程图
下面这张图直观地展示了 M-FALCON 的工作流:
6. 与其他推理优化技术的全面对比
M-FALCON 的出现,是 LLM 推理技术向推荐系统迁移的成功典范。下面我们从多个维度将 M-FALCON 与当前主流的推理优化技术进行系统对比。
6.1 对比总览表
| 维度 | M-FALCON | 标准 KV-Cache | PagedAttention (vLLM) | FlashAttention | Speculative Decoding |
|---|---|---|---|---|---|
| 核心思想 | KV-Cache + 微批掩码 | 缓存历史 KV 避免重复计算 | 分页管理 KV-Cache 显存 | IO-aware 的精确注意力 | 小模型草稿 + 大模型验证 |
| 解决的问题 | 一对多排序推理加速 | 自回归生成加速 | 多请求并发显存管理 | 注意力计算 IO 瓶颈 | 自回归生成速度 |
| 适用场景 | 推荐排序 | LLM 文本生成 | LLM 高并发服务 | 通用 Transformer | LLM 文本生成 |
| 是否无损 | 是 | 是 | 是 | 是(精确计算) | 是(拒绝采样保证) |
| 加速倍数 | 2~4x | 10~100x (vs 无缓存) | 2~4x 吞吐提升 | 2~4x | 2~3x |
| 额外显存开销 | KV-Cache 存储 | KV-Cache 存储 | 分页表 + KV 块 | 无 | 小模型权重 |
| 是否可组合 | 可与 FlashAttention 组合 | 基础技术 | 可与 KV-Cache 组合 | 可与所有方法组合 | 可与 KV-Cache 组合 |
6.2 与标准 KV-Cache 的深入对比
M-FALCON 本质上是 KV-Cache 技术在”一对多(One-to-Many)”特殊场景下的深度变种:
- 标准 KV-Cache 是在时间维度(预测下一个 Token)上复用,每步只生成一个新 Token,是 ”一对一” 的增量式复用。
- M-FALCON 是在候选维度(给多个 Target 打分)上实现了跨样本的复用,同一份 KV-Cache 被 $m$ 个候选共享,是 ”一对多” 的批量式复用。
- 关键区别在于微批掩码:标准 KV-Cache 不需要特殊掩码(因果掩码天然满足),而 M-FALCON 必须通过精心设计的掩码来防止候选间的 Crosstalk。
6.3 与 PagedAttention (vLLM) 的对比
两者解决的问题完全不同:
- PagedAttention 解决的是多用户并发请求时,如何通过操作系统的”分页内存”机制来减少显存碎片,提高并发吞吐量。它关注的是 系统级(多请求间) 的资源管理。
- M-FALCON 解决的是单用户单次请求中,如何通过掩码技巧在一次计算内并行评估大量无关候选的问题。它关注的是 请求级(单请求内) 的计算优化。
- 两者理论上可以组合使用:在多用户并发的推荐服务中,用 PagedAttention 管理跨请求的 KV-Cache 显存,用 M-FALCON 加速每个请求内部的候选评估。
6.4 与 FlashAttention 的关系
FlashAttention 是一种硬件感知(IO-aware)的注意力计算实现,通过分块计算(Tiling)和减少 HBM 访问来加速 Attention:
- FlashAttention 优化的是 Attention 算子本身的执行效率,对掩码模式不做限制。
- M-FALCON 优化的是计算图层面的冗余消除和并行化。
- 两者是正交且可组合的:M-FALCON 的微批 Attention 可以使用 FlashAttention 作为底层算子,从而同时获得两个层面的加速。
7. 优缺点分析
7.1 M-FALCON 的优势
- 无损加速:掩码机制保证了每个候选的计算与独立推理时完全等价,不引入任何近似误差。
- 显著降低延迟:在实际部署中可带来 2~4 倍的延迟降低,使万亿参数模型满足工业级延迟要求。
- 实现简洁:核心改动仅在 Attention Mask 的构造和 KV-Cache 的管理上,不需要修改模型结构或训练流程。
- 灵活可调:微批次大小 $b_m$ 可以根据硬件条件动态调整,便于适配不同的部署环境。
- 可组合性强:可以与 FlashAttention、量化推理等其他优化技术叠加使用。
7.2 M-FALCON 的局限性
- 显存开销:需要为每个请求缓存完整的 KV-Cache($2 \times L \times H \times n \times d_k$ 个浮点数),在超长历史序列或超大模型下,显存占用可能成为瓶颈。
- 场景特定:专门针对”一对多”的排序场景设计,不适用于通用的自回归生成任务。
- 批次大小调优:$b_m$ 的最优值依赖于具体的硬件配置(GPU 型号、显存大小)和模型参数(层数、头数、维度),需要在每个部署环境中单独调优。
- 不解决 Prefill 瓶颈:对于用户历史的初始计算(Prefill 阶段),复杂度仍为 $\mathcal{O}(n^2)$,当 $n$ 极大时这一阶段本身可能成为瓶颈。
- 掩码实现复杂度:自定义的稀疏掩码可能不被所有深度学习框架的 Attention 内核原生支持,需要编写自定义 CUDA kernel 或使用支持灵活掩码的库(如 FlashAttention v2+)。
8. 工程实践启示
8.1 对推荐系统工程师的启示
M-FALCON 的设计理念对推荐系统的工程实践有深远的启示意义:
- 跨领域技术迁移:M-FALCON 的成功说明,LLM 推理领域的成熟技术(KV-Cache、掩码机制等)可以被创造性地迁移到推荐系统中。工程师应当保持对相邻领域技术进展的敏感度。
- 计算图分析是优化的起点:M-FALCON 的核心洞察来自对计算图中冗余的精准识别——$m$ 个候选共享同一份用户历史。在任何推理优化中,第一步都应该是分析计算图中是否存在可复用的中间结果。
- Memory-bound vs Compute-bound 的转换:M-FALCON 通过微批处理将逐个解码的 Memory-bound 操作转化为批量计算的 Compute-bound 操作。这一原则在 GPU 编程中具有普遍意义——尽量提高算术强度(Arithmetic Intensity)来充分利用 GPU 的计算吞吐。
8.2 实际部署中的关键考量
在将 M-FALCON 落地到生产环境时,需要注意以下几点:
- 动态批次调度:不同用户的历史长度 $n$ 不同,需要动态调整 $b_m$ 或采用 padding 策略。建议根据 $n$ 的分桶统计来预设几档 $b_m$ 值。
- KV-Cache 的生命周期管理:在高并发场景下,需要合理管理 KV-Cache 的分配与回收。可以借鉴 vLLM 的 PagedAttention 思想,用内存池来管理缓存。
- 与量化的结合:KV-Cache 可以使用低精度存储(如 FP16 甚至 INT8),在几乎不损失精度的前提下减少一半甚至更多的显存占用。
- 多级缓存策略:对于超长历史序列,可以考虑将 KV-Cache 分层:高频访问的近期历史放在 GPU HBM,低频的远期历史放在 CPU 内存或 SSD,按需加载。
- 掩码的高效实现:M-FALCON 的特殊掩码具有明显的块稀疏结构,可以利用 Block-Sparse Attention 内核来避免对零元素的无效计算。
8.3 未来演进方向
基于 M-FALCON 的技术路线,未来可能的演进方向包括:
- 与 GQA/MQA 的结合:Grouped-Query Attention 和 Multi-Query Attention 可以进一步压缩 KV-Cache 的大小,与 M-FALCON 的结合有望在更长的历史序列上取得更好的效果。
- 动态稀疏注意力:对于超长用户历史,不一定需要 Attend to 全部历史 Token,可以结合 TopK 稀疏注意力来进一步降低计算量。
- Prefix Caching 的跨请求复用:如果不同用户存在相似的历史前缀(如热门物品),可以在请求间复用部分 KV-Cache,进一步提升系统整体吞吐。
9. 总结
M-FALCON 是一项精巧且实用的推理优化技术,其核心贡献可以概括为:
- 识别了冗余:在”一对多”排序场景中,$m$ 个候选共享同一份用户历史的 KV 表征,这份冗余可以被消除。
- 解决了 Crosstalk:通过精心设计的块稀疏注意力掩码,在一次前向传播中并行评估多个候选,同时保证候选之间互不干扰。
- 实现了瓶颈转换:将逐个解码的 Memory-bound 操作转化为微批处理的 Compute-bound 操作,充分利用 GPU 的并行计算能力。
如果没有 M-FALCON,拥有万亿参数的 HSTU 在严苛的工业级延迟要求下根本无法上线。它完美地在”生成式序列建模”与”高效在线排序”之间架起了一座桥梁,也为推荐系统领域的大模型推理优化提供了一个可借鉴的技术范式。

字节推荐广告算法工程师,专注电商推荐系统。电商广告模型 → 电商推荐模型,兴趣方向:模型结构 Scale Up、序列建模、首点归因、GMV 回归建模。
日常分享搜广推论文 & LLM 笔记,以及自己做的一些小工具和尝试过程。
🔥 欢迎加入 TT 电商推荐团队,期待共建业界领先的推荐系统,完成 LLM 的清晰落地!内推通道 →