本文へ移動
cccskills
無料GitHub で公開

mindstudio-cpu-binding

Use when diagnosing NPU + PyTorch or LLM Serving Host CPU affinity, NUMA locality, cgroup/cpuset constraints, CPU range conflicts, PyTorch/runtime threading, DataLoader, tokenizer, scheduler, vLLM-Ascend, SGLang, TTFT, TPOT, tokens/s, QPS, or multi-rank/multi-worker CPU binding issues.

インストール方法を見る

含まれるファイル(42)

  • SKILL.md16.4 KB
  • assets/architecture-overview.mmd1.3 KB
  • assets/component-class-diagram.mmd2.4 KB
  • assets/data-flow-diagram.mmd732 B
  • assets/use-case-diagram.mmd640 B
  • docs/agent-workflow.md16.7 KB
  • docs/architecture.md4.1 KB
  • docs/binding-rollback-design.md6.1 KB
  • docs/collector-design.md10.9 KB
  • docs/diagnosis-rules.md13.5 KB
  • docs/html-report-design.md7.6 KB
  • docs/question-flow.md15.4 KB
  • docs/snapshot-schema.md13.2 KB
  • README.md8.6 KB
  • scripts/__init__.py805 B
  • scripts/cli.py10.4 KB
  • scripts/collect.py13.5 KB
  • scripts/collectors/__init__.py744 B
  • scripts/collectors/availability.py2.7 KB
  • scripts/collectors/key_processes.py8.0 KB
  • scripts/collectors/linux_cgroup.py9.2 KB
  • scripts/collectors/linux_cpu.py5.8 KB
  • scripts/collectors/linux_proc.py8.2 KB
  • scripts/collectors/npu_topology.py8.0 KB
  • scripts/collectors/runtime_env.py4.6 KB
  • scripts/collectors/runtime_sample.py7.2 KB
  • scripts/collectors/sanitize.py2.0 KB
  • scripts/cpulist.py3.5 KB
  • scripts/diagnose.py17.5 KB
  • scripts/executors/__init__.py754 B
  • scripts/executors/base.py1.1 KB
  • scripts/executors/dry_run.py1.6 KB
  • scripts/executors/internal_script.py1.4 KB
  • scripts/executors/taskset.py1.2 KB
  • scripts/planner.py5.4 KB
  • scripts/process_discovery.py6.3 KB
  • scripts/report.py12.1 KB
  • scripts/script_utils.py1.7 KB
  • scripts/snapshot.py3.0 KB
  • scripts/topology_collect.py8.6 KB
  • scripts/topology_view.py19.2 KB
  • templates/report-template.md9.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

mindstudio-cpu-binding

mindstudio-cpu-binding 是面向 NPU + PyTorch / LLM Serving 工作负载的 Host CPU 绑核优化 Advisor Skill,覆盖 PyTorch 训练、PyTorch 离线/批量推理,以及 vLLM-Ascend、SGLang 等推理服务场景。它指导 Claude 用最少必要问题获取诊断上下文,基于 Host CPU Snapshot 做证据化分析,输出报告、保守/进阶建议、风险、回滚方式和优化前后验证计划。

核心原则:只基于已观测证据下结论;缺失信息必须显式标记;任何改变运行状态的动作都必须先获得用户明确确认。

适用场景

使用本 Skill 当用户需要:

  • 分析 NPU + PyTorch 训练、PyTorch 离线/批量推理、vLLM-Ascend 或 SGLang 推理服务的 Host CPU 绑核问题。
  • 判断进程、rank、worker、engine 或实例是否未绑核、跨 NUMA、CPU range 过宽或过窄。
  • 检查 Docker、K8s、Slurm、cgroup/cpuset 对真实可用 CPU 的限制。
  • 分析 PyTorch、OpenMP、MKL/BLAS、DataLoader worker、tokenizer、scheduler、API server 或 engine worker 线程是否超过有效 CPU。
  • 排查多 rank、多 worker、多实例之间 CPU range 重叠或 NPU/NUMA locality 不匹配。
  • 生成 CPU 绑核诊断报告、保守优化方案、进阶优化建议、风险说明、回滚方式和 before/after 验证计划。

如果用户只询问架构、模板、路线图或能力边界,不进入采集和诊断流程,只回答对应设计问题。

非目标

不要把本 Skill 扩展到以下范围,除非用户明确要求重新定义范围:

  • ftrace、eBPF、perf 深度 Host Bound 诊断。
  • IRQ affinity 调整。
  • CPU governor、kernel boot 参数、系统级隔离核配置。
  • 自动修改 Docker、K8s、Slurm 或节点级 cgroup 配置。
  • 自动重启、kill 或迁移线上服务。
  • 无用户确认地执行 taskset、numactl、内部绑核脚本或任何改变运行状态的命令。

