Title here
Summary here
本文详细介绍 Dynamo 的 Disaggregated Serving(分离式服务),包括分离原理、DisaggregatedRouter 和远程 Prefill 流程。
| 特性 | Prefill 阶段 | Decode 阶段 |
|---|---|---|
| 计算类型 | 计算密集型 | 内存带宽密集型 |
| 处理数据 | 整个输入序列 | 每次 1 个 token |
| GPU 利用率 | 高 (60-90%) | 低 (5-30%) |
| 持续时间 | 短 | 长 |
| 资源需求 | 高 FLOPS | 高内存带宽 |
问题:Prefill 和 Decode 交替执行,导致资源竞争和利用率波动。
优势:
DisaggregatedRouter 负责决定每个请求应该本地 prefill 还是远程 prefill:
pub struct DisaggregatedRouter {
max_local_prefill_length: Arc<Mutex<i32>>,
model_name: String,
config_watcher: Option<watch::Receiver<DisaggRouterConf>>,
}| 因素 | 影响 |
|---|---|
prefill_length | 输入 token 总数 |
prefix_hit_length | 前缀缓存命中长度 |
max_local_prefill_length | 本地 Prefill 阈值 |
impl DisaggregatedRouter {
pub fn prefill_remote(&self, prefill_length: i32, prefix_hit_length: i32) -> bool {
let max_local_prefill_length = *self.max_local_prefill_length.lock().unwrap();
// 实际需要计算的长度
let actual_prefill_length = prefill_length - prefix_hit_length;
// 超过阈值则远程 prefill
actual_prefill_length > max_local_prefill_length
}
}@service(
dynamo={
"enabled": True,
"namespace": "dynamo",
},
resources={"gpu": 1, "cpu": "10", "memory": "20Gi"},
workers=1,
)
class PrefillWorker:
"""专用 Prefill Worker"""def __init__(self):
# Prefill Worker 特殊配置
self.engine_args.enable_chunked_prefill = False
self.engine_args.pipeline_parallel_size = 1
self.engine_args.disable_async_output_proc = True
self.engine_args.enforce_eager = True # 必须同步执行class RemotePrefillRequest:
request_id: str # 请求 ID
prompt_token_ids: List[int] # Token IDs
block_ids: List[int] # Decode Worker 分配的块 ID
engine_id: str # Decode Worker 的引擎 ID
sampling_params: SamplingParams# graphs/disagg.py
from components.frontend import Frontend
from components.prefill_worker import PrefillWorker
from components.processor import Processor
from components.worker import VllmWorker
Frontend.link(Processor).link(VllmWorker).link(PrefillWorker)VllmWorker:
model: deepseek-ai/DeepSeek-R1-Distill-Llama-8B
enable-prefix-caching: true
remote-prefill: true
conditional-disagg: true
max-local-prefill-length: 512
ServiceArgs:
workers: 4
resources:
gpu: 1
PrefillWorker:
model: deepseek-ai/DeepSeek-R1-Distill-Llama-8B
ServiceArgs:
workers: 2
resources:
gpu: 1| 场景 | 吞吐提升 | 说明 |
|---|---|---|
| 单节点分离 | +30% | Prefill 和 Decode 独立调度 |
| 双节点分离 | +100%+ | 更多 Prefill 并行 |
| 高缓存命中 | 更高 | 减少实际 Prefill 计算 |
本文介绍了 Dynamo 的 Disaggregated Serving:
继续阅读 06-请求处理流程,了解完整的请求处理链路。