NPU 多流优化案例手册【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本文收录仓库内与 NPU 多流优化相关的案例按“每次优化算一个案例”整理而不是按模型统计。目录中的每个 Markdown 文件只讲一个案例聚焦优化动机、执行编排、关键代码片段、适用场景和复用价值。收录原则文档中明确描述了多流、双流、stream overlap 或多流并行。代码中存在显式多流编排例如npu_stream_switch、torch.npu.Stream()、wait_event、record_event、wait_stream。相同优化方法在不同模型中复用时合并到同一类案例中统一整理。分类导航MoE 多流案例MoE 共享专家双流并行案例HunyuanImage-3.0 MoE 多流变体案例Qwen3-Next Patch 形态的 MoE 双流Attention / Prolog 多流案例Indexer Prolog 多流并行KVCache Offload 异步流案例KVCache Offload 异步搬运流Prefill 双流流水案例Prefill Micro-Batch 双流流水多流 控核 / 分离式编排案例LongCat-Flash 多流与控核联动案例LongCat-Flash AFD 通信计算 overlap快速选型表优化模式先看案例再看源码什么时候优先选典型风险MoE shared expert 双流moe-shared-expert-dual-stream.mdcann-recipes-infer/models/deepseek-v3.2-exp/models/modeling_deepseek.py,cann-recipes-infer/models/glm-5/models/modeling_glm.py路由专家和共享专家结果在后面汇合且 decode shape 稳定同步点放错会导致 merge 读到未完成结果共享专家过重时 overlap 不一定有收益Indexer / Prolog 多流indexer-prolog-multi-stream.mdcann-recipes-infer/models/glm-5/models/indexer.pyAttention 前处理链路可拆成两段或多段等待在后面汇合这类优化常常是前处理子链 overlap不是完整大模块并行边界容易拆错KVCache offload 异步流kvcache-offload-async-stream.mdcann-recipes-infer/models/deepseek-v3.2-exp/models/offload_cache.py,cann-recipes-infer/models/glm-5/models/offload_cache.py设备内存紧张需要把搬运从主计算流剥离主流和搬运流的状态一致性最重要异步搬运可能掩盖不了 H2D/D2H 带宽瓶颈Prefill micro-batch 双流 eventprefill-microbatch-dual-stream.mdcann-recipes-infer/models/deepseek_r1/models/modeling_deepseek.pyprefill 同时有明显计算和通信且切 micro-batch 后 shape 线性度还可以最容易引入 host bound、shape 劣化和事件编排错误多流 控核longcat-flash-multi-stream-limit-core.mdcann-recipes-infer/models/longcat-flash/models/modeling_longcat_flash.py已有 overlap但一条流明显拖尾或资源被另一条流吃满控核值不是通用常量多流、控核、预取和图模式往往是耦合设计AFD 通信/计算 overlaplongcat-flash-afd-overlap.md以案例文档为主分离式部署或通信链路成了主要瓶颈重点不在本地双算子并行而在通信和本地计算 overlap等待链容易拖尾Patch 形态多流qwen3-next-moe-dual-stream-patch.mdcann-recipes-infer/models/qwen3-next/patches/stage1/0003-feat-moe-multi-stream.patch优化不能直接落到模型仓需要嵌进 runtime 或 patchpatch 代码更依赖现有生命周期wait_stream()顺序错了会直接破坏运行时逻辑多模态变体hunyuanimage-moe-multi-stream.mdcann-recipes-infer/models/hunyuan-image-3.0/adaptor_patches/hunyuan.py共享流在模块初始化阶段就作为能力注入而不是在前向里临时加 scope多流能力进入模块构造期后不能只复制一段前向代码初始化和分布式上下文要一起看使用顺序先确定当前优化属于哪一类模式。先读对应案例文档确认模块边界、依赖关系和同步方式。再读代表代码或补丁确认实际 API 风格和 enable 开关设计。如果一个实现同时落在多类模式里先选主模式再把其他能力当补充手段。案例清单案例名称优化方法代表模型概述MoE 共享专家双流并行共享专家与路由专家并行DeepSeek-V3.2-Exp / DeepSeek-R1把共享专家放到副流与路由专家路径重叠减少 decode 可见耗时。Indexer Prolog 多流并行Attention 前处理多流DeepSeek-V3.2-Exp / GLM-5将 Q 路径与权重投影路径拆到不同流缩短 Indexer 前处理串行段。KVCache Offload 异步搬运流Cache 异步卸载/回迁DeepSeek-V3.2-Exp / GLM-5用独立流完成 KVCache 搬运降低主计算流阻塞。Prefill Micro-Batch 双流流水计算通信双流掩盖DeepSeek-R1两个 micro-batch 分别跑在两条流上并通过 event 编排 dispatch/combine。LongCat-Flash 多流与控核联动多流 limit_core_numLongCat-Flash把 Attention 路径和 MoE 路径拆流后再分核减少拖尾。LongCat-Flash AFD 通信计算 overlap分离部署下的双流编排LongCat-Flash通过 Stream0/Stream1 overlap Send/Recv 与主计算隐藏分离式通信耗时。HunyuanImage-3.0 MoE 多流变体Shared MLP 独立流HunyuanImage-3.0用独立 NPU stream 承载共享 MLP形成多模态模型里的 MoE 双流变体。Qwen3-Next Patch 形态的 MoE 双流Patch 级 NPU 双流改造Qwen3-Next在 SGLang patch 中引入 shared expert stream与 DeePEP 路由过程并行。常见误用不要把MoE shared expert 双流和Prefill micro-batch 双流当成同一种流水它们的同步粒度完全不同。不要看到有两条流就默认需要limit_core_num控核只在资源争抢和拖尾明显时再引入。不要把KVCache offload这类搬运流当成计算流优化它优先关注的是状态一致性和带宽掩盖。不要直接拼接多个案例的代码片段必须先按当前执行模式选一套主路径。【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考