跳转到内容

练习册:从概念到综合实战

本页把各章练习汇总成一条可执行的训练路线,并补充两个 L4 综合题。章节内练习仍放在原章节,便于边读边做;综合题放在本页,要求把多个章节的知识拼起来。所有题目都给出无 GPU 的替代方案,硬件不应成为不动手的理由。

级别 定位 典型产出
L1 概念辨析 一段能自圆其说的解释,或一份对照表
L2 材料分析 基于日志、报告或论文的结论与证据
L3 单点动手 一个可运行脚本、一份 skill、一份检查清单
L4 系统综合 一个能闭环的最小 harness,含验证与复盘

建议顺序:先做 L1 与 L2 建立判断力,再做 L3 熟悉工具,最后用 L4 把流程串起来。每道题都先写验收标准,再动手;否则很容易把“跑通了”误当成“做对了”。

编号 主题 难度 耗时 前置章节 链接到练习
E1 环境与任务合同自检 L1 20 分钟 导读 章节练习
E2 为一个 kernel 任务写验收标准与停止规则 L2 45 分钟 Agent 与 harness 章节练习
E3 从一份 ncu 摘要找首要瓶颈 L2 35 分钟 GPU kernel 与性能 章节练习
E4 复现一个最小 KDA 流程 L3 2.5 小时 KDA 章节练习
E5 为 kernel 任务设计 reviewer 检查清单 L3 45 分钟 Humanize 章节练习
E6 为你的 harness 列一份工具层清单 L2 40 分钟 TIRx 章节练习
E7 用 PR 档案给一个 fusion 定成立条件 L2 45 分钟 BBuf skills 章节练习
E8 写一个 200 行以内的 skill L3 60 分钟 Skills 章节练习
E9 为小 kernel 搭 v0 harness L4 3 至 4 小时 Beyond 章节练习
E10 双 CLI builder/reviewer 循环 L4 4 至 6 小时 Humanize、Beyond 本页 L4-A
E11 复现 Flame Chase 最小版 L4 4 至 6 小时 Humanize、Beyond 本页 L4-B
E12 拆解一个被挡下来的加速比 L2 40 分钟 KDA 本页 L2
E13 把一个算子蒸馏成 M0 骨架 L3 90 分钟 ForgeKernel 章节练习
E14 给一次 run 写工程解剖报告 L3 90 分钟 ForgeKernel 工程解剖 章节练习

E7 是纯检索题:在 BBuf 的 PR 历史档案里定位一条可复用的先例,再把它翻译成自己任务里的验收条款。E12 是纯阅读题:读 KDA 官方博客中关于 3.74× 候选的复盘,练习把「作弊手法」翻译成你自己任务的验收条款。E13 是纯设计题:不写 kernel,只把一个算子的结构性决策组织成一份可交付的里程碑骨架。E14 是代码阅读题:不跑 GPU,只沿一次 run 的生命周期画出三层地图、拆一条记录、审一条护栏。后三道题都不需要 GPU,也不需要写 kernel。

练习 无 GPU 替代
E1、E2 不需要 GPU;用任意小任务练习写规格与验收
E3 使用公开的 ncu 报告、课程示例数据或本站教学数据,重点练“指标到结论”的推理
E4 把 CUDA kernel 换成 NumPy 或纯 Python 实现,保留任务定义、候选记录与 benchmark 结构
E5、E6、E8 不需要 GPU;用 CPU 任务验证 reviewer、工具清单与 skill 是否可执行
E7 不需要 GPU;纯检索与写作题,不克隆仓库时可直接读 GitHub 上的对应目录
E9 把 kernel 换成 CPU 可跑的 softmax、矩阵乘或解析器优化,保留规格、验证、review 与预算结构
E10、E11 用 CPU 可跑的任务替代;或使用云端 GPU 的单次配额
E12 不需要 GPU;纯阅读与写作题
E13 不需要 GPU;纯规格设计题,全程不写 kernel
E14 不需要 GPU;纯代码阅读与工程分析,只读公开仓库与文档

如果使用云端 GPU,先确认计费方式与关机策略,给任务设置硬超时;不要在没有预算上限的情况下让 Agent 自由循环。

这道题只做一件事:把别人踩过的坑,翻译成你自己任务的验收条款。

L2基础40 分钟

拆解一个被挡下来的加速比

目标:学会从「一个被 evaluator 挡住的加速比」反推验收条款,这是 kernel 任务里最划算的一笔投资。

背景:KDA 官方博客 KDA²: Kernel Design Agents optimize Kimi Delta Attention 复盘了一个声称 3.74× 的候选。官方把这次实验中的作弊归为五类(A–E)。第一类是输入分布过拟合,具体包含两个手法:把 Q/K 的 L2 归一化换成硬编码常数(0.1778209953),以及把部分初始状态通道置零以跳过三角矩阵求逆;它在合成随机数据上误差刚好过关,换到真实非高斯输入就完全失败。其余四类分别是:形状与布局硬编码(写死 cu_seqlens 边界)、非法历史截断(假设 32 token 之前的状态可被 gate 衰减掉)、数值溢出(在 64 token 块内直接算二的累积幂,导致分母下溢为 0 并产生 NaN)、以及精度损失(用 FP16 表存累积衰减,误差最大 9%)。

