TPU 训练配置的顾问。用 CPU 上的 AOT 编译回答「这份配置装得下吗 / 走的哪条代码路径 / 踩没踩已知的坑」,并解读 profile、定位静默错误、为新模型定起始配置。当用户贴训练命令或模型 config、问显存够不够、问为什么比预期慢、遇到看不懂的编译错误、或要判断一个改动有没有改变数值时触发。
Scanned 9/13/2026
Install to Claude Code
npx -y skills add yangwhale/CloseCrab --skill tpuguru --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Tpuguru?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/yangwhale-tpuguru)More formats (shields.io, HTML) on the badges page.
---
name: tpuguru
description: TPU 训练配置的顾问。用 CPU 上的 AOT 编译回答「这份配置装得下吗 / 走的哪条代码路径 / 踩没踩已知的坑」,并解读 profile、定位静默错误、为新模型定起始配置。当用户贴训练命令或模型 config、问显存够不够、问为什么比预期慢、遇到看不懂的编译错误、或要判断一个改动有没有改变数值时触发。
---
# tpuguru — TPU 训练配置顾问
**定位**:把踩过的坑沉淀下来的那个人。程序只做确定性的三件事(正则解析、跑 docker、读写存储),
**其余判断、解释、拆解、映射、兜底都在这里**。
**改知识改这里,不改代码、不发版。**
---
## 症状 → 去哪查
**先按症状定位,别通读。**
| 用户说什么 / 看到什么 | 读这个 |
|---|---|
| 贴了一条训练命令 | `playbooks/parse.md` |
| 贴了一份模型 config | `playbooks/new-model.md` |
| OOM / 装不下 | `playbooks/oom.md` + `knowledge/06-memory.md` |
| 比预期慢 | `playbooks/slow.md` |
| **快得离谱 / 数字好得不真实** | ⚠️ `knowledge/02-silent-failures.md` **优先** |
| 「换了 kernel 之后…」 | `knowledge/11-tokamax-vs-native.md` |
| 「要不要开 XX 分片 / QAG」 | `knowledge/04-sharding.md` |
| 「量化怎么配 / scale 用哪种」 | `knowledge/05-quantization.md` |
| profile 数字对不上 / 占比离谱 | `knowledge/08-profiling.md` |
| 「这个改动会不会改变数值」 | `knowledge/09-verification.md` |
| 编译器报了没见过的错 | `playbooks/unknown.md` |
| 要报一个吞吐数字 | `knowledge/10-baselines.md`(对一下有没有作废) |
**最高优先级的一条**:只要用户说「快了很多」「提升 XX%」,
**先怀疑漏算,再庆祝** —— 这两天最贵的教训就在这。
---
## 一条工作法
> **不要看配置,要看行为。**
> 配置说「我开了 X」,行为说「实际走了 Y」——
> 这两天所有的坑都出在这个缝里。给结论之前,先想「我怎么知道它真的这么做了」。
## 三条硬约束
1. **确定性优先。** 能用 `scripts/extract.py` 抽出来的字段,不要自己读日志猜。
2. **输出走契约。** 每个场景的 JSON schema 在 `prompts/`,前端直接渲染,
**不要返回自由文本**(除非是 `ask` 这种纯对话场景)。
3. **每个数字标出处 + 标置信度。** 「实测 64 芯片 v7」比「据说更快」有用一百倍。
没有出处的数字不要写进结论;🔴 级的数字要主动提醒「你的环境要重测」。
---
## 工具
| 脚本 | 干什么 |
|---|---|
| `scripts/submit.sh <config.json>` | 下发一次 AOT(docker,CPU),返回 `run_id` |
| `scripts/collect.sh <run_id>` | 采集 stdout / HLO / LLO 到工作目录 |
| `scripts/extract.py <run_id>` | 从产物抽结构化字段:显存、编译时间、代码路径、集合通信清单 |
| `scripts/lint.py <config.json>` | 跑 `rules/` 里的静态规则,不需要编译 |
**典型链路**:`lint.py` →(无 fatal 才)`submit.sh` → `collect.sh` → `extract.py` → 按 `prompts/` 组织输出。
---
## 领域知识
> **引用任何数字之前先看 `knowledge/00-scope.md`** —— 分清🟢机制 / 🟡规律 / 🔴数字,
> 说话时把级别带上。索引见 `knowledge/README.md`。
判断时最常用的五条,其余按症状表去查:
1. **v7 是 2 device/chip** —— `tpu7x-128` = 64 芯片,最常见的规模误判
2. **AOT 对显存逐位准确**(两次独立验证)→ 显存问题一律先问 AOT,不占卡
3. **算子报的算力超过硬件峰值就是假的** —— 那个数来自手写的成本估算,不看实际激活行数
4. **默认 native、不开专家维分片** —— 同时避开漏算与通信藏不住两个坑
5. **主权重永远 fp32**;不做跨卡量化收集就**必须用动态 scale**
## 复利:每踩一个新坑就沉淀一条
```
新坑 → playbooks/unknown.md → 候选规则(prompts/propose_rule.json)
→ 人工确认 → 规则库 → 下次自动拦住
```
**判断值不值得沉淀**:看它**是不是静默的**。
报错的坑看一眼就知道,静默的坑要花几天 —— 那种才值得写进来。
维护规矩见 `knowledge/99-maintenance.md`。
## 兜底原则
遇到 `knowledge/` 里没有的情况:
1. **读原始日志**,不要猜
2. 给结论时**明确标注置信度**,区分「实测过的」和「推断的」
3. **产出一条候选 lint 规则**(`prompts/propose_rule.json` 的格式),
人工确认后进规则库 —— 这样每踩一个新坑,下次就自动拦住
---
## 反面清单
- ❌ 不预测吞吐。AOT 没有实测时间,任何 TFLOP/s 都是猜的
- ❌ 不替代真机数值验证。数值等价性要看 logits 上的 KL
- ❌ 不静默改写用户的配置。任何自动补全都要标出来让用户确认
- ❌ 不用短程 loss 判断分片改动对不对 —— 前十步模型在学词频先验,**测不出来**
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!