DeepSeek 开源推理引擎 DeepInfer,披露 V4.1-Flash 调度细节
DeepSeek 又一开源重器!深挖 DeepInfer 究竟藏着多少技术狠活?
DeepSeek 在 GitHub 开源推理引擎 DeepInfer,它是 DeepSeek-V4.1-Flash 背后的推理引擎,包含 MoE 专家并行、异步 Batch 调度、定制 Kernel 和推测解码等技术。官方披露单集群每天需处理约 155 万亿个 Token。目前开放的是离线推理能力,线上 KV Cache 存储和跨副本负载均衡等组件尚未完整公开。
这条信号在站内保留事实摘要与战略研判。完整内容和上下文请以原文为准;融资、并购与技术效果以原始披露为准。
单集群日处理约 155 万亿 Token,推理优化争夺毫秒。 作者丨 郑佳美 编辑丨岑 峰 昨天,DeepSeek 又在 GitHub 上开源了一个大项目,叫 DeepInfer。 这次没有发布新模型,放出来的是 DeepSeek-V4.1-Flash 背后的推理引擎,包含 MoE 专家并行、异步 Batch 调度、定制 Kernel 和推测解码等核心技术。 DeepSeek 还披露了一组数据:单个集群每天需要处理约 155 万亿个 Token。如此庞大的流量,GPU 哪怕在每轮计算中浪费一点资源,累积起来也相当可观。 目前 DeepInfer 开放的是离线推理能力,线上 KV Cache 存储和跨副本负载均衡等组件尚未完整公开。不过,从已经放出的代码中,可以看到 DeepSeek 如何安排大规模推理中的计算、通信和请求调度。 其中有一套叫 Zero-Overhead Batch Scheduler 的异步调度机制。它解决的问题很具体:GPU 明明已经完成计算,却要停下来等 CPU 整理上一轮生成结果、更新请求状态,再安排下一轮工作。 对于需要连续生成几千个 Token 的请求,这种短暂等待会反复发生,GPU 的实际利用率也会受到影响。DeepInfer 让 CPU 提前一轮安排计算,把原本串行执行的调度和模型前向重叠起来。 但提前排程意味着下一轮计算启动时,上一轮的 Token 可能还没完成 CPU 后处理,序列长度、KV Cache 状态和请求生命周期便会出现时间差。整个机制的技术难点,就藏在这种跨轮次的状态管理里。 01 重新安排 Decode 时序 传统推理引擎的 Decode 通常按照固定顺序运行:CPU 选择请求、组织 Batch 和 KV Cache 元数据,GPU 执行 Forward 与 Sampling,随后 CPU 读取结果、更新生成长度和请求状态,再启动下一轮计算。 随着 DeepGEMM、FlashMLA 等底层 Kernel 持续优化,GPU 的单轮计算时间不断缩短,CPU 调度与结果处理的耗时开始占据更明显的比例。尤其在 Decode 阶段,模型每轮处理的 Token 数量有限,CPU 和 GPU 之间频繁切换执行权,会产生持续累积的空档。雷峰网 Zero-Overhead Batch Scheduler 调整了这套执行顺序。按照公开的实现,当 GPU 处理第 N 轮 Forward 和 Sampling 时,CPU 已经开始准备第 N+1 轮 Batch,并利用设备计算期间的空档处理更早一轮的采样结果。部分工作可以提前提交到 GPU 执行队列,依赖关系则由 CUDA Stream 和 Event 维护。 实现中,WorkerStepState 用来保存跨轮次执行状态,包括 SequenceMetadata、SchedulerOutputs、SamplerOutput 以及 Forward 和 Sampling 对应的 CUDA Event。 这样,上一轮的结果可以暂时保留,CPU 无须等其全部完成后处理,便能继续推进后续调度。 LLMEngine 通过 Worker 回调衔接这些操作,将原本集中在相邻 Decode Step 之间的 CPU 工作分散到 GPU 计算期间。对于持续生成的请求,流水线进入稳定状态后,CPU 与 GPU 可以分别处理不同轮次,减少设备因调度工作产生的等待。 当然,流水线的启动和收尾仍然需要特殊处理。刚开始执行时没有更早的结果可供消费,请求全部完成后也可能留下尚未提交的采样输出。DeepInfer 通过 Flush 机制处理这些在途结果,确保最后一批计算完成后,请求状态能够正常收尾。 这套方法的收益取决于 CPU 工作与 GPU 计算能够重叠多少。当 CPU 处理时间超过设备计算能够覆盖的窗口时,仍然会出现等待,因此 Zero-Overhead 更接近一种执行调度目标。 02 DeepInfer 如何修正状态错位 CPU 提前安排下一轮时,上一轮的采样结果可能尚未确定。普通自回归解码通常只推进一个 Token,开启推测解码后,一条请求可能连续接受多个候选,不同序列的实际推进长度也会出现差异。 假设一条请求已经缓存了 1000 个 Token,当前轮可能接受 3 个候选。CPU 准备下一轮时,尚不清楚这些候选最终会通过几个,如果直接使用旧长度组织计算,Query Length、Key Length 和 RoPE 位置就可能出现偏移。 DeepInfer 为此维护 total_inflight_tokens,记录已经下发、但尚未完成结果提交的 Token。调度器分配计算资源时,会把这部分在途计算纳入序列长度与 KV Cache 容量检查,并提前预留可能需要的缓存空间,避免后
来源只提供摘要,完整内容请打开原文。
来源:雷峰网 · leiphone.com