huggingface的系列文章第二篇发布! 距离上一篇发布已经半年啦:网页链接阅读地址:huggingface.co/blog/continuous_async这一篇主要解释如何把 CPU 和 GPU 的工作负载分离,从而大幅提升推理性能。“这是高效 LLM 推理系列文章的第二篇。第一篇从基本原理讲解了 continuous batching。它介绍了一些本文会继续使用的概念:KV cache、FlashAttention、attention masks 等。
在 Inference Endpoints 上,一块 H200 大约每小时 5 美元。按小时看不算贵,但用上一天就已经是 120 美元了。在这种情况下,你当然希望 GPU 被充分利用。
我们已经看到,Continuous Batching 通过安排更紧凑的 batches 来提升 GPU 利用率,这样计算资源就不会浪费在 padding 上。但 continuous batching 还有一个没有解决的浪费来源:默认情况下,它是同步的。
这意味着 CPU 和 GPU 会轮流工作:GPU 计算时,CPU 在等待;CPU 准备下一个 batch 时,GPU 又在等待。在一个每秒运行数百步的循环里,这些空闲间隙会不断累积;正如我们将展示的,它们可能占到总运行时间的近四分之一。
为了让 GPU 100% 时间都忙于计算,我们需要消除这些间隙。
要做到这一点,可以使用 asynchronous batching:我们会把 CPU 的 batch 准备工作和 GPU 的 batch 计算分离开,让两者并行运行,从而让 GPU 始终在有效工作 🔥”
AI创造营
