yuzheng310
← 全部项目

Qwen3 Runtime

面向多轮 Agent 的单 GPU 推理运行时。

为什么做这个项目

多轮 Agent 会在模型生成与工具调用之间反复切换。每次调用模型时,已有历史与新产生的工具结果一起构成上下文;如果后端没有保留可复用的状态,历史就可能被重复计算。

这个项目从单 GPU 的 Qwen3 推理出发,保留一条能够完整阅读的执行路径:请求进入系统后,如何被调度、分配 KV、执行模型,最后返回 token。它也为上层代码 Agent 和 Agentic RL rollout 提供推理层。

实现范围

  • 请求与调度:连续批处理、统一 token budget、分块 prefill,以及显存约束下的请求准入。
  • KV 状态:分页分配、前缀复用、会话暂停与增量恢复,显式结束后回收资源。
  • GPU 执行:FlashInfer 分页注意力、decode CUDA Graph,以及部分算子融合。
  • 生成语义:采样、停止条件、会话级随机状态,以及带目标模型验证的推测解码。

核心推理层接收 token IDs。聊天模板、工具调用映射与上层 Agent 的连接由轻量适配层负责。Agent 的环境、奖励与训练逻辑留在运行时之外。

性能工作

优化从测量执行路径开始。通过 Nsight Systems 分析主机调度、CPU–GPU 传输、注意力计算和算子启动,再判断瓶颈位于哪一段。

冻结记录中,Qwen3-4B 单请求长序列解码从 26.34 提升至 100.40 output token/s,约为最初测量版本的 3.81 倍。这是多项优化累积后的端到端变化,不能归因于某一个算子。

六类冻结的 Qwen3-4B BF16 工作负载中,闭合批次输出吞吐达到 vLLM 0.27.1 的 94.70%–97.70%。这一比较关闭了 vLLM 前缀缓存,并对齐长上下文分块条件。它描述的是这些具体工作负载,不代表通用生产服务能力。

会话 KV 与 CPU offload

会话在等待工具时可以暂离执行队列,同时保留后续恢复所需的状态。新的上下文到达后,在前缀匹配且缓存有效时,只处理新增后缀。

可选的同步 CPU offload 进一步处理 GPU KV 容量紧张的情况。24 客户端、26.40 GiB GPU KV 池的固定容量回放中,组合方案耗时为 58.95 秒,较更快的 GPU 对照 APC-only 的 66.80 秒减少 11.75%

这组实验使用报告 49,140 MiB 显存的 RTX 4090、CodeScout-4B BF16,以及 24 个录制任务、102 轮交互、固定输出与合成工具等待;记录为三次预热后重复的中位数。它不是常规 24 GB 显卡测量,也不是完整 GRPO 训练结果。低压力或更大 GPU KV 池下没有可信的 offload 加速,因此该功能默认关闭。

当前边界

运行时聚焦 Qwen3 与单 GPU。冻结基线和后续探索实验分开记录,进一步实验已暂停,新一轮完整 GRPO 对照仍待完成。

实现与证据见 项目仓库。关于状态管理,也可以阅读这篇笔记

返回项目列表