diff --git a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE Baseline入门:快速跑通最小闭环教程.md b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE Baseline入门:快速跑通最小闭环教程.md
index a26e6bd..6d3b3ee 100644
--- a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE Baseline入门:快速跑通最小闭环教程.md
+++ b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE Baseline入门:快速跑通最小闭环教程.md
@@ -53,86 +53,26 @@
## 四、前置准备
-开始实战前,请确认你已经完成以下准备:
+**开始实战前,请确认你已经完成以下准备:**
**环境准备:**
-* 已进入赛事专属镜像环境:
-
- 1. 获取算力券:[https://developer.metax-tech.com/activities/6](https://developer.metax-tech.com/activities/6)
-
- 2. 兑换算力和登录平台:[https://ai.gitee.com/](https://ai.gitee.com/)
-
- 进入 【费用中心】— 【算力券】,点击右上角 【兑换】。
-
- 
-
- 3. 租用算力:点击顶部导航栏【算力市场】,选择【沐曦】,租用算力,建议优先选16G /32G 显存,如下图:
-
- 
-
- 4. 创建实例:如图安装专属镜像
-
- 
-
- 5. 项目创作:进入我的算力容器,刚创建的实例默认开机状态,点击工具-lab开始项目创作,不用时记得关机!
-
-
-
-
-小提示:也可以用本地 AI coding 工具 ssh 连接云服务器(能实现和AI对话即可)
+* 已进入赛事专属镜像环境。
**工具准备:**
-* 已准备 Agent 工具;
-
-* 已配置 Token / API Key;
-
-* 已确认 Agent 可以正常调用模型。
-
+* 已准备 Agent 工具;
+* 已配置 Token / API Key;
+* 已确认 Agent 可以正常调用模型。
**代码准备:**
-* 已获取 Fused MoE Baseline 源码。
-
+* 已获取 Fused MoE Baseline 源码。
-## 五、知识预备
-### 混合专家模型 MoE
+## 五、项目实践1-算力平台 baseline 源码部署
-参考链接:[https://huggingface.co/blog/zh/moe](https://huggingface.co/blog/zh/moe)
-
-混合专家模型(Mixed Expert Models,简称 MoE)是一种稀疏激活的模型结构。与稠密模型不同,MoE 在前向计算时只激活部分参数,从而在相近的计算预算下,获得更大的模型容量和更快的收敛速度。这也是当前大模型扩展参数规模的主流路径之一。
-
-MoE 是一种基于 Transformer 架构的模型,由两个关键部分组成:
-
-* **稀疏 MoE 层:**这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干“专家”(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。
-
-* **门控网络或路由:** 这个部分用于决定哪些令牌 (token) 被发送到哪个专家。例如,在下图中,“More”这个令牌可能被发送到第二个专家,而“Parameters”这个令牌被发送到第一个专家。有时,一个令牌甚至可以被发送到多个专家。令牌的路由方式是 MoE 使用中的一个关键点,因为路由器由学习的参数组成,并且与网络的其他部分一同进行预训练。
-
-
-
-
-MoE 的主要优势体现在预训练和训练阶段的算力效率上,但在推理阶段带来了新的**挑战**:
-
-* **显存占用高:**尽管每个 Token 只激活部分专家,但所有专家的参数仍需常驻显存。例如 Mixtral 8×7B 的实际参数量接近 47B,而非 8×7B 的简单叠加,因为除 FFN 外的大多数参数在各专家间是共享的。
-
-* **计算不均衡:**不同专家接收的 Token 数量可能不同,导致计算负载不均,容易形成局部瓶颈。
-
-* **访存压力大:**专家权重、Token 路由、Permute / Unpermute 都会带来额外的显存读写,而不仅仅是计算量的减少。
-
-
-因此,在推理阶段对 MoE 算子进行系统级优化具有非常重要的意义,在不改变模型行为和数值精度的前提下,通过更合理的调度、融合与访存优化,缓解稀疏性带来的碎片化和内存压力。
-
-### INT8 模型量化:
-
-参考链接:[https://www.cnblogs.com/chentiao/p/18315901](https://www.cnblogs.com/chentiao/p/18315901)
-
-INT8 量化是一种用于减少模型大小和计算复杂度的方法,特别是在深度学习模型中。它通过将浮点数(通常是 FP32)转换为 8 位整数 (INT 8),从而减少内存使用和提高计算效率。
-
-## 六、项目实践1-算力平台 baseline 源码部署
-
-**项目目标:**在算力平台上拉取 fused\_moe 的 baseline 源码,快速跑通最小闭环,完成 pybind 接口对接、正确性验证和 benchmark 测试,并记录一份 baseline 性能结果,为后续算子优化提供对比基准。
+**项目目标:**在算力平台上拉取 Fused MoE 的 baseline 源码,快速跑通最小闭环,并记录一份 baseline 性能结果,为后续算子优化提供对比基准。
### 步骤 1:检查运行环境
@@ -166,6 +106,7 @@ else:
EOF
```
+
**预期结果:**
* Python 3.12.11
@@ -185,6 +126,7 @@ EOF
| `Python 3.6.x/ Python 3.7.x` | Python 版本过低 | `conda install python=3.12` (推荐3.10+) |
| `ModuleNotFoundError: numpy` | 当前 Python 缺少依赖 | `pip install numpy torch triton` |
+
### 步骤 2:进入项目目录
**目标:**进入本模块所需的源码目录。
@@ -197,6 +139,7 @@ EOF
cd /root/Project/fused_moe # 这里需要替换成自己的项目路径
```
+
**预期结果:**
终端提示符路径显示为 fused\_moe 项目路径:
@@ -222,6 +165,7 @@ bash scripts/build_fused_moe_i8_tn_pybind.sh
PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
```
+
**预期结果:**
编译成功无报错,终端显示:
@@ -230,130 +174,126 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
且成功生成 `fused_moe/standalone/fused_moe_i8_tn/build/fused_moe_i8_tn_pybind.cpython-310-x86_64-linux-gnu.so` 文件
- **常见问题:**
-
- | 报错 | 原因 | 解决办法 |
- | --- | --- | --- |
- | `Python.h: No such file or directory` | Python 头文件路径未找到 | 确认 `PYTHON_BIN` 路径正确,脚本自动探测 `sysconfig.get_path('include')` |
- | `libpython3.x.so: cannot find` | 链接时找不到 Python 库 | 1、执行 `find $CONDA_PREFIX -name "libpython3*.so*"`查找绝对路径
2、将该路径赋值给 `LIBPYTHON_PATH` |
- | `recompile with -fPIC` | 编译未开启位置无关代码 | 确保 `mxcc`/ `g++`编译参数中有 `-fPIC` |
- | `permission denied` | 无脚本执行权限 | `chmod +x scripts/*.sh` |
- | `undefined reference to Py_...` | Python 版本不匹配 | 确认编译脚本中`PYTHON_BIN`路径与当前运行的 Python 环境完全一致 |
-
- ### 步骤 4:正确性测试
-
- **目标:**验证 reference 计算、pybind 计算、Triton 计算这三种方式计算结果的数值是否完全一致。
-
- **操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_pybind_test.sh` 脚本
-
- **命令示例:**
-
- ```apl
- bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend all # 运行全部计算方式
-
- # --backend:选择计算方式
- # 只测 pybind:
- bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend pybind
- # 只测 triton:
- bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend triton
- # 只测 reference:
- bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend reference
- ```
-
- **预期结果:**
-
- 编译成功无报错,输出示例如下:
-
- > pybind:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.69531, C\[last\]=-0.44531
-
- > pybind:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.57813, C\[last\]=-0.49805
-
- > pybind:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.08594, C\[last\]=-0.33594
-
- > reference:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.6934, C\[last\]=-0.4451
-
- > reference:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.5768, C\[last\]=-0.4975
-
- > reference:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.0875, C\[last\]=-0.3362
-
- > triton:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.69337, C\[last\]=-0.44513
-
- > triton:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.57678, C\[last\]=-0.49749
-
- > triton:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.08748, C\[last\]=-0.33618
-
- **结果解释:**
-
- * “pybind/reference/Triton”:三种计算方式;
-
- * “fused\_moe\_i8\_tn\_topk1/2/3 passed”:测试算子通过数值校验,数值误差在允许范围内且无明显异常,否则会报错 FAILED;
-
- * ”rows=... , cols=...“:输出 Tensor 的行和列的大小;
-
- * ”sample C\[0\]=... , C\[last\]=...“:首尾采样值,用于辅助定位数值偏差,不作为精度判定依据。
-
-
- **常见问题:**
-
- | 报错 | 原因 | 解决办法 |
- | --- | --- | --- |
- | `ModuleNotFoundError: fused_moe_i8_tn_pybind` | pybind 模块未编译或未加入 `PYTHONPATH` | 回到步骤 3,确认 `.so`已生成;执行 `export PYTHONPATH=/root/Project/fused_moe:$PYTHONPATH` |
- | `FAILED: max abs diff too large` | 数值误差超过阈值 | 检查 scale 是否应用位置错误;确认 TopK 索引与权重是否一致 |
- | `FAILED: shape mismatch` | 输出张量形状不一致 | 检查 Token Permute / Unpermute 逻辑;确认 expert 维度对齐 |
- | `FAILED: NaN or Inf detected` | 溢出或未初始化内存 | 检查 INT8 乘加是否溢出;确认 GEMM 输出是否反量化 |
- | 终端长时间无输出 | Kernel 死锁或 Launch 失败 | 减小测试 shape;检查是否触发 MACA 硬件限制 |
-
- ### 步骤5:性能测试
-
- **目标:**输出 benchmark 结果对比表
-
- **操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_benchmark.sh` 脚本
-
- **命令示例:**
-
- ```apl
- bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 20
- # --backend:选择计算方式
- # --warmup:设置预热次数
- # --iters:设置迭代次数
- ```
-
- **预期结果:**
-
- 编译成功无报错,输出示例如下:
-
- > pybind:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=0.308978, TOPS=0.027149, warmup=5, iters=20
-
- > pybind:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=0.304500, TOPS=0.055098, warmup=5, iters=20
-
- > pybind:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=0.297775, TOPS=0.042256, warmup=5, iters=20
-
- > reference:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=1685.43, TOPS=0.000005, warmup=5, iters=20
-
- > reference:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=3384.52, TOPS=0.000005, warmup=5, iters=20
-
- > reference:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=2532.14, TOPS=0.000005, warmup=5, iters=20
-
- > triton:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=19.013421, TOPS=0.000441, warmup=5, iters=20
-
- > triton:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=16.745914, TOPS=0.001002, warmup=5, iters=20
-
- > triton:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=19.630328, TOPS=0.000641, warmup=5, iters=20
-
- **结果解释:**
-
- * “pybind/reference/Triton”:三种计算方式;
-
- * “fused\_moe\_i8\_tn\_topk1/2/3”:分别对应选择前 1 / 2 / 3 个专家场景下的 MoE 算子;
-
- * “avg\_ms”:平均算子执行耗时(毫秒),这里不计算预热时间,只计算正式迭代的时间;
-
- * “TOPS”:Tera Operations Per Second,本次 MoE 算子的总运算量 / 实际耗时;
-
- * “warmup=5, iters=20”:预热轮数和正式迭代数。
-
-**常见错误:**
+**常见问题:**
+
+
+| 报错 | 原因 | 解决办法 |
+| --- | --- | --- |
+| `Python.h: No such file or directory` | Python 头文件路径未找到 | 确认 `PYTHON_BIN` 路径正确,脚本自动探测 `sysconfig.get_path('include')` |
+| `libpython3.x.so: cannot find` | 链接时找不到 Python 库 | 1、执行 `find $CONDA_PREFIX -name "libpython3*.so*"`查找绝对路径
2、将该路径赋值给 `LIBPYTHON_PATH` |
+| `recompile with -fPIC` | 编译未开启位置无关代码 | 确保 `mxcc`/ `g++`编译参数中有 `-fPIC` |
+| `permission denied` | 无脚本执行权限 | `chmod +x scripts/*.sh` |
+| `undefined reference to Py_...` | Python 版本不匹配 | 确认编译脚本中`PYTHON_BIN`路径与当前运行的 Python 环境完全一致 |
+
+### 步骤 4:正确性测试
+
+**目标:**验证 reference 计算、pybind 计算、Triton 计算这三种方式计算结果的数值是否完全一致。
+
+**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_pybind_test.sh` 脚本
+
+**命令示例:**
+
+```apl
+bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend all # 运行全部计算方式
+
+# --backend:选择计算方式
+# 只测 pybind:
+bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend pybind
+# 只测 triton:
+bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend triton
+# 只测 reference:
+bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend reference
+```
+
+
+**预期结果:**
+
+编译成功无报错,输出示例如下:
+
+> pybind:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.69531, C\[last\]=-0.44531
+> pybind:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.57813, C\[last\]=-0.49805
+> pybind:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.08594, C\[last\]=-0.33594
+
+> reference:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.6934, C\[last\]=-0.4451
+> reference:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.5768, C\[last\]=-0.4975
+> reference:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.0875, C\[last\]=-0.3362
+
+> triton:fused\_moe\_i8\_tn\_topk1 passed: rows=256, cols=128, sample C\[0\]=0.69337, C\[last\]=-0.44513
+> triton:fused\_moe\_i8\_tn\_topk2 passed: rows=512, cols=128, sample C\[0\]=-0.57678, C\[last\]=-0.49749
+> triton:fused\_moe\_i8\_tn\_topk3 passed: rows=384, cols=128, sample C\[0\]=-1.08748, C\[last\]=-0.33618
+
+
+**结果解释:**
+
+* “pybind/reference/Triton”:三种计算方式;
+
+* “fused\_moe\_i8\_tn\_topk1/2/3 passed”:测试算子通过数值校验,数值误差在允许范围内且无明显异常,否则会报错 FAILED;
+
+* ”rows=... , cols=...“:输出 Tensor 的行和列的大小;
+
+* ”sample C\[0\]=... , C\[last\]=...“:首尾采样值,用于辅助定位数值偏差,不作为精度判定依据。
+
+
+**常见问题:**
+
+
+| 报错 | 原因 | 解决办法 |
+| :--- | :--- | :--- |
+| `ModuleNotFoundError: fused_moe_i8_tn_pybind` | pybind 模块未编译或未加入 `PYTHONPATH` | 回到步骤 3,确认 `.so` 已生成;执行 `export PYTHONPATH=/root/Project/fused_moe:$PYTHONPATH` |
+| `FAILED: max abs diff too large` | 数值误差超过阈值 | 检查 scale 是否应用位置错误;确认 TopK 索引与权重是否一致 |
+| `FAILED: shape mismatch` | 输出张量形状不一致 | 检查 Token Permute / Unpermute 逻辑;确认 expert 维度对齐 |
+| `FAILED: NaN or Inf detected` | 溢出或未初始化内存 | 检查 INT8 乘加是否溢出;确认 GEMM 输出是否反量化 |
+| 终端长时间无输出 | Kernel 死锁或 Launch 失败 | 减小测试 shape;检查是否触发 MACA 硬件限制 |
+
+### 步骤5:性能测试
+
+**目标:**输出 benchmark 结果对比表
+
+**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_benchmark.sh` 脚本
+
+**命令示例:**
+
+```apl
+bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 20
+# --backend:选择计算方式
+# --warmup:设置预热次数
+# --iters:设置迭代次数
+```
+
+
+**预期结果:**
+
+编译成功无报错,输出示例如下:
+
+> pybind:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=0.308978, TOPS=0.027149, warmup=5, iters=20
+> pybind:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=0.304500, TOPS=0.055098, warmup=5, iters=20
+> pybind:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=0.297775, TOPS=0.042256, warmup=5, iters=20
+
+> reference:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=1685.43, TOPS=0.000005, warmup=5, iters=20
+> reference:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=3384.52, TOPS=0.000005, warmup=5, iters=20
+> reference:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=2532.14, TOPS=0.000005, warmup=5, iters=20
+
+> triton:fused\_moe\_i8\_tn\_topk1 benchmark: avg\_ms=19.013421, TOPS=0.000441, warmup=5, iters=20
+> triton:fused\_moe\_i8\_tn\_topk2 benchmark: avg\_ms=16.745914, TOPS=0.001002, warmup=5, iters=20
+> triton:fused\_moe\_i8\_tn\_topk3 benchmark: avg\_ms=19.630328, TOPS=0.000641, warmup=5, iters=20
+
+
+**结果解释:**
+
+* “pybind/reference/Triton”:三种计算方式;
+
+* “fused\_moe\_i8\_tn\_topk1/2/3”:分别对应选择前 1 / 2 / 3 个专家场景下的 MoE 算子;
+
+* “avg\_ms”:平均算子执行耗时(毫秒),这里不计算预热时间,只计算正式迭代的���间���
+
+* “TOPS”:Tera Operations Per Second,本次 MoE 算子的总运算量 / 实际耗时;
+
+* “warmup=5, iters=20”:预热轮数和正式迭代数。
+
+
+**常见问题:**
+
| 报错 | 原因 | 解决办法 |
| --- | --- | --- |
@@ -361,11 +301,11 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
| 终端长时间无输出 | Kernel 死锁或 MACA 驱动异常 | 减小测试 shape;重启容器或设备 |
| avg\_ms 异常抖动(±50%) | 其他进程占用 GPU | 关闭其他占用显存的进程,单机单任务运行 |
-## 七、项目实践2-Kernel Swift 智能算子迁移系统自动调优
+## 六、项目实践2-Kernel Swift 智能算子迁移系统自动调优
系统链接:[https://deeplink.org.cn/kernelswift/task](https://deeplink.org.cn/kernelswift/task)
-**项目目标:**基于 KernelSwift 智能算子迁移系统,对 fused\_moe 算子进行在线自动调优。通过输入标准 PyTorch 代码,一键生成适配沐曦硬件的高性能实现;并利用算子广场复用与可视化管理功能,高效完成算子优化与全流程追踪。
+**项目目标:**基于 KernelSwift 智能算子迁移系统,对 Fused MoE 算子进行在线自动调优。通过输入算子代码,一键生成适配沐曦硬件的高性能实现,高效完成算子优化与全流程追踪。
### 步骤1:复用算子广场的 fused\_moe 算子进行二次优化
@@ -472,15 +412,15 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
5. 提交优化任务:点击右下角 \[优化\] 按钮,系统将提交任务并进入 \[生成中\] 状态
-
+ 
-完成上述步骤将看到如下界面:
+ 完成上述步骤将看到如下界面:
-
+ 
### 步骤2:任务查看与结果管理
-**目标:**在新建优化任务后可追踪任务进度,获取优化结果
+**目标:** 在新建优化任务后可追踪任务进度,获取优化结果
**操作:**
@@ -513,7 +453,7 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
* 顶部:任务名称、创建/更新时间、适配硬件、当前轮次进度
-
+ 
3. 获取优化结果:当前任务状态为【已完成】时,可在详情页查看优化结果:
@@ -531,11 +471,9 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
* 任务失败:查看错误日志,常见原因包括代码不符合规范、测试用例错误、硬件适配问题,修改后重新提交任务;
* 排队时间长:可调整提交时间,或联系平台管理员确认资源状态。
-
----
-## 八、Agent使用说明
+## 七、Agent使用说明
在本模块中,Agent可以帮助你完成以下任务:
@@ -599,11 +537,11 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
6. **KernelSwift 系统搜索算子**
-```plaintext
-请帮我在算子广场检索 fused_moe 算子
-```
+ ```plaintext
+ 请帮我在算子广场检索 fused_moe 算子
+ ```
-## 九、常见问题与注意事项
+## 八、常见问题与注意事项
### 算力平台 basline 源码部署项目:
diff --git a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/赛题说明.md b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/赛题说明.md
index a710761..e9e75e7 100644
--- a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/赛题说明.md
+++ b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/赛题说明.md
@@ -28,6 +28,38 @@
聚焦 MoE 模型中的稀疏专家计算,优化 Fused MoE 算子的执行效率。
-参考知识:待更新
+参考知识:
+
+**1、混合专家模型 MoE**
+
+参考链接:[https://huggingface.co/blog/zh/moe](https://huggingface.co/blog/zh/moe)
+
+混合专家模型(Mixed Expert Models,简称 MoE)是一种稀疏激活的模型结构。与稠密模型不同,MoE 在前向计算时只激活部分参数,从而在相近的计算预算下,获得更大的模型容量和更快的收敛速度。这也是当前大模型扩展参数规模的主流路径之一。
+
+MoE 是一种基于 Transformer 架构的模型,由两个关键部分组成:
+
+* **稀疏 MoE 层**:这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干“专家”(例如 8 个),每个专家本身是一个独立的神经网络。在实际应用中,这些专家通常是前馈网络 (FFN),但它们也可以是更复杂的网络结构,甚至可以是 MoE 层本身,从而形成层级式的 MoE 结构。
+
+* **门控网络或路由**:这个部分用于决定哪些令牌 (token) 被发送到哪个专家。例如,在下图中,“More”这个令牌可能被发送到第二个专家,而“Parameters”这个令牌被发送到第一个专家。有时,一个令牌甚至可以被发送到多个专家。令牌的路由方式是 MoE 使用中的一个关键点,因为路由器由学习的参数组成,并且与网络的其他部分一同进行预训练。
+
+
+
+
+MoE 的主要优势体现在预训练和训练阶段的算力效率上,但在推理阶段带来了新的**挑战**:
+
+* **显存占用高**:尽管每个 Token 只激活部分专家,但所有专家的参数仍需常驻显存。例如 Mixtral 8×7B 的实际参数量接近 47B,而非 8×7B 的简单叠加,因为除 FFN 外的大多数参数在各专家间是共享的。
+
+* **计算不均衡**:不同专家接收的 Token 数量可能不同,导致计算负载不均,容易形成局部瓶颈。
+
+* **访存压力大**:专家权重、Token 路由、Permute / Unpermute 都会带来额外的显存读写,而不仅仅是计算量的减少。
+
+
+因此,在推理阶段对 MoE 算子进行系统级优化具有非常重要的意义,在不改变模型行为和数值精度的前提下,通过更合理的调度、融合与访存优化,缓解稀疏性带来的碎片化和内存压力。
+
+**2、INT8 模型量化**
+
+参考链接:[https://www.cnblogs.com/chentiao/p/18315901](https://www.cnblogs.com/chentiao/p/18315901)
+
+INT8 量化是一种用于减少模型大小和计算复杂度的方法,特别是在深度学习模型中。它通过将浮点数(通常是 FP32)转换为 8 位整数 (INT 8),从而减少内存使用和提高计算效率。
教程链接:Fused MoE Baseline 入门:快速跑通最小闭环教程