📌 项目地址: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) |
|---|---|---|
| 输入 dtype | torch.bfloat16 | torch.float32 |
| batch_size | 1 ~ ∞(大小批皆优化) | 1 ~ ∞ |
| vocab_size | 1 ~ ∞(大小词表皆优化) | 约 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)
python3 tests/test.py --perf-only,以同输入对比 torch.topk 报告带宽比值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 倍。
两大场景:① 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] 字节的倍数且最后一维连续。