中高风险动作只能输出建议、风险和人工操作步骤,不能自动执行。

安全边界

  • 采集阶段默认只读。
  • 诊断结论必须区分“已观测证据”和“推断结论”。
  • 缺少 NPU -> NUMA 映射时,不得猜测 locality。
  • 缺少 cgroup/cpuset 信息时,不得声称推荐 CPU range 一定可用。
  • 生成推荐 CPU range 时,必须优先考虑 cpuset_cpus_effective 等真实可用 CPU 边界。
  • 所有可能改变运行状态的命令都必须先展示风险、回滚方式和验证方式,并等待用户明确确认。
  • 只读发现和只读采集命令可以直接给出可执行命令并说明意义,让用户选择是否执行;不要把 PID / worker / NPU 映射推导负担转嫁给用户。
  • 对线上服务、容器编排、Slurm、K8s 节点级配置,不自动修改。

快速流程

用户问题
  -> 判断是否为具体诊断
  -> 场景澄清
  -> 输入完整性检查
  -> 生成只读采集计划或读取已有 Snapshot
  -> Snapshot 质量检查
  -> 执行诊断规则
  -> 输出报告摘要和 HTML/JSON 产物
  -> 给出保守/进阶方案
  -> 等待用户确认后才可执行低风险临时绑核
  -> 保存 rollback-state 并提供回滚
  -> 设计 before/after 验证计划

场景澄清

只问阻塞采集或影响关键判断的问题。先根据用户描述识别真实问题场景,再提问;不要机械地问“训练还是推理”。能从 Snapshot 得到的信息,不要求用户手填。提问必须一次只问一个问题,优先使用选择题,并为用户提供“不确定 / 先帮我看 / 使用默认值”选项。

场景识别

用户问题特征进入分支
step time 抖动、samples/s 低、rank 间不均衡、DDP/HCCL 训练波动PyTorch training
batch inference 吞吐低、离线推理延迟、多进程推理抢 CPUPyTorch offline/batch inference
vLLM-Ascend、SGLang、OpenAI API server、TTFT、TPOT、tokens/s、QPS、p99、timeoutLLM serving inference

如果用户已经明确说了 vLLM-Ascend 或 SGLang,直接进入 LLM serving 分支,不再泛泛追问是否 PyTorch 推理。

单步选择式提问模板

如果用户描述已经能判断场景,直接进入该场景的下一问;不要重复询问场景。如果无法判断场景,只问一个选择题:

你要分析的是哪类任务?

1. PyTorch 训练
2. PyTorch 离线/批量推理
3. vLLM / SGLang / OpenAI API 这类 LLM Serving
4. 不确定,先帮我自动发现

PyTorch training 的问题目标选择:

你最想改善哪个问题?

1. step time 抖动或长尾高
2. samples/s 或整体吞吐低
3. rank 之间速度不均衡
4. NPU 利用率不稳定
5. 不确定,先帮我看

PyTorch offline/batch inference 的问题目标选择:

你最想改善哪个问题?

1. 批量推理吞吐低
2. 单次请求延迟高
3. 多进程/多实例之间抢 CPU
4. NPU 利用率不稳定
5. 不确定,先帮我看

LLM serving 的问题目标选择:

你最想改善哪个问题?

1. 首字响应慢
2. 单个 token 生成慢
3. tokens/s 或 QPS 低
4. 延迟抖动或 p99 高
5. timeout / 请求失败
6. 不确定,先帮我看

运行位置选择:

这个任务大概运行在哪里?

1. 直接在服务器上
2. Docker/容器里
3. K8s/容器平台里
4. Slurm/作业调度里
5. 不确定

只读发现确认:

我可以先运行只读进程发现命令来找候选 PID 和 NPU 映射。
它只读取 `ps` 和 `npu-smi`,不修改系统状态。

是否执行?

1. 执行
2. 先不执行,我提供已有 snapshot
3. 先不执行,我手动提供 PID

候选确认和 Snapshot 采集确认也必须一次只问一个问题。采集后或信息不足时,才补问 DataLoader、OMP/MKL/torch 线程、TP/DP/PP、tokenizer、benchmark 指标等专业信息;补问也应使用单个选择题或明确说明“不提供也可以继续”。

