Skip to content

引擎核心 — 概念

EngineCore 主循环

EngineCore 的核心是一个无限循环,每轮迭代执行三个阶段:

阶段 1:调度

调度器 分析当前所有待处理请求,决定:

  • 哪些新请求开始 prefill
  • 哪些请求继续 decode
  • 是否需要 preemption(抢占)
  • KV 缓存块的分配与释放

阶段 2:执行

Executor 接收 SchedulerOutput,分发到 Worker 执行模型前向传播。MultiProc 模式下通过 pipe 通信,Ray 模式下通过 Ray actor 调用。

阶段 3:输出处理

OutputProcessor 将原始模型输出转换为用户可见的输出:

  • logits → token IDs(通过采样)
  • token IDs → 文本(通过 Detokenizer)
  • 处理 finish reason(STOP、LENGTH、ABORT)
  • 计算 logprobs 和 prompt logprobs

AsyncLLM 异步前端

AsyncLLM 是面向 API 服务器的异步接口:

关键职责:

  • 输入处理:tokenize prompt,处理多模态输入,应用 chat template
  • 输出处理:detokenize,流式输出,统计信息收集
  • 请求管理:跟踪活跃请求,处理 abort 信号
  • 指标收集:TTFT、TPOT、吞吐量等性能指标

EngineCoreClient 通信机制

EngineCoreClient 提供两种通信模式:

同步模式(SYNC)

用于 LLMEngine(离线推理):

  • 直接函数调用,EngineCore 在同进程中运行
  • 适合批量推理场景

异步模式(ASYNC)

用于 AsyncLLM(在线服务):

  • 通过 ZMQ DEALER/ROUTER socket 通信
  • EngineCore 运行在独立进程
  • 支持多前端同时连接

请求处理流水线

一个请求经过的完整处理链:

关键数据结构

EngineCoreRequest

使用 msgspec 定义的高效二进制序列化结构体:

  • prompt_token_ids:tokenized 输入
  • sampling_params:采样参数(temperature、top-k 等)
  • lora_request:LoRA 适配器(可选)
  • arrival_time:请求到达时间(用于计算 TTFT)

EngineCoreOutput

每轮迭代的输出:

  • new_token_ids:新生成的 token IDs
  • finish_reason:STOP / LENGTH / ABORT / ERROR
  • logprobs:token 概率
  • events:生命周期事件

FinishReason 枚举

含义
STOP遇到 EOS token 或 stop token
LENGTH达到 max_tokens 限制
ABORT用户主动取消
ERROR推理过程中出错
REPETITION重复惩罚触发

相关概念