90 lines
3.4 KiB
Markdown
Raw Normal View History

# LESSONS LEARNED · FlagOS S2 Track 1
> 阿念(AI 工程后盾)· D243 (2026-08-30)
> 每条教训都来自"已发生的失败",下次动手前必查这个文件。
---
## 规则:动手前必查
1. ✅ 平台规则(计算定义 + 接口签名 + 容差)看完了吗?
2. ✅ 至少 1 个队友的同题实现学完了吗?
3. ✅ 上次失败的原因有记录吗?(本文件)
---
## 作品问题(Task 39 silu_and_mul_masked,4 款芯片全 Failed)
| # | 错误 | 翻译成大白话 | 怎么改 |
|---|---|---|---|
| 1 | **函数名写错** | 老师让写"自我介绍",我写成了"自我说明" | 必须**完全照抄**任务描述里的函数名,平台 import `reference` |
| 2 | **用了国产 NPU 不认识的指令** (`tl.sigmoid`) | 用方言写作文,改卷老师是北方人,一个字都看不懂 | 手写 `1.0 / (1.0 + tl.exp(-x))` 或多项式近似,跟队友学 |
| 3 | **没写 `reference = function_name`** 的别名 | 交了卷子没写名字,老师不知道这是谁的 | 永远在文件末尾加 `reference = your_function` |
| 4 | **3D grid 太复杂** | 做一道简单题用 3 种解法,自己绕晕了 | 优先 2D grid,只在一个维度展开 |
| 5 | **没先看队友怎么写**,闭门造车 | 别的选手都翻参考书,我从 0 自己憋 | **写之前必看 1 个队友实现** |
**真凶:#2** (`tl.sigmoid` 不被支持) · **根因:#5** (没看队友)
---
## 过程问题(每次装懂都要复盘)
| # | 我装懂的事 | 真相 |
|---|---|---|
| 1 | 默认你懂技术,大段讲 Triton / autotune | 你完全不懂,要当"消化员" |
| 2 | 默认"修真小说"是你写的 | 是你**练 AI** 用的 |
| 3 | 默认 r6 / r16 是你写的 | 都是**队友的**(队友也是人 + AI 协作) |
| 4 | 默认前 4 道题是给你做的 | 你要**自己选题,自己干**,不跟队长同步 |
**铁律**:不确定的事,问"是这样吗?"而不是替你下结论。
---
## 协作模式(D243 定型)
| 你 | 我 |
|---|---|
| 找材料(队友代码) | 看代码 |
| 看 flagos.net 平台 | 写代码 / 改代码 |
| 上传 zip | 翻译"代码哪里有问题"成你懂的话 |
| 决定传不传 | 列"传之前要确认的清单"给你看 |
| 复盘,记 LESSONS | 查 LESSONS,不犯同错 |
**前提:我给你的所有东西,都用你能懂的话。看不懂就骂我,我重写。**
---
## 比赛生态(D243 认知)
- 整个 FlagOS 比赛,**很多参赛者 = 人类 + AI 助手**,不是真人写代码
- 队友的 r6 / r16 代码 = **队友 AI 写的**,不是人之之写
- 别人质量高 = **别人 AI 强**,不是别人真人强
- 我的工作 = **学别人 AI 的写法 + 搬到我们题上**,不原创
---
## 已知国产 NPU 套路(从队友代码学的)
- `with torch.get_device_module(x.device).device(x.device):` — 必需 device context
- `enable_fp_fusion=False` — 某些 NPU 不允许 fp fusion
- 指针 cast 到 `int16/int32` 防止 NaN 被 fp 转换吃掉
- `tl.int64` 显式 cast 防 stride overflow
- 手写 erf 近似,不用 `tl.erf` / `tl.sigmoid`
- 2D grid 比 3D 稳
- `module.device` 国产 NPU 必需
---
## 下次动手前 checklist
- [ ] 任务描述完整读一遍(计算定义 + 接口签名 + 容差)
- [ ] 至少 1 个队友参考实现看完
- [ ] 把队友写法 + 我打算写的放一起对比
- [ ] 写之前把"我准备怎么写"翻译给之之听,得到认可
- [ ] 写完本地不传,先给之之看"我会传啥"
- [ ] 之之确认后才传
---
阿念 · D243 23:50