提问规则

  • 每轮只问一个问题;不要使用“我先确认 3 点 / 4 点 / 5 点”的批量问法。
  • 优先用选择题;选择项使用用户语言,并提供“不确定,先帮我看”或“使用默认值”选项。
  • 用户已经提供的信息不要重复问。
  • 优先确认主要异常指标、部署方式,以及是否允许运行只读发现命令;PID、进程/worker/instance 到 NPU 的映射应优先由只读发现生成候选。
  • 如果用户不知道目标 PID 或 worker/NPU 映射,先说明只读进程发现命令的意义并给出可执行命令,让用户选择是否执行;发现后让用户确认候选,而不是要求用户手工猜 PID 或推导完整映射。
  • 不询问 CPU/NUMA 拓扑、当前 affinity、cgroup/cpuset、NPU locality、runtime CPU 使用率等采集器能自取的信息。
  • 不把 LLM serving 场景套用 DataLoader 问题;不要把 API server、scheduler、engine worker 都统称为 rank。
  • 如果用户已有 Snapshot,跳过采集提问,直接进入 Snapshot 质量检查。

详细提问协议见 docs/question-flow.md。

Snapshot 输入与采集

优先使用用户已有的 Snapshot JSON。Snapshot 数据契约见 docs/snapshot-schema.md。

如果用户没有 Snapshot,指导用户在目标 Linux NPU 节点运行只读采集。采集命令必须满足:

  • 指定目标 PID。
  • 输出 JSON Snapshot。
  • 只读访问 /proc、/sys、cgroup、NPU topology、PyTorch/torch_npu 环境信息,以及 LLM serving 相关进程和线程信息。
  • 将缺失字段写入 availability.missing、availability.partial 或 availability.errors。
  • 不修改 affinity、cgroup、系统配置或进程状态。

当前 Skill 包内 scripts/ 是辅助原型脚本目录,已包含 collect/analyze/report、拓扑采集和进程发现入口;这些入口用于只读采集与诊断验证,仍按原型 CLI 对待。当前已有 Snapshot 时可用原型分析入口:

python scripts/cli.py analyze --snapshot <snapshot.json> --out out

仓库开发环境可用 samples/snapshot.multi-rank.json 作为离线示例输入。

当前拓扑采集解析原型支持两种模式:

python scripts/cli.py collect-topology --lscpu-file samples/lscpu.sample.txt --npu-smi-topo-file samples/npu-smi-topo.sample.txt --out out/topology.json
python scripts/topology_collect.py --out out/topology.json

第一条用于离线解析样本文本,第二条用于真实 Linux NPU 设备上的只读 live 验证。live 原型只执行 lscpu 和 npu-smi info -t topo,用于验证能否采集支撑拓扑渲染的数据,不修改系统状态。

当前进程发现原型也支持两种模式:

python scripts/cli.py discover-processes --ps-file samples/ps.sample.txt --npu-smi-info-file samples/npu-smi-info.sample.txt --out out/processes.json
python scripts/process_discovery.py --out out/processes.json

第一条用于离线解析样本文本,第二条用于真实 Linux NPU 设备上的只读 live 发现。live 原型只执行 ps -eo pid,ppid,comm,args 和 npu-smi info,用于发现 API server、scheduler、tokenizer、engine worker、rank/worker、runtime 和 NPU 进程候选项。发现结果是候选列表,必须让用户确认后才能作为诊断目标。

Snapshot 质量检查

读取 Snapshot 后先检查质量,再诊断:

  • schema_version 是否支持。
  • target_pids 是否与 processes 对齐。
  • CPU / NPU / NUMA topology 是否存在。
  • NPU topology 和 NPU -> NUMA locality 是否存在。
  • process / thread affinity 是否存在。
  • cgroup/cpuset/cpu quota/throttling 信息是否存在。
  • PyTorch threading/env、DataLoader、serving runtime、tokenizer、scheduler、API server 或 engine worker 线程信息是否存在。
  • runtime sample、Top threads、current CPU、NUMA 分布是否存在。

缺少字段时:

  1. 继续执行有证据支持的规则。
  2. 把不可判断项列入“信息缺口”。
  3. 在报告中明确哪些结论无法下。
  4. 不根据缺失字段做确定性结论。

诊断规则顺序

按以下顺序分析,规则详情见 docs/diagnosis-rules.md:

  1. R010 信息不足。
  2. R007 cgroup/cpuset 与应用绑核冲突。
  3. R001 进程未绑定 CPU。
  4. R003 Rank / Worker / Instance / NPU / NUMA 不匹配。
  5. R002 跨 NUMA 运行。
  6. R004 绑核范围过宽。
  7. R005 绑核范围过窄。
  8. R006 Runtime / PyTorch / Serving 线程过载。
  9. R008 多 rank / 多 worker / 多实例 CPU range 重叠。
  10. R009 SMT 使用策略与目标不匹配。

