FlashMemory DeepSeek-V4 检索器(GitHub仓库)

TLDR AI 模型

摘要

介绍了FlashMemory DeepSeek-V4检索器,这是一个轻量级模型,通过预测接下来将关注哪些块来稀疏化DeepSeek-V4的CSA KV缓存,仅保留约10-15%在设备上,同时匹配全注意力性能。

FlashMemory预测DeepSeek-V4 CSA KV缓存中未来token将关注的块,仅保留最相关的块在GPU上。据报道,该检索器在保留约10-15%的KV缓存设备上的同时,保持或提升了下游性能。
查看原文
查看缓存全文

缓存时间: 2026/06/11 00:11

libertywing/FlashMemory-Deepseek-V4

来源:https://github.com/libertywing/FlashMemory-Deepseek-V4

FlashMemory DS-V4 Retriever

一个轻量级检索器,用于稀疏化 DeepSeek-V4 压缩稀疏注意力 (CSA) KV 缓存

给定解码 token 的隐藏状态,该检索器可以预测接下来的约 64 个 token 将关注哪些 CSA KV 缓存块。只有得分最高的块保留在 GPU 上;其余部分可以卸载到 CPU/磁盘。在 downstream 评估中,它在保持 约 10–15% 的 KV 缓存 在设备上的同时,达到或超过了全注意力基线。

模型权重已上传至 Hugging Face (https://huggingface.co/libertywing/FlashMemory-Deepseek-V4)


快速开始

pip install torch safetensors

# 使用模拟输入进行演示
python demo.py --ckpt weights/flashmemory_ds_v4.safetensors

# 玩具级稀疏解码循环
python toy_flashmemory_inference.py --ckpt weights/flashmemory_ds_v4.safetensors

使用方法

from retriever import FlashMemoryRetriever

model = FlashMemoryRetriever.from_checkpoint(
    "weights/flashmemory_ds_v4.safetensors", device="cuda"
)

# hidden:     [B, 4096] 解码 token 的隐藏状态
# comp_k:     [B, N, 132] uint8 类型的压缩 CSA 键
# positions:  [B] int64 类型的 token 位置

# 逐层 sigmoid 分数:{"l10": [B,N], "l12": [B,N], "l20": [B,N]}
per_layer = model(hidden, comp_k, positions)

# 跨层集成(mode="max" 或 "mean")
scores = model.ensemble(hidden, comp_k, positions, mode="max")       # [B, N]

# 布尔保留掩码
keep = model.select_topk(hidden, comp_k, positions, top_k=512)       # 前 K 个
keep = model.select_topk(hidden, comp_k, positions, threshold=0.5)   # 阈值

compressed_k 格式

每个块 = HEAD_DIM + 4 = 132uint8 字节:

字节类型含义
[:128]float8_e4m3量化后的键值
[128:132]float32每个块的反量化缩放因子

反量化:fp8_values.view(float8_e4m3).float() * scale
参见 demo.py 中的 make_mock_compressed_k()


架构

每个 CSA 层,分数计算如下:

hidden [B, 4096]
    → wq_a        (4096 → Q_LORA_RANK)
    → RMSNorm     (q_norm_weight, eps=1e-6)
    → wq_b        (Q_LORA_RANK → N_HEADS * HEAD_DIM)
    → reshape     [B, N_HEADS, HEAD_DIM]
    → RoPE        (YaRN, 最后 ROPE_DIM=64 维, base=160000)
    → Hadamard    (归一化的 Walsh-Hadamard 变换)
    → q           [B, N_HEADS, HEAD_DIM]

hidden [B, 4096]
    → weights_proj (4096 → N_HEADS)
    → × weight_scale  (= HEAD_DIM^-0.5 * N_HEADS^-0.5)
    → fused_w     [B, N_HEADS]

compressed_k [B, N, HEAD_DIM + 4] (uint8)
    → bytes[:HEAD_DIM]  视为 float8_e4m3 → 反量化
    → × bytes[HEAD_DIM:]  视为 float32   → k [B, N, HEAD_DIM]

score = sigmoid( sum_heads( relu(k @ q^T) * fused_w ) )   in [0, 1]

联合检查点 + 集成

检查点包含 三个独立的 CSA 层l10l12l20),每层有自己的权重。在推理时,逐层的 sigmoid 分数会按块集成 — 使用 max(并集,默认)或 mean — 以产生单个保留/丢弃决策。

超参数

参数
N_HEADS128
HEAD_DIM128
Q_LORA_RANK2048
ROPE_DIM64(最后 64 维)
ROPE_BASE160000(YaRN)
ROPE_FACTOR16
ROPE_ORIGINAL_SEQ_LEN65536
ROPE_BETA_FAST32
ROPE_BETA_SLOW1
RMS_NORM_EPS1e-6

