BlendServe: Optimizing Offline Inference for Auto-regressive Large Models with Resource-aware Batching
BlendServe 是一个通过引入资源感知的前缀树来有效结合资源重叠与前缀共享,从而优化离线自回归大模型推理的系统,其吞吐量较 vLLM 和 SGLang 等行业标准提升了高达 1.44 倍。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你经营着一家规模宏大、高速运转的工厂,专门制造定制机器人(这些就是 AI 模型)。你的工作是处理成千上万个订单(请求)来制造这些机器人。
在过去,如果你想快速制造机器人,你必须在两种类型的订单之间做出选择:
- “重体力活”订单: 这些需要大量的肌肉(计算能力),但几乎不需要存储空间。想象一下,这些订单是要求制造一个拥有超强手臂但没有储物隔间的机器人。
- “重存储”订单: 这些需要极少的肌肉,但需要海量的存储空间。想象一下,这些订单是要求制造一个手臂很小但内部有一个巨大仓库的机器人。
问题:工厂车间的瓶颈
你的工厂拥有两种主要资源:
- 肌肉机器(计算能力): 它们很快,但如果一直在等待,就会感到疲劳。
- 存储货架(内存): 它们很大,但如果使用效率不高,就会被堵塞。
旧的方法(朴素批处理):
以前,工厂只是按订单到达的顺序来处理订单。如果你有一排 10 个“重体力活”订单,你的肌肉机器会加班加点地工作,但你的存储货架却空置着,毫无用处。接着,如果接下来的 10 个是“重存储”订单,你的存储货架会被塞满,但你的肌肉机器却在闲着没事干,无所事事。
这就像试图一辆车只装砖头,然后再只装羽毛。如果你把它们混合在一起,你才能装载更多东西。否则,你的卡车(你的芯片)有一半的时间都是半空的。
新的问题:
工厂还用过另一种技巧,叫做**“前缀共享”(Prefix Sharing)**。想象一下,许多订单都有完全相同的初始步骤(比如“把机器人涂成蓝色”)。如果你把这些订单放在一起执行,你只需要涂一次蓝色并重复使用那个结果。这节省了大量时间。
然而,为了实现这种共享而进行的“最佳”排序方式(即把所有“涂蓝”的订单放在一起做),往往意味着要把所有的“重体力活”订单归为一类,并将所有的“重存储”订单归为另一类。这破坏了“混合”策略,让你的机器再次处于半空闲状态。
解决方案:BlendServe
这篇论文的作者创建了一个名为 BlendServe 的系统。你可以把它想象成一个超级聪明的工厂经理,他可以通过重新排列工作的顺序,来获得两全其美的效果。
1. “资源感知型”树状结构:
BlendServe 没有使用简单的线性结构,而是将所有订单组织成一棵巨大的家族树。
- 分支(Branches): 将具有相同起始步骤的订单进行分组(前缀共享)。
- 标签(Labels): 每个分支都会标注它需要多少“肌肉”与“存储”。
2. “双向扫描器”算法:
这是其中的魔力所在。经理不只是沿着线走。他同时站在树的两端:
- 他从左侧抓取一个“重体力活”订单。
- 他从右侧抓取一个“重存储”订单。
- 他将它们放在同一个批次中。
结果:
现在,当工厂运行时,你的肌肉机器在努力工作的同时,存储货架也在被填充。它们正在互相配合。卡车被完美地装满了砖头和羽毛的混合物。
为什么这很重要
论文声称,通过这种既能保持“共享步骤”在一起,又能进行巧妙混合的策略,BlendServe 可以:
- 与目前的顶尖系统(如 vLLM 和 SGLang)相比,将工厂速度提升高达 44%。
- 达到理论“完美”速度的 90%。想象一下完美的理想速度是 100 英里/小时;BlendServe 能让你达到 90 英里/小时,而其他系统可能只能达到 60 或 70 英里/小时。
难点(以及他们如何解决它)
论文承认,预测一个“重存储”订单究竟需要多长时间是很困难的,因为 AI 是逐字生成文本的。为了解决这个问题,BlendServe 会对订单进行一次微小的样本“试运行”来预估时长,然后利用这些猜测来构建完美的混合方案。即使猜测稍有偏差,该系统也足够健壮,能够进行实时调整。
简而言之,BlendServe 是一个聪明的调度器,它让你的计算机不再闲置。它将不同类型的 AI 任务混合在一起,使得你的计算机大脑和内存能够完美协作,让离线 AI 处理变得更快、更便宜。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。