排序原因:先处理信息缺口和 cgroup 边界,再处理 locality、range、线程数、SMT 和多实例冲突。

输出报告

报告必须优先呈现结论、证据和行动建议,不平铺系统信息。报告模板见 templates/report-template.md。

最终报告至少包含:

  1. 报告摘要。
  2. 当前 CPU 绑定状态。
  3. CPU / NPU / NUMA 拓扑关系。
  4. CPU / NUMA 逻辑 CPU 网格。
  5. 运行时 CPU 使用与竞争情况。
  6. 问题发现。
  7. 推荐绑核方案。
  8. 推荐 PyTorch / Runtime / Serving 线程配置。
  9. 验证计划。
  10. 风险与回滚。
  11. 信息缺口。

拓扑关系 section 必须基于 Snapshot 和诊断计划渲染,不在报告生成阶段重新执行 lscpu、npu-smi 或读取 live /proc。它应先用轻量内联 SVG 展示 Server -> NUMA -> NPU 和 NPU interconnect,再用关系卡片展示 NUMA Node、CPU range、本地 NPU、PID/rank/worker/instance、当前 CPU range、cgroup 有效 CPU range、推荐 CPU range 和跨 NUMA 状态。

结论表达必须基于证据。例如:

  • 应写:根据 Snapshot 中 PID 12345 的 Cpus_allowed_list=0-127,且机器存在 NUMA 0/1 两个节点,当前进程未进行有效 CPU 绑定。
  • 不应写:这肯定导致性能差。

缺少 locality 时应写:当前 Snapshot 缺少 NPU -> NUMA 映射,因此不能判断 Rank/NPU/NUMA 是否匹配。

建议分级

每次输出建议时至少区分保守方案和进阶方案。

保守方案

  • 不修改系统级配置。
  • 只针对目标 PID 或下次启动命令。
  • 使用 cgroup/cpuset 允许范围内的 CPU。
  • 可验证、可回滚。
  • 适合先小范围验证。

进阶方案

  • 可包含启动命令、环境变量、numactl、DataLoader、tokenizer、scheduler、API server、engine worker、OpenMP、BLAS、PyTorch 或 serving runtime 线程池配置建议。
  • 通常需要重启任务。
  • 只作为建议输出,不能自动执行。
  • 必须附带风险、回滚方式和验证指标。

禁止自动执行

  • IRQ affinity。
  • CPU governor。
  • kernel boot 参数。
  • K8s 节点级配置。
  • Docker、K8s、Slurm 配置修改。
  • 自动重启线上服务。

执行与回滚确认

默认只输出 dry-run / preview。

如果用户要求执行低风险临时绑核,必须满足:

  1. PID 仍然存在。
  2. 目标 CPU range 在 cgroup/cpuset 允许范围内。
  3. 已展示当前 affinity、目标 affinity、apply 命令、rollback 命令和风险。
  4. 已保存或要求保存 rollback-state.json,包含 PID、进程启动时间、原始 Cpus_allowed_list、目标 CPU range。
  5. 用户明确确认执行。
  6. 执行后重新采集或查询 affinity,验证是否生效。

taskset 回滚形式:

taskset -cp <original-cpu-list> <pid>

回滚前必须检查 PID 是否仍存在,并尽量通过 /proc/<pid>/stat starttime 判断 PID 是否复用。若 PID 已退出或疑似复用,不自动回滚,要求人工确认。

验证计划

每次优化建议都必须包含 before/after 验证计划,要求相同 workload、相同时长、相同采集方式。

训练场景指标:

  • samples/s。
  • step time avg / p50 / p90 / p99。
  • NPU utilization avg / min。
  • Host CPU utilization by NUMA。
  • context switch。
  • CPU migration。
  • rank 间 step time 方差。

PyTorch 离线/批量推理指标:

  • batch throughput / samples/s。
  • 单请求或 batch latency p50 / p90 / p99。
  • QPS。
  • NPU utilization。
  • Host CPU utilization by NUMA。
  • error rate。
  • 多进程/多实例 p99 latency 方差。

LLM serving 指标:

  • QPS / requests/s。
  • input tokens/s 与 output tokens/s。
  • TTFT p50 / p90 / p99。
  • TPOT p50 / p90 / p99。
  • end-to-end latency p50 / p90 / p99。
  • queueing latency。
  • timeout / error rate。
  • prefill throughput 与 decode throughput。
  • API server、scheduler、tokenizer、engine worker CPU utilization。
  • NPU utilization。
  • Host CPU utilization by NUMA。
  • context switch 与 CPU migration。

