Prhub

#23921 [SKILL] Sync SGLang skill docs

原始 PR 作者 BBuf 合并时间 2026-04-28 17:05 文件变更 25 提交数 2 评论 4 代码增减 +4199 / -1949

执行摘要

统一 torch profiler 分析脚本并更新 CI 技能文档

此 PR 旨在将 SGLang 专用的 sglang-torch-profiler-analysis skill 升级为统一的 llm-torch-profiler-analysis,以支持 SGLang、vLLM、TensorRT-LLM 等框架,并提供更完善的 fuse/overlap 目录。同时刷新过时的 CI skill 文档,补充 B200 JIT 覆盖、B200-small/GB200 套件状态以及 target_stageinclude_wheel_build 的 kernel-wheel 行为。

建议合并,代码质量良好,review 建议可后续单独修复 runner 命名问题。值得关注的设计决策是 profiler 分析脚本的统一化架构,特别是跨框架的 canonicalize_frameworknormalize_repo_relative_path 设计。

讨论亮点

Review 评论主要指出 CI 文档中的 runner 命名不一致问题:

  • stage-b-kernel-unit-1-gpu-b200 的 suite 名为单 GPU,但 runner 却配置了 4-gpu-b200,可能属于标签错误或 runner 不可用导致的特例。
  • stage-c-test-4-gpu-b200-small 的 runner 名称缺少 -low-disk 后缀,与 CI 工作流文件中的实际 runner 不匹配,建议修改为 4-gpu-b200-low-disk
    上述问题均未在 PR 中修复,但评论已记录。

实现拆解

  1. 迁移与统一化:创建 llm-torch-profiler-analysis 目录,将原 sglang-torch-profiler-analysis 下的脚本迁移过来并大幅增强,新增 profile_common.py 作为共享模块,提供跨框架的工具函数(如 canonicalize_frameworknormalize_repo_relative_path),并新增 analyze_llm_torch_profile.py 作为统一入口,替代旧的 analyze_sglang_torch_profile.py
  2. 新增辅助工具:新增 render_triage_markdown_bundle.py 用于将多个 triage 报告合并为 Markdown,新增 probe_llm_server.py 用于探测服务器,新增 make_trtllm_py_executor_override.py 用于 TensorRT-LLM 的 profiler 注入。
  3. 内核与重叠分析增强:在 triage_kernel_helpers.pytriage_overlap_helpers.py 中新增低信号路径过滤(LOW_SIGNAL_FUNCTION_TOKENSLOW_SIGNAL_PATH_TOKENS)、Stage 标注支持(StageAnnotationStageWindow)以及 Qwen-style shared expert 融合模式。
  4. CI 文档刷新:更新 .claude/skills/ci-workflow-guide/SKILL.md.claude/skills/write-sglang-test/SKILL.md,补充 B200 测试套件说明、runner 标签修正(如 stage-b-kernel-unit-1-gpu-b200stage-c-test-4-gpu-b200-small 的 runner 名称)。
  5. 清理旧文件:删除原 sglang-torch-profiler-analysis 目录下的多个脚本,确保技能目录整洁。
文件 模块 状态 重要度
.claude/skills/llm-torch-profiler-analysis/scripts/analyze_llm_torch_profile.py 分析入口 added 8.89
.claude/skills/llm-torch-profiler-analysis/scripts/profile_common.py 共享工具 added 8.98
.claude/skills/llm-torch-profiler-analysis/scripts/triage_kernel_helpers.py 内核分析 renamed 8.98
.claude/skills/llm-torch-profiler-analysis/scripts/triage_overlap_helpers.py 重叠分析 renamed 8.78
.claude/skills/ci-workflow-guide/SKILL.md CI 文档 modified 5.0
.claude/skills/write-sglang-test/SKILL.md 测试文档 modified 4.0

关键符号

build_triage_parser parse_triage_args resolve_profile_targets build_mapping_kernel_map stage_index sample_kernels_for_mapping group_events_by_stage choose_window_events render_ascii_timeline is_low_signal_scope normalize_match_text normalize_text canonicalize_framework normalize_repo_relative_path coerce_optional_int

关键源码片段

.claude/skills/llm-torch-profiler-analysis/scripts/analyze_llm_torch_profile.py dependency-wiring

统一分析入口,替代旧 SGLang 专有版本,支持多框架命令行参数

