DeepSelect 教程:DeepSeek 官方 TopK 算子,2~20 倍加速稀疏注意力

📌 项目地址:github.com/deepseek-ai/DeepSelect | 星数:332+ | 版本:v1.0.0(2026-09-10)| 深度解析文档:中英文版见仓库 docs/

📋 项目简介

DeepSeek 的稀疏注意力(DSA)被用在 V3.2 / V4 / V4.1 三代模型里,其中一个高频热点是 TopK 挑选——从巨大的候选分数里选出关键子集,交给 Lightning Indexer 与采样器使用。原生 torch.topk 在这种负载上远未榨干显存带宽。DeepSelect 是 DeepSeek 官方放出的专用实现:TopK 不做浮点计算,瓶颈全在访存,所以官方直接用有效内存带宽作为性能指标,在两大场景下拿到 2~20 倍于 torch.topk 的吞吐。推理加速是国产开源模型生态的重要一环,可搭配 Edge0 MoE推理框架教程 与 vLLM本地部署教程 组成完整推理栈。

✨ 两大支持场景

维度Lightning Indexer采样(Sampling)
输入 dtypetorch.bfloat16torch.float32
batch_size1 ~ ∞(大小批皆优化)1 ~ ∞
vocab_size1 ~ ∞(大小词表皆优化)约 128K
topk小(必须 ≤ 4096)小(必须 ≤ 4096)

性能高度依赖 dtype、batch_size、vocab_size 与 topk 的组合,仓库只针对上述两类负载做极致优化;更大的 topk 不在支持范围。

🚀 安装

git clone https://github.com/deepseek-ai/DeepSelect.git
cd DeepSelect
git submodule update --init --recursive
pip install -v .

⚙️ 使用

import torch
import deep_select

# 输入: (batch_size, vocab_size),bfloat16 或 float32
# 行跨度须为 get_stride_requirement()[0] 字节的倍数,
# 且最后一维连续
batch_size, vocab_size, topk = 4, 204800, 1024

x = torch.randn(batch_size, vocab_size,
                dtype=torch.bfloat16, device="cuda")

values, indices = deep_select.topk(x, topk)

💡 调优建议(官方推荐)

📚 常见问题

DeepSelect 是什么?

DeepSeek 官方开源的高性能 TopK 算子(deepseek-ai/DeepSelect,332 星,2026-09-10 发布 v1.0.0),实现 DeepSeek Sparse Attention(DSA)中的 Lightning Indexer 与采样器所需 TopK,覆盖 DeepSeek V3.2/V4/V4.1 模型,实测比原生 torch.topk 快 2~20 倍。

DeepSelect 支持哪些场景?

两大场景:① Lightning Indexer——输入 bfloat16,batch_size 和 vocab_size 大小皆可,topk 必须 ≤ 4096;建议关闭 sorted_index、不需要值时设 return_value=False;② 采样——输入 float32,vocab_size 约 128K,topk 同样 ≤ 4096。更大的 topk 不支持。

怎么安装使用?

git clone 仓库后 git submodule update --init --recursive,再 pip install -v .。用法与 torch.topk 类似:构造 (batch_size, vocab_size) 的 bfloat16/float32 CUDA 张量,调用 deep_select.topk(x, k) 返回 (values, indices)。注意输入行跨度须为 deep_select.get_stride_requirement()[0] 字节的倍数且最后一维连续。