玩具级推理参考(toy_flashmemory_inference.py

一个自包含的示例,说明检索器如何在解码过程中驱动内存召回 — 即 DeepSeek-V4-FlashMemory 内部使用的实际控制流。

推理流程

 ┌──────────┐  压缩并存储       ┌────────────────────────────┐
 │ PREFILL  │  历史 K/V         │  CSA KV 缓存(内存)      │
 │ (密集    │ ──────────────────►  N 个压缩块,              │
 │  注意力) │                    │  每个 = [132] uint8 fp8-K │
 └────┬─────┘                    └──────────────┬─────────────┘
      │ 最后隐藏状态                              │ 每 64 步评分一次
      ▼                                           │
 ┌──────────────────── 解码循环 ──────────────────┼──────────────────┐
 │ 对于每个解码步骤 t:                             │                  │
 │   hidden = toy_decoder.step(token, keep_mask)   │  (稀疏内存注意力) │
 │                                                  │                  │
 │   每 RETRIEVAL_INTERVAL (= 64) 步:                 ▼                  │
 │     scores[N]   = retriever.ensemble(hidden, compressed_k, pos)      │
 │     keep_mask[N] = top-K(或 sigmoid > thresh)的分数                  │
 │     -> 未选中的块在接下来的 64 步中被掩码为 -inf                         │
 └─────────────────────────────────────────────────────────────────────┘
  1. 预填充(密集)。短提示通过密集内存注意力运行。其最后隐藏状态为第一个检索周期提供种子。
  2. 解码循环。玩具解码器每步产生一个 [B, 4096] 隐藏状态。
  3. 检索周期(每 64 步)。真正的 FlashMemoryRetriever 对所有 N 个压缩 K 块进行评分,集成逐层分数,选择保留的块。
  4. 稀疏注意力。未选择的块的注意力 logits 被设置为 -inf

此模拟的内容

  • 此玩具示例不执行 真实的 CPU↔GPU KV 缓存传输。交换引擎是 FlashMemory 内部基础设施的一部分,未包含在此处。
  • 我们通过掩码注意力 logits 为 -inf 来模拟内存召回。被掩码的块对注意力没有贡献 — 效果等同于未加载其 KV。
  • 目的是使解码时的控制流具体化

它是 / 不是

不是
最小化的仅 PyTorch 内存召回示例可直接运行的 DeepSeek-V4
使用真实的检索器权重和评分数学生产级 KV 交换引擎
教学目的:展示控制流有意义的文本生成

生产版本依赖于内部的 sglang + DeepSeek-V4 CSA 框架(原生 FP8 索引器、真实压缩 KV 缓存、注意力下沉、阈值回退、按请求路由、实际 KV 交换)并且无法发布


Downstream 评估

FlashMemory DS-V4 在推理密集的长上下文任务上达到或超过全注意力基线,同时仅保留 约 10–15% 的 CSA KV 缓存 在设备上:

任务上下文长度vs. 全注意力KV 节省
RULER (64k–512k)64K–512K−1 ~ +2 百分点约 80–90%
LongMemEval-s125K±1 百分点约 86%
LongMemEval-m500K±1 百分点约 91%
LongBench V246K–493K+1 ~ +2 百分点约 73–90%
MRCR (needle)274K需要回退约 86%

精确的针检索任务(MRCR)需要额外的阈值回退机制 — 这不属于独立发布的一部分。


文件

文件用途
retriever.pyFlashMemoryRetriever 模型 + RoPE/Hadamard + FP8 反量化
demo.py使用模拟输入的最小演示
toy_flashmemory_inference.py玩具级稀疏解码循环
weights/flashmemory_ds_v4.safetensors训练好的权重(约 510 MB,位于 Hugging Face)
requirements.txt依赖项

许可证

MIT


引用

如果在你的研究中使用 FlashMemory,请引用:

@article{wang2026flashmemory,
  title   = {FlashMemory-DeepSeek-V4: Lightning Index Ultra-Long Context via Lookahead Sparse Attention},
  author  = {Yan Wang and Qifan Zhang and Jiachen Yu and Tian Liang and Dongyang Ma and
             Xiang Hu and Zibo Lin and Chunyang Li and Zhichao Wang and Jia Li and
             Yujiu Yang and Haitao Mi and Dong Yu},
  year    = {2026},
  journal = {arXiv preprint arXiv:2606.09079},
  url     = {https://huggingface.co/papers/2606.09079},
}

相似文章

@karminski3: 魔法! DeepSeekV4 上下文内存压缩到1/10! 大家都知道 DeepSeekV4 是支持1M上下文的, 而且经过了极度优化, 如果要真的用到1M上下文, 显存占用只需要10G左右, (对比之下 DeepSeek-V3.2 大概需…

X AI KOLs Following

FlashMemory-DeepSeek-V4提出了一种名为Lookahead Sparse Attention(LSA)的新型推理范式,通过神经内存索引器主动预测未来上下文需求,将物理KV缓存占用压缩至全上下文基线的13.5%,同时平均精度提升0.6%。该方法采用解耦训练策略,无需加载基座模型即可独立训练索引器,显著降低训练成本。

DeepSeek V4 完整论文发布:FP4 QAT 技术细节与训练稳定性技巧 [D]

Reddit r/MachineLearning

DeepSeek 发布了完整的 V4 论文,详细介绍了 FP4 量化感知训练、MoE 训练稳定性技巧(预判路由与 SwiGLU 截断),以及用于 RLHF 的生成式奖励模型,实现了显著的效率提升——V4-Flash 在 100 万上下文长度下仅需 V3.2 的 10% FLOPs 和 7% 的 KV 缓存。

antirez/deepseek-v4-gguf

Hugging Face Models Trending

Antirez发布了专门为DS4推理引擎优化的DeepSeek V4 Flash GGUF量化版本,针对不同内存大小提供了优化配置,使得这个大型MoE模型可以在本地运行。