# analyze_llm_torch_profile.py - 统一 LLM torch-profiler triage 入口
# 支持 SGLang / vLLM / TensorRT-LLM 框架import argparse
import sys
from collections import defaultdict
from pathlib import Path
from typing import Dict, List, Optional, Sequence, Tupleimport triage_kernel_helpers as kernel_helpers
import triage_overlap_helpers as overlap_helpers
from profile_common import (
    discover_trace_targets,
    framework_display_name,
    load_server_args,
    load_trace_json,
    parse_stage,
    resolve_framework,
    run_profiler,
)MIN_RENDER_SHARE_PCT = 1.0
MAPPING_KERNEL_SAMPLE_LIMIT_PER_NAME = 16
​
​
def build_triage_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        prog="analyze_llm_torch_profile.py",
        description=(
            "Compact LLM torch-profiler triage entrypoint for SGLang, vLLM, and "
            "TensorRT-LLM. "
            "This prints three tables: kernel mapping, overlap opportunities, "
            "and fuse opportunities. "
            "Use either a single trace / profile input or a mapping + formal two-trace pair."
        ),
    )
    # --framework 支持自动检测或指定框架
    parser.add_argument(
        "--framework",
        type=str,
        default="auto",
        choices=["auto", "sglang", "vllm", "trtllm", "tllm", "tensorrt-llm"],
        help=(
            "Serving framework. Use auto to detect from trace contents, path hints, "
            "or URL features."
        ),
    )
    # --input / --url / --output-dir 等参数省略以节省篇幅
    return parser
.claude/skills/llm-torch-profiler-analysis/scripts/profile_common.py dependency-wiring

共享工具模块,提供跨框架的字符串规范化、框架别名转换等核心功能

# profile_common.py - 统一 LLM torch-profiler 技能脚本共享工具from functools import lru_cache# 框架别名映射:将各种输入转换为标准内部键
FRAMEWORK_LABELS = {
    "auto": "auto",
    "sglang": "SGLang",
    "vllm": "vLLM",
    "trtllm": "TensorRT-LLM",
}@lru_cache(maxsize=65536)
def _normalize_text_cached(text: str) -> str:
    """带缓存的文本规范化,将空白字符压缩为单空格。"""
    text = text.strip()
    if not text:
        return ""
    for token in (" ", "\t", "\n", "\r", "\v", "\f"):
        if token in text:
            return " ".join(text.split())
    return textdef normalize_text(value: object) -> str:
    """统一文本规范化入口。"""
    return _normalize_text_cached(value if isinstance(value, str) else str(value))def canonicalize_framework(value: object) -> str:
    """将框架名称别名转换为标准键(sglang / vllm / trtllm)。"""
    lowered = normalize_text(value).lower().replace("_", "-")
    aliases = {
        "": "auto",
        "auto": "auto",
        "sglang": "sglang",
        "sgl": "sglang",
        "vllm": "vllm",
        "trt": "trtllm",
        "tllm": "trtllm",
        "trtllm": "trtllm",
        "tensorrt-llm": "trtllm",
        "tensorrtllm": "trtllm",
    }
    return aliases.get(lowered, "auto")

评论区精华

B200 单 GPU suite runner 命名不一致 question

reviewer 指出 `stage-b-kernel-unit-1-gpu-b200` 的 suite 名暗示单 GPU,但 runner 配置为 `4-gpu-b200`,与其他单 GPU suite 使用 `1-gpu-h100` 的模式不一致。

结论:未在 PR 中修复,可能需要确认 runner 可用性后添加注释或调整命名。 · unresolved

B200-small suite runner 缺少 low-disk 后缀 style

reviewer 指出 `stage-c-test-4-gpu-b200-small` 的 runner 名称在 write-sglang-test 中为 `4-gpu-b200`,但 CI 工作流中实际使用 `4-gpu-b200-low-disk`,建议统一。

结论:reviewer 给出了修改建议,但 PR 未采纳。 · resolved_with_suggestion

GB200 suite 状态更新 documentation

reviewer 注意到 GB200 套件的状态从 'registered but not wired' 更新为 'wired and stable',但未提出问题。

结论:文档更新正确,无争议。 · 已解决

风险与影响

主要风险集中在脚本路径和 API 变更上:sglang-torch-profiler-analysis 下的旧脚本被删除,如果用户(如 AI 辅助工具或其他维护者)硬编码了旧路径,可能会找不到脚本。但.claude/skills 目录主要用于 AI 辅助,影响面小。CI 文档的 runner 标签与真实 CI 配置可能存在不一致,若未同步修正可能导致开发者参考错误的配置。

直接影响 .claude/skills 下的 AI 辅助技能脚本和文档,不涉及 SGLang 运行时逻辑。对使用 torch profiler 分析的开发者有利,统一后的工具支持更多框架并提供了更丰富的分析选项。CI 文档的更新帮助团队了解 Blackwell 测试套件,降低维护成本。

脚本路径变更 CI 文档与实际可能不一致

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论