# FlagOS S2 赛季二 · 赛道一 · D246 续战(Task 38) > 之之 (8592_apivqhj) + 阿念 (Mavis, ICE-GL-AN-001, Code) · 协作产出 > 比赛: FlagOS 开放计算全球大赛 S2 · Track 1 · SGLang 算子优化 > 队伍: GuanghuLab(队长孙蓓) > 第 3 批 17 道题 · 截止 2026-09-03 19:59 (剩 ~19h41m) --- ## 战绩(D246 00:18 续) | Task | 算子 | 状态 | 平均加速比 | 详情 | |---|---|---|---|---| | 30 | interleaved_rope (M-RoPE) | ✅ 已传 (D245 23:16) | **35.79×** (5/8 跑通) | 天数 86.81× / 海光 42.86× / 国通A 26.91× / 沐曦 15.54× / 华为 6.84×;燧原/昆仑芯 Failed | | 29 | gelu_and_mul | ✅ 已传 (D245 23:30) | 3.02× (7/8 跑通) | 天数 5.32× / 海光 4.03× / 国通A 3.73× / 国通B 3.25× / 沐曦 2.74× / 华为 1.09× / 燧原 0.96×;昆仑芯 Failed | | 35 | rotary_embedding | ✅ 已传 (D246 00:04) | 5.15× (6/8 跑通) | 国际B 8.79× / 国际A 7.53× / 天数 6.72× / 海光 4.11× / 沐曦 3.41× / 昆仑芯 0.32×;华为 Failed, 燧原 "评测中" | | **38** | **sigmoid_gate_topk_renorm** | ⏳ **待传(D246 00:17 准备就绪)** | - | 3-kernel 写法 (sigmoid+bias / 自写 topk / gather+renorm) | ## D246 续战重点 ### Task 38 · 选第 4 题 - 找过 `embedding` (无) / `norm` (匹配到 Task 38) - Task 38 = MoE 路由门算子 (DeepSeek-V2/V3 / Qwen3-MoE 风格) - 当前第一名 sitraliqui 仅 9.05× — **大家都没做出来**,机会大 - 没有 GEMM,纯 elementwise + reduce + gather → 跨芯片可行性高 ### 选路决策 之之 D246 00:12 决策:**"用 Triton 自写 topk(性能好)"** — 不走 torch.topk 兜底,要冲分 ### 实施方案 **3-kernel 写法**(不用 torch.topk,自写): ``` K1: sel = sigmoid(routed) + bias (Triton elementwise) K2: topk → indices (Triton, 迭代 tl.argmax K 次) K3: gather + cat + sigmoid + renorm + scale + split (Triton, 1 token/program) ``` ### 国产 NPU 套路全套 - 指针 cast `to(tl.pointer_type(tl.int16))` 防 NaN - stride / pid 用 int64 cast 防 overflow - `with torch.get_device_module(x.device).device(x.device):` - `enable_fp_fusion=False, num_warps=4` - `1.0 / (1.0 + tl.exp(-x))` 不用 `tl.sigmoid` ### 算法测试 8/8 pass 对比平台 reference vs 我们的算法拆分(torch 模拟 K1/K2/K3): - T=1~128, N=8~256, S=1~2, k=2~8 - 包括 DeepSeek-V3 风格 (T=64, N=256, k=8) - **全部 pass**:indices match, routed close (atol=1e-3), shared close ## 风险点 1. **K2 `tl.argmax` 在国产 NPU 上可能不支持** — 降级方案:把 K2 换成 `torch.topk` 1 行 2. **3 kernel 的 launch overhead** — 性能上限受限(估计 3-8×) 3. **中间 buffer `sel` 大小** — DeepSeek-V3 风格 (T=128, N=256) = 128KB ## 预期 - 跑通率:6-7/8 - 平均加速比:3-8× - 排名:跟 sitraliqui (9.05×) 接近或略低 --- ## 目录结构 ``` d246/ ├── README.md (本文件) ├── sigmoid_gate_topk_renorm.py (主文件 · 3 Triton kernel + 国产 NPU 套路) ├── test_algorithm.py (8 case 算法层测试) ├── SUBMIT_CHECKLIST.md (提交清单 · 给之之看的) └── results/ └── sigmoid_gate_topk_renorm.zip (2.6 KB · 通用版,1 个文件) ``` ## 学到的(本次) 1. **3-kernel 分拆 vs 单 kernel fused** — 跑通率 vs 性能上限的权衡,Task 38 选了前者 2. **自写 topk 套路** — `tl.argmax` + `tl.where(mask, -inf, sel)` 迭代 K 次,K=8 内可行 3. **算法层测试先行** — 8 case 在 CPU 跑过确认逻辑,GPU 编译是第二阶段