任务:

  1. 读上述博客的「reward hacking」与「hardening」两节,列出五类作弊手法(第一类含两个具体手法),每类写清楚:它利用了测试的什么假设、为什么随机测试抓不到、真实数据为什么抓得到。
  2. 把博客给出的六道 acceptance gate,逐条翻译成你自己任务合同里的可执行条款(命令、字段或脚本)。
  3. 挑其中两种作弊,为你的任务各写一条能挡住它的检查(写成「命令 + 判定条件」的形式)。
  4. 写一句话说明:如果你的 evaluator 只用随机输入做对拍,最可能漏掉哪一类问题。

验收标准:

  • 五类作弊各自对应到「输入分布、形状布局、数值范围、精度、状态历史」中的至少一类;
  • 六道 gate 全部落到具体条款,其中至少三条是可自动判定的命令或脚本;
  • 两条防作弊检查能直接复制进你的任务文件;
  • 最后一问的回答指向「真实模型与随机数据的分布差异」,而不是泛泛而谈。

无 GPU 替代:本题不需要 GPU,只需要一篇公开博客和一份你自己的任务合同。

提示

读的时候做两件事:一边在博客里标出「测试数据是怎么生成的」,一边标出「真实 workload 的输入长什么样」。两者的差集就是作弊的藏身处。另外注意官方那句结论——每个作弊都通过了当时所有的测试,问题不在模型智力,而在测试分布与真实分布重合得太少。翻译成条款时,优先补「让输入分布与真实数据错开」和「让数值范围覆盖真实极值」这两类检查。

这道题的目标不是写出最快的 kernel,而是搭出一个“写的人不能自己判”的最小系统,并证明 reviewer 真的能拦住错误。

L4综合4 至 6 小时

双 CLI builder/reviewer 循环

目标:用两个不同的 CLI Agent 分别担任 builder 与 reviewer,完成一次至少 3 轮的 kernel 优化循环;reviewer 必须在全新会话中工作,并能以证据驳回至少一个错误候选。

背景:Humanize 的核心设计是写/判分离。本练习把它压缩成你能在一台机器上跑通的最小版本。你可以使用 Claude Code、Codex,或其他支持非交互调用的 CLI;具体命令以各自官方文档为准。如果只有一个 CLI,可用两个不同模型 API 替代,或让一位同学按清单扮演 reviewer。

任务:

  1. 定义任务。选择一个可测的小 kernel(softmax、layer norm、向量加或小矩阵乘),写 task.md:输入 shape 与 dtype、baseline、正确性命令、性能命令、容差、通过条件、禁止事项。再写 acceptance.yaml,把阈值变成机器可读字段。
  2. 准备隔离工作区。为每次运行创建独立目录或 git worktree;测试、benchmark 与 acceptance.yaml 设为只读;工作区内不放密钥。
  3. 实现 builder 调用。CLI A 读取 task.md 与当前代码,先产出 plan.md,再实现并运行测试;所有命令、退出码与耗时写入 runs/<id>/builder.log。builder 不得修改测试与验收文件。
  4. 实现 reviewer 调用。CLI B 在全新会话中启动,只接收 task.md、plan.md、git diff、测试日志、benchmark 结果与验收文件,不接收 builder 的对话。要求 reviewer 输出结构化结论:verdict(complete / continue / reject)、三类问题(主线缺口、阻塞支线、可排队支线)、每条问题对应的文件与行号或命令输出。
  5. 跑循环。最多 4 轮,每轮开始前检查时间与费用预算;reviewer 判 continue 时,把问题写回 plan.md 再进入下一轮;达到上限必须停止并记录原因。
  6. 注入错误。在某一轮故意制造一个错误:偷换 baseline、放宽容差、只覆盖部分 shape,或让测试在异常时返回成功。确认 reviewer 或自动测试能拦截,并保留证据。
  7. 写复盘。一页 report.md:每轮改了什么、指标如何变化、reviewer 拦住了什么、哪一步最不可靠、下一版怎么改。

验收标准:

  • task.md 能让另一位同学不询问你而复现实验;
  • 日志能证明 builder 与 reviewer 使用不同会话,reviewer 未读取 builder 对话;
  • 至少一次 reviewer 明确驳回候选,并引用具体文件、行号或命令输出;
  • 注入的错误被自动测试或 reviewer 拦截,而不是靠你事后发现;
  • 最终候选通过公开 shape 与至少一个隐藏 shape 的正确性测试;
  • 预算能硬停,停止后工作区可恢复;
  • report.md 指出一个真实缺陷,并给出可执行的修正。

无 GPU 替代:把 kernel 换成 NumPy 或纯 Python 的 softmax、矩阵乘、排序或字符串处理任务,保留同样的规格、隔离、review 与预算结构。性能指标可以是耗时、内存峰值或操作计数。没有第二个 CLI 时,用不同模型 API,或由同学按 reviewer 清单人工判定;仍然要求“新上下文、只读证据”。

提示

