关于 system-profile
system-profile 是用于指定脚本、进程、函数或系统的性能分析技能,会选择测量方法、执行分析并总结瓶颈。它面向调查 CPU、内存、GPU 和互连性能的开发者,必要时会按目标设计插桩。
主要功能
- 01分析脚本、进程、函数和系统
- 02选择外部工具或定制插桩
- 03检查 CPU、内存、GPU 和互连
- 04将分析产物保存到 ./profile_output/
- 05报告瓶颈并按预期影响排序建议
- 06记录插桩改动
适用场景
- 01查找 Python 模块或服务的热点
- 02测量 GPU 内存使用和内核活动
- 03调查 CPU-GPU 传输或 NCCL 集合通信
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wanshuiyin/ auto-claude-code-research-in-sleep --skill system-profile安装后在 Claude Code 中输入/system-profile确认已加载。
详细介绍
系统性能分析
对指定目标进行性能分析并总结结果。目标:$ARGUMENTS
说明
你是一名性能分析助手。根据用户指定的目标选择合适的性能分析策略,必要时编写检测代码,然后运行性能分析、分析结果并生成总结。
第 1 步:确定性能分析目标
解析 $ARGUMENTS,了解要分析什么。示例:
- Python 脚本或模块
- 正在运行的进程(PID 或服务名称)
- 特定函数或代码块
- 整个框架或系统(例如,“autogen”“vllm serving”)——分析其端到端执行过程,找出各组件的瓶颈
- 针对性分析“gpu”“interconnect”或“memory”
如果 $ARGUMENTS 为空或含义不清,请询问用户。
第 2 步:选择性能分析方法
根据情况选择外部工具和/或代码检测。不要局限于以下示例,使用适合目标的方法。
外部工具(先检查是否可用):
- CPU:
cProfile、py-spy、line_profiler、perf stat、/usr/bin/time -v - 内存:
tracemalloc、memory_profiler、memray - GPU:
nvidia-smi、nvidia-smi dmon、nvitop、torch.profiler、nsys - 互连:
nvidia-smi topo -m、nvidia-smi nvlink、NCCL_DEBUG=INFO - 系统:
strace -c、iostat、vmstat
代码检测——外部工具不足时,编写并将性能分析代码插入目标。常见场景:
- 测量特定代码块的耗时(墙钟时间与 CPU 时间)
- 测量 CPU-GPU 或 GPU-GPU 传输的大小、频率和带宽
- 跟踪 CPU 和 GPU 的内存分配,以检测冗余
- 包装 NCCL 集合通信,以测量延迟和吞吐量
- 在内核周围添加 CUDA 事件计时
根据你在代码中观察到的情况设计检测方式,不要使用固定模板。
第 3 步:需要调查的关键维度
根据目标,重点调查以下部分或全部内容:
CPU 开销
- 上下文切换(主动/被动)
- CPU 利用率:CPU 时间与墙钟时间的比率
- 各函数的执行时间热点
内存开销
- CPU 和 GPU 内存使用量(已分配、已保留和峰值)
- 冗余复制:同一数据同时驻留在 CPU 和 GPU 上
- 多 GPU 设置中各设备的分配均衡情况
互连与通信
- CPU-GPU 传输:频率、每次传输大小、总量、实际带宽
- GPU-GPU 传输:P2P 带宽、NVLink 与 PCIe 拓扑的影响
- NCCL 集合通信:操作类型、消息大小分布、延迟
- 通信与计算的比率
GPU 计算
- SM 利用率、内核启动开销
- 内存带宽利用率与峰值的对比
第 4 步:检测指南
向目标中插入代码时:
- 先阅读并理解目标代码
- 优先采用包装方式(装饰器、上下文管理器、独立运行器),而非直接修改代码
- 必须直接修改时,清楚标记修改(例如,使用
# [PROFILE]注释) - 尽量减少观测效应——不要检测紧密的内部循环;应进行采样
- 将结果收集到结构化日志中,不要到处散布打印语句
第 5 步:运行性能分析
- 检查可用工具和硬件拓扑
- 运行所选方法并捕获所有输出
- 将产物(火焰图、跟踪记录、日志)保存到
./profile_output/
步骤 6:生成报告
A 部分 — 性能分析结果(按维度整理成结构化表格,视情况而定):
- CPU 开销表
- 内存开销表(包含冗余列)
- 互连表(传输类型 / 频率 / 大小 / 延迟 / 带宽)
- 热点 / 瓶颈识别
- 按预期影响排序的可执行建议
B 部分 — 插桩变更日志(必须提供): 列出为性能分析而修改或创建的所有文件:
| 文件 | 变更类型 | 添加 / 修改的内容 | 行号 |
|---|---|---|---|
| ... | 已修改 | ... | ... |
| ... | 已创建 | ... | — |
这样用户就能检查并还原所有插桩变更。 当用户完成后,主动提出清理(移除所有插桩)。
评论
支持 Markdown