Prhub

#54265 [Docs] Add example for Renderer.render_cmpl() usage

原始 PR 作者 null-Exception1 合并时间 2026-09-04 14:35 文件变更 1 提交数 3 评论 11 代码增减 +11 / -0

执行摘要

为 AsyncLLM.generate() 添加文档示例,展示手动渲染提示以避免 deprecation warning。

当用户直接将原始提示字符串传递给 generate() 时,会触发弃用警告,建议改用 Renderer.render_cmpl() 或 Renderer.render_chat()。然而,正确使用这些方法需要多个非显而易见的步骤(如调用 parse_model_prompt()、包装结果、构建 tok_params),而文档中未提供示例。PR body 中明确提到:'A repo-wide search of examples/, docs/, and tests/ found zero usages of render_cmpl/render_chat outside of internal unit tests',因此添加示例以填补空白。

该 PR 值得精读,尤其是对使用 AsyncLLM 的开发者。它揭示了渲染器管道的内部用法,是一个有用的参考。虽然变更简单,但填补了文档空白,对用户体验有积极影响。

讨论亮点

DarkLight1337:'I think only AsyncLLM.generate is supposed to do that? Only advanced users mess with AsyncLLM directly so I don't feel this is really needed.'

null-Exception1:回应指出在 LLM.generate() 中也出现警告,但后续承认 LLM.generate() 实际未触发警告,建议聚焦于 AsyncLLM。

DarkLight1337:最终建议'Let's make this a docstring in AsyncLLM.generate',将示例嵌入方法文档。

结论:PR 被批准,示例作为 docstring 的一部分,无需独立文件。讨论突出了示例的受众(高级用户)和最佳放置位置。

实现拆解

  1. 变更入口:修改文件 vllm/v1/engine/async_llm.py,定位到 AsyncLLM.generate() 方法的 docstring。
  2. 核心逻辑改造:在现有 docstring 中添加一个 Note 部分,提供代码示例。示例包括四个关键步骤:
    • 导入 parse_model_prompt 并解析提示。
    • 获取 renderer.default_cmpl_tok_params。
    • 调用 renderer.render_cmpl() 生成 EngineInput。
    • 将 EngineInput 传递给 generate()。
  3. 配套改动:无测试、配置或部署配套变更,仅为纯文档更新。
  4. 影响说明:此变更仅影响文档,旨在指导用户避免弃用警告,对运行时行为无影响。
文件 模块 状态 重要度
vllm/v1/engine/async_llm.py 异步引擎 modified 5.14

关键符号

generate

关键源码片段

vllm/v1/engine/async_llm.py documentation

添加 docstring 示例,展示手动渲染提示以避免弃用警告。

"""
Main function called by the API server to kick off a request
    * 1) Making an AsyncStream corresponding to the Request.
    * 2) Processing the Input.
    * 3) Adding the Request to the Detokenizer.
    * 4) Adding the Request to the EngineCore (separate process).
​
A separate output_handler loop runs in a background AsyncIO task,
pulling outputs from EngineCore and putting them into the
per-request AsyncStream.
​
The caller of generate() iterates the returned AsyncGenerator,
returning the RequestOutput back to the caller.
​
Note:
    Passing a raw prompt string directly to this method is deprecated.
    Advanced power-users can manually bypass the raw-prompt fallback
    path using the Engine's underlying Renderer pipeline:
​
    >>> from vllm.inputs import parse_model_prompt
    >>> parsed = parse_model_prompt(self.model_config, "Prompt text")
    >>> params = self.renderer.default_cmpl_tok_params
    >>> (engine_input,) = self.renderer.render_cmpl([parsed], params)
    >>> gen = self.generate(engine_input, sampling_params, request_id)
"""

评论区精华

示例位置和 PR 必要性 设计

DarkLight1337 质疑 PR 是否必要,认为只有 AsyncLLM 高级用户需要;作者最初认为 LLM.generate() 也受影响,但后来澄清 LLM.generate() 未触发警告;最终决定将示例作为 AsyncLLM.generate() 的 docstring。

结论:批准 PR,将示例嵌入 docstring,聚焦于 AsyncLLM 用户。 · 已解决

风险与影响

风险极低。文档变更不涉及代码逻辑,仅添加注释性内容。潜在风险包括示例代码不准确或误导用户,但 PR 已在隔离环境中测试并确认无弃用警告。无回归、性能、安全或兼容性影响。

影响范围小且正面:

  • 用户:为高级用户提供清晰的手动渲染示例,减少弃用警告困惑,提升 API 使用体验。
  • 系统:无功能性变更,不影响性能或稳定性。
  • 团队:降低用户支持负担,通过文档预防常见问题。
文档准确性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论