vllm 中 async scheduling

💡 原文中文,约6400字,阅读约需16分钟。
📝

内容提要

vLLM 的异步调度实现较为复杂,本文通过具体查询请求模拟调度器与工作者的执行流程,并标注关键状态变化。分析指出,调度过程中的状态假设可能导致错误,需进行状态矫正。建议在解码阶段仅维护输出令牌数量,以简化调度器的状态管理。

🎯

关键要点

  • vLLM 的异步调度实现复杂,需手动模拟调度器与工作者的执行流程。
  • 调度过程中的状态假设可能导致错误,需进行状态矫正。
  • 在解码阶段建议仅维护输出令牌数量,以简化调度器的状态管理。
  • 调度器在执行过程中需要处理假设状态,可能导致状态不准确。
  • 发现了 3 个 bug,主要是由于状态矫正不足导致的。
  • vLLM v1 的初衷是统一处理 prefill、chunked prefill 和 decode。
  • 引入异步调度后,worker 侧行为变得不确定,增加了复杂性。
  • 建议在异步调度时不维护准确状态,仅维护输出令牌数量。

延伸问答

vLLM 的异步调度实现有什么复杂之处?

vLLM 的异步调度实现复杂,主要体现在调度器与工作者的执行流程需要手动模拟,并且调度过程中的状态假设可能导致错误。

在 vLLM 的异步调度中,状态假设可能导致什么问题?

状态假设可能导致调度过程中的错误,因此需要进行状态矫正以确保准确性。

如何简化 vLLM 的调度器状态管理?

建议在解码阶段仅维护输出令牌数量,以简化调度器的状态管理。

vLLM 中发现了多少个 bug,主要原因是什么?

发现了 3 个 bug,主要是由于状态矫正不足导致的。

vLLM v1 的初衷是什么?

vLLM v1 的初衷是统一处理 prefill、chunked prefill 和 decode。

异步调度对 worker 侧行为有什么影响?

引入异步调度后,worker 侧行为变得不确定,增加了复杂性。

➡️

继续阅读