AI 模型推理时,GPU 时常处于空闲状态,不是因为没活干,而是因为 CPU 还没告诉它下一步该做什么。这一现象被 Moondream 团队称为“GPU 气泡”。该团队在最新技术博客中揭示了气泡成因,并提出了一种名为“流水线解码”(pipelined decoding)的优化方法,让 GPU 几乎可以连续运转。
GPU 气泡的由来
典型的 AI 文本生成模型采用自回归方式:一次只生成一个 token,每步都依赖前一步的结果。这个解码循环需要 CPU 和 GPU 来回协作。GPU 负责执行海量算术运算来输出下一个 token,CPU 则负责调度请求、准备元数据、从输出中选出 token 并记录。问题在于:单次 token 的 GPU 工作量很小,而 CPU 的“内务处理”是固定开销。每次循环,GPU 都要等待 CPU 完成这些工作后才能开始下一步,气泡由此产生。
如何消除气泡
Moondream 的方案是让 CPU 和 GPU 的工作重叠起来——在 GPU 运行当前 token 的计算时,CPU 已经在为下一步做准备;而当 GPU 完成当前计算,它立刻开始下一步,不再等待 CPU 的整理工作。这一技巧的关键在于:新 token 不需要立即拷贝回 CPU,而是直接留在 GPU 内存中作为下一步的输入。CPU 可以稍后在后台完成拷贝和记录,这便消除了等待周期。
为保证安全,团队设计了三个机制:第一,“乒乓槽”(ping-pong slots),即准备两套 GPU 缓冲区交替使用,避免前后步骤的数据冲突;第二,“先计算后采样”(forward now, sample later),将模型前向计算与 token 采样解耦,使下一步计算可以提前启动;第三,“僵尸清理”(zombies),处理请求结束时的残留缓存。这些细节共同支撑了流水线解码的稳定运行。
Moondream 表示,这一技术已用于其推理引擎 Photon。虽然该优化主要面向自有模型和自建部署,但它揭示了当前 AI 推理系统中一个常被忽视的瓶颈——CPU 与 GPU 的异步协作效率。对于希望降低推理延迟、提高硬件利用率的团队来说,流水线解码提供了一种不需升级硬件的优化思路。
编注:材料为技术博客,聚焦 GPU 推理优化,未涉及商业影响或成本数据。