# 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