Prhub

#44638 [Disagg] return routed_experts on streaming generate responses

原始 PR 作者 aoshen02 合并时间 2026-06-21 22:37 文件变更 2 提交数 2 评论 0 代码增减 +10 / -0

执行摘要

流式生成响应添加 MoE 路由信息

disagg 服务的非流式路径已在 GenerateResponseChoice 中返回 per-token MoE 路由,但流式路径 GenerateResponseStreamChoice 遗漏了该字段。此 PR 旨在补充流式路径的路由信息,使流式消费者(如 RL 训练器中的 R3 rollout)无需额外非流式调用即可获取完整路由数据。

值得精读以了解 vLLM disagg 服务中 MoE 路由数据的序列化与传输模式。代码简洁,设计意图清晰,是良好的功能补充范例。

讨论亮点

该 PR 无 review 评论,由 ywang96 和 njhill 直接批准。

实现拆解

  1. 扩展流式响应协议模型(vllm/entrypoints/serve/disagg/protocol.py):在 GenerateResponseStreamChoice 类中添加 routed_experts: str | None = None 字段,类型与语义与非流式的 GenerateResponseChoice.routed_experts 一致。
  2. 编码并注入路由数据(vllm/entrypoints/serve/disagg/serving.py):在 serve_tokens_stream_generator 函数中,当 output.routed_experts 不为 None 时,使用 io.BytesIO + np.save + base64 编码为 base64 字符串,并传递给 GenerateResponseStreamChoice 的 routed_experts 字段;否则保持 None。该逻辑完全复用了非流式路径的序列化方式。
文件 模块 状态 重要度
vllm/entrypoints/serve/disagg/protocol.py 协议层 modified 4.58
vllm/entrypoints/serve/disagg/serving.py 服务层 modified 5.8

关键符号

serve_tokens_stream_generator

关键源码片段

vllm/entrypoints/serve/disagg/protocol.py core-logic

定义流式响应数据模型,新增 routed_experts 字段。

class GenerateResponseStreamChoice(BaseModel):
    index: int
    logprobs: ChatCompletionLogProbs | None = None
    finish_reason: str | None = None
    token_ids: list[int] | None = None
    # Per-token expert routing decisions, base64-encoded ``.npy`` bytes.
    # ``None`` if not available or feature disabled.
    routed_experts: str | None = None
vllm/entrypoints/serve/disagg/serving.py core-logic

实现流式生成中的 routed_experts 编码与注入逻辑。

# within serve_tokens_stream_generator, for each output:
routed_experts_b64 = None
if output.routed_experts is not None:
    buf = io.BytesIO()
    np.save(buf, output.routed_experts)
    routed_experts_b64 = base64.b64encode(buf.getvalue()).decode("ascii")chunk = GenerateStreamResponse(
    request_id=request_id,
    choices=[
        GenerateResponseStreamChoice(
            index=i,
            logprobs=logprobs,
            finish_reason=finish_reason,
            token_ids=as_list(delta_token_ids),
            routed_experts=routed_experts_b64, # <-- new field
        )
    ],
)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低:纯新增字段,默认值为 None,当 enable_return_routed_experts 关闭时不影响现有行为。序列化方式与非流式路径一致,已通过现有测试覆盖。

影响范围限定在 disagg 服务流式响应路径,对已有消费者无破坏性变更。流式消费者可据此获取 per-token MoE 路由信息,优化 RL 训练中的 R3 rollout 流程。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论