智能体辅助的SGLang开发(18分钟阅读)

TLDR AI 工具

摘要

本文探讨了智能体工具如何用于编码SGLang的开发工作流,将调试、基准测试和性能分析转化为可执行的技能和可复现的实验,像KDA-Pilot这样的努力已经产生了合并的PR。

SGLang团队概述了如何将智能体工作流转化为可重用的SKILL.md文件、基准合约、审查循环以及生产调试手册。这篇文章将智能体的价值定位在可执行、可测试和可审查的程序性工程知识上。
查看原文
查看缓存全文

缓存时间: 2026/07/03 17:22

# 代理辅助 SGLang 开发:初步探索 来源:https://www.lmsys.org/blog/2026-07-02-agent-assisted-sglang-development SGLang 开发已不再局限于孤立的代码变更。同一个仓库现在涵盖了 LLM 服务、分布式运行时、GPU 内核、扩散流水线、模型特定执行路径以及生产事件处理。过去,许多这些工作流程依赖于开发者个人记忆:如何启动某个模型、如何读取性能分析追踪、调试 CUDA 崩溃时应先添加哪个日志、或者性能 PR 应该包含哪些基准测试。随着代理工具日趋成熟,这种经验可以被转化为可执行的 `SKILL.md` 文件、脚本、基准测试契约和审查循环。 围绕 SGLang 的代理开发,已经涌现出一组适用于 LLM 和扩散工作的技能: - SGLang `.claude/skills`(https://github.com/sgl-project/sglang/tree/main/.claude/skills)维护在 SGLang 仓库内部,捕获仓库级别的开发工作流程,例如 CUDA 崩溃调试、内核集成、测试、CI、性能分析、生产问题分类和源码树约定。 - SGLang 扩散 `.claude/skills`(https://github.com/sgl-project/sglang/tree/main/python/sglang/multimodal_gen/.claude/skills)专注于扩散特定的工作流程,包括添加新扩散模型、对去噪路径进行基准测试和性能分析、调优性能选项以及验证量化流水线。 - BBuf/AI-Infra-Auto-Driven-SKILLS(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS)涵盖跨框架服务基准测试、容量规划、性能分析和流水线分析、模型计算模拟、SGLang 人类风格审查、生产事件分类、SGLang 及其他开源推理框架的 SOTA 循环以及模型 PR 历史。 - kernel-design-agents(https://github.com/mit-han-lab/kernel-design-agents)是 KDA 项目,也是 MLSys 2026 FlashInfer 内核竞赛的获胜方案。 - BBuf/KDA-Pilot(https://github.com/BBuf/KDA-Pilot)将 KDA 风格的代理内核工作流程应用于 SGLang。其公开的 B200 扩散总结目前跟踪 10 个 SGLang 内核任务。大多数行来自 KDA-Pilot 的公开基准账本,而 `residual_gate_add` 使用的是合并后的 SGLang 集成 PR 中报告的 B200 加速,原始任务基线已移动。KDA-Pilot 衍生的工作现已进入三个 SGLang 集成 PR。 综合来看,这些努力指向同一个方向:代理的价值来源于过程性的工程知识,包括可执行的步骤、可重现的实验以及可审查的证据。 ## 1. TL;DR - 代理在 SGLang 中最有用的时候是它们能够沿着定义良好的工作流程持续推进。基准测试、性能分析、内核 API 日志记录、添加扩散流水线、生产事件回放以及 SOTA 循环都可以编码为技能。 - SGLang 技能是一种可执行的开发流程。在 `debug-cuda-crash`、`sglang-diffusion-benchmark-profile` 和 `llm-torch-profiler-analysis` 中,重要内容包括预检、硬失败门控、产物契约、复现命令和结果格式。 - 性能分析证据是性能工作的核心。SGLang 性能分析技能会生成固定的内核表、重叠机会表和融合模式表。KDA-Pilot 将此扩展到相同 ABI 的基线/候选比较、真实负载、正确性门控、NCU 证据以及每个形状的结果。 - 长期优化已经开始进入循环工程。SGLang SOTA 性能循环将“追逐 SOTA”分解为公平基准测试、差距决策、性能分析、修复和重新验证。Humanize/RLCR 增加了外部审查,而 Codex Goal 可以在更低协调开销下运行相同循环。 - 审查变得更加重要。代理可以运行更多实验,但它们也产生更多看起来合理但仍需仔细审查的变更。开发者越来越多地负责定义问题、选择证据、设计工作流程,并决定结果是否准备好进入生产路径。 ## 2. 为什么 SGLang 适合代理辅助开发 SGLang 是一个用于 LLM 和多模态模型的高性能服务框架。随着模型家族和硬件路径的扩展,开发中反复出现一些问题: - LLM 路径复杂。单一性能问题可能涉及 Python 运行时、调度器、CUDA 图、Triton/CUDA 内核、FlashInfer/FlashAttention、分布式集合以及模型特定包装器。 - 扩散路径也很复杂。速度较慢的去噪过程可能涉及流水线/阶段分区、DiT 块、注意力后端、`torch.compile` 图断点、CFG/SP 并行性、VAE 或自定义融合内核。 - 验证成本高昂。许多变更必须在真实模型和真实负载上,在 H100、H200、B200 或 RTX 5090 上进行测试。仅靠本地单元测试是不够的。 - 性能分析结果难以手动复用。单个追踪可能包含数百个内核启动。手动阅读 Perfetto 可能会遗漏内核到 Python 源码的映射,并且容易混淆 prefill 和 decode。开发者在阅读性能分析输出时积累知识,例如哪些内核名称对应哪些模型逻辑、哪些启动模式暗示图断点、以及哪些 NCCL/注意力/MLP 布局是正常的。如果这些知识只存在于一个人的头脑中,下一个任务就无法复用它们。 - 性能结论高度依赖上下文。GPU 类型、形状、批次大小、并行性、精度、后端和编译状态都可能改变结果。孤立的微基准测试通常无法证明真实的模型级收益,因此需要端到端的长期测试流程,在固定负载下反复验证吞吐量、延迟、内存、准确性和稳定性。这个过程既耗费人力又耗时。 这些问题天然适合代理。启动服务器、固定负载、收集追踪、分析性能分析表、添加测试和记录实验结果都有明确的输入和输出,非常适合脚本化和重复执行。开发者需要定义边界:相同的基准设置、相同的性能分析解释规则、相同的准确性门控,以及代理应停止修改代码的条件。因此,这里讨论的代理是一个受工程工作流程约束的执行器。重复的 SGLang 开发流程可以捕获为技能,让代理处理重复执行、证据收集和状态跟踪。开发者仍然负责定义目标、判断证据,并审查变更是否应进入真实服务路径。 ## 3. 从提示工程到 SKILL:协议与示例 在 SGLang 框架中,一个有用的技能至少应回答以下问题: | 问题 | 技能应捕获的内容 | |------|------------------| | 何时使用 | 触发场景、支持的模型、支持的硬件以及硬停的情况 | | 如何开始 | 预检、环境变量、仓库状态、依赖检查以及模型配置 | | 如何验证 | 基准命令、性能分析命令、测试入口点以及准确性门控 | | 如何决策 | 输出表、失败模式、优先级、风险类别以及回退条件 | | 如何交付 | 产物目录、结果模式、PR 描述、复现命令以及审查要求 | SGLang 代理相关技能覆盖不同层面。有些接近源码变更,例如调试、测试、添加扩散模型以及基准测试/性能分析工作流程。另一些针对跨框架基准测试、容量规划、计算模拟、生产事件分类、PR 优化知识、SGLang 人类风格审查以及更高级的工作流程,如 Humanize/RLCR。 ### 3.1 当前技能栈 常用的 SGLang 代理相关技能被分组如下: | 层面 | 代表性技能 / 项目 | 解决的问题 | |------|--------------------|------------| | CUDA 崩溃 | `debug-cuda-crash`(https://github.com/sgl-project/sglang/tree/main/.claude/skills/debug-cuda-crash) | 记录在自定义 op/内核 API 边界处的输入、异常和转储,将瞬态崩溃转化为可离线分析的样本 | | LLM 基准测试 | `llm-serving-auto-benchmark`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/llm-serving-auto-benchmark) | 跨 SGLang 和其他 OpenAI 兼容推理栈运行公平、有界、可恢复的服务基准搜索 | | 容量规划 | `llm-serving-capacity-planner`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/llm-serving-capacity-planner) | 解析 SGLang 和其他推理框架的启动日志,解释权重内存、KV 缓存预算、CUDA 图开销、请求容量和 OOM 压力 | | 追踪分类 | `llm-torch-profiler-analysis`(https://github.com/sgl-project/sglang/tree/main/.claude/skills/llm-torch-profiler-analysis) | 生成固定的内核表、重叠机会表和融合模式表,并将内核映射回 Python 源码;同一统一工作流程也存在于 AI-Infra 中供跨框架使用 | | 流水线/层分析 | `llm-pipeline-analysis`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/llm-pipeline-analysis) | 将 torch profiler 追踪切片为前向传播、层和内核流,以定位稳态传播、瓶颈层类型和 Perfetto 时间范围 | | 模型计算模拟 | `model-compute-simulation`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/model-compute-simulation) | 为 LLM 构建算子级别的计算模板,并估计张量形状、FLOPs、MFU、内核到算子映射以及并行性假设分析 | | 扩散基准测试/性能分析 | `sglang-diffusion-benchmark-profile`(https://github.com/sgl-project/sglang/tree/main/python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-benchmark-profile) | 捕获去噪延迟、性能转储和 torch profiler 追踪,同时首先检查执行是否实际使用原生 SGLang 扩散后端 | | 添加扩散模型 | `sglang-diffusion-add-model`(https://github.com/sgl-project/sglang/tree/main/python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-add-model) | 从 Diffusers/参考流水线将新扩散模型添加到 SGLang 的流水线/阶段/模型/配置结构中 | | 扩散性能调优 | `sglang-diffusion-performance`(https://github.com/sgl-project/sglang/tree/main/python/sglang/multimodal_gen/.claude/skills/sglang-diffusion-performance) | 选择性能设置,如 `torch.compile`、预热、SP/CFG 并行性、卸载、注意力后端和量化 | | 生产分类 | `sglang-prod-incident-triage`(https://github.com/sgl-project/sglang/tree/main/.claude/skills/sglang-prod-incident-triage) | 收集实时服务器包、保存失败请求、回放它们,然后路由到集中的崩溃/挂起/性能分析工具 | | SGLang 审查 / PR 历史 | `sglang-humanize-review`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/sglang-humanize-review)和 `model-pr-history-knowledge`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/model-pr-optimization-history) | 根据实际维护者讨论模式审查 SGLang 补丁,并将 PR 驱动的模型演化历史保持在被修改的源码附近 | | SGLang SOTA 性能循环(循环工程) | `sglang-sota-humanize-loop`(https://github.com/BBuf/AI-Infra-Auto-Driven-SKILLS/tree/main/skills/sglang-sota-humanize-loop) | 首先公平地将 SGLang 与请求的开源推理框架进行比较,然后将差距决策、性能分析、修复和重新验证放入 Humanize/RLCR 循环中 | 这些条目将容易遗漏的步骤转化为可执行的协议,使工作流程能够运行、恢复和审查。 ### 3.2 近期优化和工作流程示例 以下示例来自最近合并的 SGLang PR。表格侧重于完整的工程路径:基准测试、性能分析、定位、代码更改、测试和重新验证。 | 案例 | 结果 | 关键点 | |------|------|--------| | 路由器长上下文令牌去重 | SGLang PR #28744(https://github.com/sgl-project/sglang/pull/28744) | 在 DeepSeek-V4-Flash 部署上,60k/125k 令牌提示的空闲 TTFT 下降约 29%/41%;在 60k 令牌负载下,TTFT 下降 34%–49% | 代理一起处理了缓存感知路由、chat-encoder 对齐、引擎侧 `input_ids` 回退和代理体构建,避免了路由器和引擎中的重复令牌化 | | Qwen3-Next FlashInfer allreduce 融合 | SGLang PR #22664(https://github.com/sgl-project/sglang/pull/22664) | 在 H100 TP=4 上,请求吞吐量从 5.49 req/s 提升到 9.41 req/s,约 +71.4%;平均 TTFT 从 456.24 ms 降至 167.54 ms | 这是一次性能分析驱动的 LLM 集体通信优化:未融合的跨设备 reduce 主导了 prefill,融合的 allreduce 路径通过 MMLU/GSM8K 准确性检查进行验证 | | Cohere2Moe NVFP4 融合 MoE 路径 | SGLang PR #27401(https://github.com/sgl-project/sglang/pull/27401) | 在 1 张 B300 上的 `CohereLabs/command-a-plus-05-2026-w4a4`,请求吞吐量相比之前 SGLang 默认值在聊天上提升 +26%,在摘要上提升 +21%,并在该配置下优于另一个开源推理框架 +4.1%/+6.8% | 该更改完成了路由语义,使得现有的 `flashinfer_trtllm` NVFP4 融合 MoE 内核能够在真实模型路径中正确使用,并经过了 GSM8K/MMLU 检查 | | Kimi Delta Attention CuteDSL prefill 内核在 SM100 上 | SGLang PR #27488(https://github.com/sgl-project/sglang/pull/27488) | 对于 `moonshotai/Kimi-Linear-48B-A3B-Instruct`,B200 上的 Delta Attention prefill 速度比 Triton 快 1.08–1.52 倍;GSM8K 从 0.915 提升到 0.920,并添加了针对真实门值的回归测试 | 此内核任务在优化准备好合并之前,必须涵盖模型的门值分布、数值溢出、主机开销、真实模型准确性以及单元测试 | | 谱渐进扩散 | SGLang PR #27524(https://github.com/sgl-project/sglang/pull/27524) | 在报告的 RTX A6000 配置中,FLUX.1、FLUX.2、Z-Image、Wan 和 Qwen-Image 的去噪加速分别达到 1.63x、1.77x、2.07x、2.32x 和 1.6x | 这是一次扩散侧的系统优化:早期去噪在较低潜在分辨率下运行,然后 GPU DCT 上采样在需要高频细节时恢复全分辨率 | | LTX-2 VAE 解码 channels-last-3d | SGLang PR #27431(https://github.com/sgl-project/sglang/pull/27431) | LTX-2 解码阶段从 5.41 秒提升到 3.84 秒,约 1.41x;峰值保留内存从 71.81 GiB 降至 62.12 GiB,节省约 9.7 GiB | 性能分析指出 Conv3d 和布局转换问题,因此修复在因果填充中保留了内存格式,并将加载器策略连接到单 GPU LTX-2 | 在这些示例中,代理主要通过执行工作流程来贡献:运行基准测试、读取性能分析结果、定位 Python 源码、修改代码、添加测试、重新验证以及准备 PR 描述。没有技能,许多步骤依赖手动提醒。一旦编码为技能,工作流程就变得更容易重复。 ## 4. 性能分析、审查和循环工程 在 SGLang 性能工作中,一个常见错误是仅查看总运行时间,或者打开 Perfetto 几分钟后凭直觉认为某东西“应该被融合”。这对代理来说风险更大,因为它们很容易将视觉上热门的内核误认为是真正的瓶颈。在实践中,通常同时使用两个性能分析技能。 `llm-torch-profiler-analysis` 处理性能分析追踪的第一层分类,将全局性能分析转换为三个固定表: - **内核表**:按阶段汇总 GPU 时间占比、启动次数和内核类别,并尽可能将内核映射回 Python 源码和 CPU 操作。 - **重叠机会表**:使用独占/隐藏时间占比、依赖风险和内核类别来识别剩余的重叠机会。

相似文章