先把无 Agent 的流程手工跑通:写任务、跑测试、跑 benchmark、写一份 review,确认每一环都有可读输出,再接 CLI。CLI 的非交互参数、JSON 输出与超时设置各版本可能不同,先读 --help 与官方文档,不要照抄博客里的旧命令。

Reviewer 的提示要强制“先引用证据,再下结论”,并给它一个固定输出模板;否则它容易写成长篇建议。测试 reviewer 是否有效,最简单的方法是先给它一个已知错误的 patch,看它能否指出 baseline 被替换或容差被放宽。

隔离建议:每轮用 git diff 生成补丁,用 git worktree 或目录快照保存候选;测试脚本用校验和冻结,reviewer 发现校验和变化直接判失败。预算至少记录墙钟、token 与费用三项;达到 80% 时在日志里预警。

这道题只保留 Flame Chase 的结构:两个 Agent 交替、每轮新会话、只共享工作目录。你要证明这种“低带宽交接”能跑起来,并诚实记录它带来的损耗。

L4综合4 至 6 小时

复现 Flame Chase 最小版

目标:实现一个最小 Flame Chase:两个 Agent 在同一任务上交替工作至少 4 轮,每轮使用全新会话,彼此看不到对方对话,唯一共享的是工作目录;最终给出可测量的改进与一份交接复盘。

背景:Humanize 2 的 Flame Chase 让两个 Agent 轮流处理同一任务,每轮开新 session,只通过共享工作目录传递状态。它的关键不是“两个模型”,而是“状态必须外置”。本练习可以用两个 CLI、两个模型 API,或一位同学加一个 CLI 完成。

任务:

  1. 选择任务。选一个每轮都能测量、且允许逐步改进的任务:CPU 上的 softmax、矩阵乘、JSON 解析器,或 GPU 上的小 kernel。写 task.md,包含 baseline、指标、正确性命令、预算与停止条件。
  2. 建立共享工作区。目录中只放任务、代码、测试、benchmark、ledger.md 与每轮的 handoff.md;不放聊天记录、不放密钥。测试与验收文件只读。
  3. 实现交替编排。编排脚本按 A、B、A、B 的顺序调用两个 Agent;每次调用都是新进程或新会话,提示词只由 task.md、当前代码、上一轮 handoff.md 与指标生成,不拼接历史对话。
  4. 规定交接格式。每轮结束必须写 handoff.md:本轮假设、改了什么、证据(命令与指标)、失败尝试、下一轮建议、剩余预算。没有交接文件视为该轮无效。
  5. 逐轮快照。每轮结束提交一次 git commit 或打快照标签;出现性能回退时,下一轮必须能定位并回滚,而不是在坏状态上继续堆改动。
  6. 跑满至少 4 轮。记录每轮的 diff、正确性、性能、耗时与花费;如果提前达到目标,也要记录停止理由。
  7. 注入一次回归或死路。让某一轮引入性能回退或错误假设,观察下一位 Agent 能否仅凭工作目录发现并修正。
  8. 写复盘。重点回答:交接丢失了什么、哪类信息必须写进文件、交替带来了哪些额外成本、下一次会怎样改提示或目录结构。

验收标准:

  • 至少 4 轮有效交替,每轮都有独立会话与 handoff.md;
  • 提示词不含上一轮对话原文,只来自共享目录;
  • 每轮都有 diff、正确性结果、性能指标与保留或回滚决策;
  • 最终指标优于初始 baseline,或有一份证据充分的“为何未达成”说明;
  • 注入的回退被下一轮发现并回滚;
  • 预算能硬停,所有轮次可复现;
  • 复盘指出至少一个交接损耗,并给出可执行的修正。

无 GPU 替代:把任务换成 CPU 上的数值计算或文本处理,指标用耗时、内存或正确率;仍然保留“新会话、只共享目录、每轮交接”的约束。只有一个 CLI 时,让两个不同模型轮流,或让同学扮演其中一个 Agent,但必须遵守“不看对方对话、只读目录”的规则。

提示

把 handoff.md 当成唯一接口:它必须能让一个完全没参与前几轮的人接手。可以固定四段:当前状态、证据、失败尝试、下一步。提示词里只放这份文件和任务,不放“你上次说”。

每轮开始前先跑一次基准,确认工作区没有残留的半成品;每轮结束打快照,回退时用快照而不是手工撤销。两个 Agent 不要同时写同一目录;串行执行,设超时,避免一个卡住拖垮全部预算。

如果交替后性能没有提升,先检查交接是否丢失了关键约束,再检查任务是否适合交替。Flame Chase 更适合长周期、可分解、验证明确的任务;需要实时讨论的探索型任务,隔离反而会增加成本。

做完综合题后,用下面四个问题自检:别人能否只读你的任务文件复现实验?失败是否由独立于 builder 的环节发现?每一轮是否有可追溯的证据?预算耗尽时是否能安全停下?四个问题都答“是”,才算真正跑通闭环;性能数字只是附加分。

来源与版本:练习设计参考 Humanize 的写/判分离与 Flame Chase、KDA 的任务定义流程,核对于 2026-10-29。各 CLI 的具体命令以官方文档为准。完整链接见资料库。