vLLM DeepSeek V4 支持:高效长上下文注意力
vLLM 已宣布支持 DeepSeek V4 模型系列,包括 DeepSeek-V4-Pro(1.6T 参数)和 DeepSeek-V4-Flash(285B 参数)。这些模型采用专门的长上下文注意力机制,能够扩展到一百万个 token,同时大幅降低内存开销和计算成本。
DeepSeek V4 注意力架构
DeepSeek V4 通过四项主要的架构创新,解决 KV 缓存内存的线性增长以及长上下文注意力的高计算成本:
- 共享键和值向量:通过共享键和值向量,模型实现了 2 倍的内存节省。为保持正确性,对注意力输出应用 inverse RoPE 操作,以确保平移不变性。
- KV 缓存压缩:模型在多个 token 上压缩 KV 缓存,通过两种方法实现 4 倍至 128 倍的内存节省:
c4a:将 KV 缓存压缩约为原来的 1/4;一个压缩 token 代表 8 个未压缩 token 的加权和,步幅为 4。c128a:将 KV 缓存压缩约为原来的 1/128;一个压缩 token 代表 128 个未压缩 token 的加权和,步幅为 128。
- DeepSeek 稀疏注意力 (DSA):即使在压缩后(例如使用
c4a时对 1M 序列的 250k token),也保持计算受限,DSA 只关注 top‑k 压缩 token。 - 短滑动窗口:对未压缩 token 使用大小为 128 的滑动窗口获取局部信息,使查询 token 在到达压缩边界前能够访问局部上下文。
这些优化带来了显著的内存效率。DeepSeek V4 中的 1M 上下文序列仅需每序列 9.62 GiB 的 KV 缓存(使用 bf16),约为 61 层 DeepSeek V3.2 风格堆栈所需 83.9 GiB 的 8.7 倍。将索引缓存使用 fp4、注意力缓存使用 fp8 可进一步将大小约减半。
vLLM 实现与优化
在 vLLM 中实现 DeepSeek V4 需要解决与异构注意力类型和内存管理相关的复杂系统挑战。
KV 缓存内存管理
vLLM 采用三种策略来保持 KV 缓存的紧凑和高效:
- 单一逻辑块大小:vLLM 将所有压缩层的逻辑块固定为 256 原生 token 位置。这使得分配器能够使用统一的单元进行槽映射和前缀命中检测,无论层是
c4a(每块 64 个压缩条目)还是c128a(每块 2 个压缩条目)。 - 压缩器状态作为滑动窗口:为避免为滚动残差(C4 为 8-token,C128 为 128-token)使用复杂的侧缓冲区,vLLM 将压缩器状态视为滑动窗口 KV。这使系统能够复用现有的前缀缓存和分散预填充抽象。
- 统一页大小:通过精心选择块大小和压缩比,vLLM 将五路缓存堆栈合并为 三种页大小桶。这消除了跨池碎片并去除了运行时重新分区的需求。
GPU 计算饱和
为最大化 GPU 利用率并减少 HBM 往返,vLLM 实现了多项 kernel 融合和多流分区:
- Kernel 融合:
- Compressor + RMSNorm + RoPE + cache insertion:将逐元素阶段融合为一个 kernel,提供 1.4‑3 倍加速。
- Inverse RoPE + fp8 quant:融合这些操作以避免 HBM 往返,带来 2‑3 倍加速。
- Fused Q norm + KV RoPE + K insert:水平融合查询和未压缩 SWA 键工作为单一 kernel,提供 10‑20 倍加速。
- 多流分区:vLLM 在 CUDA 流之间重叠独立操作。对于
c4a层,索引器流水线在单独的流上运行,与主 KV 压缩和 SWA token 插入并行,在低批量大小下将端到端延迟降低 5‑6%。
部署与硬件支持
DeepSeek V4 在 NVIDIA Hopper 和 Blackwell 架构上受支持。vLLM 为单节点部署提供了优化的 Docker 配置:
- DeepSeek-V4-Pro:针对 8xB200 或 8xB300 GPU 进行优化。
- DeepSeek-V4-Flash:针对 4xB200 或 4xB300 GPU 进行优化。
两种配置均使用 fp8 KV 缓存、块大小为 256,以及 deepseek_v4 分词器和推理解析器。进一步的优化,包括 DeepGEMM MegaMoE kernel 和分页预填充 kernel,正在开发中。