成功标准应由业务场景确认;没有业务阈值时,可建议以 throughput/tokens/s 提升、TTFT/TPOT/p99 下降、timeout 下降、NPU utilization 稳定性提升、CPU migration/context switch 下降作为观察目标。

辅助文件

  • docs/architecture.md:架构和组件职责。
  • docs/agent-workflow.md:端到端流程。
  • docs/question-flow.md:提问协议。
  • docs/snapshot-schema.md:Snapshot 数据契约。
  • docs/diagnosis-rules.md:规则 taxonomy。
  • templates/report-template.md:报告模板。
  • docs/binding-rollback-design.md:执行后端和回滚机制。
  • scripts/:当前辅助原型脚本。
  • samples/:本地示例 Snapshot(仓库开发用,不属于安装 Skill 必需内容)。
  • 仓库开发环境中的 ../tests/:辅助原型测试;独立安装 Skill 时通常不存在,不能作为运行依赖。

常见错误

错误正确做法
直接猜测 NPU locality缺少 NPU -> NUMA 映射时标记信息缺口。
忽略 cgroup/cpuset推荐 CPU range 前先看真实可用 CPU 边界。
一次问太多问题先识别 PyTorch training、PyTorch batch inference 或 LLM serving,再问 PID、映射、异常指标和部署方式。
LLM serving 还追问 DataLoadervLLM-Ascend/SGLang 场景优先问 API server、scheduler、tokenizer、engine worker、TTFT、TPOT、tokens/s。
把建议写成确定收益写成待验证假设,并给 before/after 指标。
未确认就执行 taskset只输出 preview,等用户明确确认。
输出 apply 命令但没有 rollback每个改变状态的动作都必须有回滚方式。
扩展到 ftrace/eBPF/perf除非用户明确要求,否则保持 CPU affinity MVP 范围。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

当用户直接要求进行数据集压缩测评,或在量化调优过程中需要使用 AISBench 评测工具输出数据集精度等场景时使用。 本 Skill 负责:使用 AISBench 数据集压缩代码、用 RBF Kernel Herding 算法生成压缩后的数据子集(coreset),并按用户目标交付两种产物之一: ① 接入量化调优主流程:产出独立的 coreset 数据集配置(不覆盖原始数据),回传「全集 config_name + coreset config_name」给编排层,供 evaluation.yaml 切换; ② 仅数据集压缩测评(不做量化调优):基于 example 模板生成「全集测试脚本」和「子集测试脚本」两份 shell 脚本。 暂时支持 AIME 2025 和 GPQA,其他数据集需要再结合 aisbench tools目录下 herding_coreset_selector 源码进行分析。

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

Ascend cluster comparison tool. Invoke when user asks to compare two cluster datasets (DB or TEXT), or to generate cluster_analysis_output from raw profiling data via msprof-analyze and then compare.

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

专门用于 Ascend 集群 Profiling 性能数据的“快慢卡”诊断专家技能。当用户提供【集群性能数据目录/路径】并要求分析【快慢卡】、【慢节点】、【负载不均衡】或【集群瓶颈】时,必须触发此技能。该技能会自动接收集群路径,调度相关工具输出快慢卡的宏观定性与微观根因(如 Host 下发瓶颈、算子计算劣化)。

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

Analyze Ascend NPU collective communication profiling data with a DB-first workflow. Use when the user provides `cluster_analysis_output/cluster_analysis.db`, rank-level `analysis.db`, rank-level `ascend_pytorch_profiler_{rank_id}.db`, together with `profiler_info.json`, and asks about HCCL or hcom communication cost, collective communication TOP ops, wait time, slow rank/straggler, Notify Wait, bandwidth, retry, relay, SDMA/RDMA/HCCS links, communication matrix, or Ascend communication fault patterns.

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

Analyze Ascend NPU computation-side profiling data for single-card runs or a selected rank from multi-card runs. Use this skill when the user asks to diagnose computation bottlenecks, AI Core / AI Vector / AICPU hotspots, dynamic shape overhead, block dim issues, redundant TransData/Transpose/Cast, cross-stream waits, frequency/runtime-state issues, or fusion opportunities.

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

针对昇腾 NPU 上的 PyTorch 模型,识别可做融合算子替换的代码段、替换为 torch_npu 融合算子并做性能/精度验证。当用户提到融合算子、NPU 算子替换、RMSNorm/SwiGLU/RoPE/Attention 融合、torch_npu 亲和算子等关键词是,使用本 Skill。

日本語の概要は準備中です。原文の説明を表示しています。

kali20gakki/msAgent312026年10月10日 更新

kali20gakki のスキルをすべて見る

このスキルの問題を報告する