Reading Note: “ORCA: A Distributed Serving System for Transformer-Based Generative Models”

date
Oct 3, 2025
slug
orca
status
Published
tags
MLSys
summary
type
Post

Background: LLM Serving System

notion image
上图展示了 LLM Serving 系统的基础架构以及处理流程:
  • 对外暴露 endpoint 供外部调用(一般是 http / gRPC 接口)
  • 请求到达后被放入 Request Queue
  • Scheduler 从 Request Queue 中取出决定要处理的请求进行 batching
  • Scheduler 将 batch 请求交给 Execution Engine 执行
  • Execution Engine 返回结果,通过 Scheduler 层传回请求方

Motivation

在已有的 LLM Serving 系统中,在对请求做 batching 的时候使用 static batching,在 Scheduler 选择了本次需要处理的 batch 之后,需要直接将整个 batch 执行完,或者将新来的 batch 分配到闲置的机器。由 LLM 推理的多轮性质,这带来一些问题:
  • 不同请求的输出部分长度可能不一样,但是早结束的请求还是会以一种 inactive 的方式存在
  • 新来的请求需要等待前一个 batch 结束,这可能会带来延迟的提升

Approach

Iteration Level Scheduling

对于 static batching 存在的问题,本文提出了 iteration level scheduling (continuous batching): 在 iteration 的粒度做调度,也就是每个 iteration 执行结束之后,都允许新的请求加入下一次的 batch,以及已经结束的请求返回。
Scheduler 会重复执行以下逻辑:
  • 选择下一次要处理的请求
  • 将选择的请求做 batching,送到 execution engine 执行一个 iteration
  • 从 execution engine 收到本次执行的结果
n_scheduled 的作用:保持 pipeline 填满状态
n_scheduled 的作用:保持 pipeline 填满状态

Selective Batching

在实际应用 Iteration Level Scheduling 到 transformer 模型 serving 上时仍然会遇到一个问题:由于在一个时刻每个请求目前的序列长度的差异,我们不能在不做 padding 的情况下 batch 这些请求,因为在 attention 的时候 kv 的形状不一样,而 padding 可能导致浪费显存。
对于这个问题 Orca 采用 selective batching 的方法,对于其他操作做 batching,对于 attention 进行逐个请求的计算。由于这只占很小一部分的计算,带来的影响不大。

Results

在合成的 workload 上,在相同延迟水平情况下取得了相比于 faster-transformer 36.9x 的吞吐量

© Lifan Sun 2023 - 2025