Qwen3.5的核心是GDN线性注意力结构但GDN结构复杂算子选型与接入方案较为复杂。本文分享昇腾NPU上快速接入高性能算子实践包括CANN环境搭建、自定义算子编译、PyTorch适配与算子接入示例。文章中提及的算子已合入vLLM最新版本。背景Qwen3.5介绍Qwen3.5是2026年2月发布的原生多模态大模型该系列采用了和Qwen-Next一致的混合架构包含了线性注意力与传统注意力。获取长序列的高性能的同时保持了传统Attention对等的模型表现力。Qwen3.5在MMLU-Pro、IFBench等多项基准测试中超越GPT-5.2和Gemini 3 Pro并支持最长2小时视频理解、自主操作电脑手机等智能体能力。后续发布的Qwen3.5-Omni更实现原生全模态在215项任务中达到SOTA。截止今天Qwen3.6也已经问世不过模型结构没有出现大的调整。对于Qwen3.6的使用者而言这篇文章的经验也是通用的。模型Highlights旗舰版Qwen3.5-397B的模型结构如图所示Qwen3.5每4层为一个循环每个循环中包含1个传统非线性层和3个线性层。非线性层与线性层的区分仅为Attention模块FFN模块是完全一致的。具体的层数与FFN选型包含Dense与Moe依不同的模型小版本有所区别。线性层将传统的非线性Attention演变成了Linear Attention打破了长序列下On²的复杂度其采取的Linear Attention算法是业界最领先的Gated Delta NetGDN它融合了Mamba与Delta Net算法可以兼顾全局衰减的同时建立单键值替换的逻辑。FFN层采用经典的MOE结构专家数多达512专家小中间层hiddensize仅1024每个token选择10个路由专家以及一个共享专家符合当前的多且小的专家配置演进趋势。10个路由专家的选择算法是朴实的Topk没有演进新的路由策略。综上Qwen3.5给NPU带来的冲击集中在Attention模块的GDN也是开箱算子适配中最困难的地方。针对这样的痛点本文整理了一套高性能算子接入的指导。后文中会重点介绍GDN同时也会简要介绍一下FFN模块的算子选型。本文的算子已合入vLLM最新版本并使能版本链接https://quay.io/repository/ascend/vllm-ascend?tabtagstaglatestv0.20版本与最新的main版本均包含本文中的算子。快速使能指导下图简单描述了复杂的GDN算子、MOE算子与融合算子的替换逻辑图中未穷举所有涉及的接口对于GDN算子需要替换的是预处理算子Causal_conv1D与6个GDN融合算子。对于MOE算子除了GmmSwigluQuant有一处简单融合替换外最值得切换的高性能接口是Dispatch/Combine。准备工作CANN开发环境部署首先需安装CANN开发包提供NPU算子运行所需的底层驱动与工具链。推荐使用是社区版8.5.2总共要下2个run包这里以A3机器为例即需要下载A3-ops、toolkit下载地址为https://www.hiascend.com/developer/download/community/result?modulecanncann8.5.2需要找到与你当前机器对应的包#设置需要安装的路径export INSTALL_PATH/usr/local/Ascend./Ascend-cann-toolkit*run --install-path$INSTALL_PATH --full --quiet./Ascend-cann-A3*run --install-path$INSTALL_PATH --install --quietsource $INSTALL_PATH/ascend-toolkit/set_env.sh编译自定义算子包接下来需要安装包含了高性能GDN算子的算子包此处需要使用三方库fla-npu。下载地址为https://github.com/flashserve/flash-linear-attention-npu# 编译命令注意--soc${soc_version}需要指定为当前机器的芯片类型bash build.sh --socascend910_93 --pkg --opschunk_bwd_dv_local,chunk_bwd_dqkwg,chunk_gated_delta_rule_bwd_dhu,prepare_wy_repr_bwd_da,prepare_wy_repr_bwd_full,chunk_fwd_o,chunk_gated_delta_rule_fwd_h,recurrent_gated_delta_rule,recompute_wu_fwd# 安装run包./build_out/cann-ops-transformer-custom_linux-aarch64.runtorch_custom框架编译构建下载并安装对应python和torch版本的最新发行版https://gitcode.com/Ascend/pytorch/releases/需要获取26.1 beta及以后的版本编译torch适配whl包并安装cd torch_custom/fla_npubash build.sh算子接入Qwen3.5中涉及算子众多基于传统Attention的非线性层与整网耗时占比较小的成熟算子这里不赘述只讲解一下新结构下的中重型算子。重点算子列表推理-Prefill场景/训练-前向场景推理Prefill与训练前向场景使用的算子相同共涉及7个融合算子如下表所示推理-Decode场景训练-反向场景反向场景中包含较多前向算子这里只单独提及仅反向涉及的算子Attention模块-GDN接入实践在接入GDN算子前先说明一下我们追求极致性能做的一些小设计。要想获取到完整的性能收益接入GDN算子需要注意以下两件事情。模型中传递的默认tensor layout均为定长BSH变长TND对GDN来说读写操作会跨越高N维导致降低访存效率。GDN算子众多transpose的开销会低于访存效率降低的代价因此本篇文章中推荐的GDN算子统一采取了NTD或BNSD的特殊layout。为了减少这样的layout引入的transpose开销我们在GDN预处理算子causal_conv1D的前反向完成默认layout到特殊layout的转换所有的GDN算子均使用统一的特殊layoutGDN流程中不存在layout变化。要想做到更好的tiling做到更严谨的负载均衡Ascend C算子的host阶段应拿到cu_seqlen同时这也可以帮我们拦截掉一些索引错误的问题。因此Ascend C GDN算子的输入cu_seqlens是list在host上而Triton GDN算子都是tensordevice上。cu_seqlen的物理意义是组batch逻辑这就意味着45个线性层中所有的GDN算子所需同一份输入。我们需要一开始就在device和host上各存储一份从而使得每个训练step或每个完整Prefill任务仅做一次h2d。接入代码示例https://github.com/flashserve/flash-linear-attention-npu/blob/main/examples/flash_gated_delta_rule.pyFFN模块-Dispatch/Combine接入实践Dispatch和Combine算子用于替换Moe层中的AllToAllV通信算子AllToAllV通信算子涉及H/D同步导致耗时较长。使用Dispatch、Combine替换后专家路由结果的处理下沉到Device上消除了Host和Device同步开销。经过多个迭代的演进Dispatch和Combine算子利用了AIV驱动ROCE能力并叠加了通信数据去重机内机间流水并行等优化手段典型场景下模型吞吐性能提升50%。Dispatch和Combine算子输入比较简单模型侧只需将数据x和前级门控网络选择的topk个专家索引expert_ids作为输入并提供moe专家数moe_expert_num、EP通信域大小ep_world_size、rank ID等属性即可。Dispatch输出数据expand_x、各专家token个数expert_token_nums直接提供给后级GMM。通信算法相关的辅助信息assist_info_for_combine由Dispatch输出直接透传给Combine模型侧无需意识。算子接口参数详细说明、调用示例可参考接口文档Dispatchhttps://www.hiascend.com/document/detail/zh/Pytorch/2600/apiref/torchnpuCustomsapi/docs/zh/custom_APIs/torch_npu/torch_npu-npu_moe_distribute_dispatch_v2.mdCombinehttps://www.hiascend.com/document/detail/zh/Pytorch/2600/apiref/torchnpuCustomsapi/docs/zh/custom_APIs/torch_npu/torch_npu-npu_moe_distribute_combine_v2.md优化结果在输入规模bs64seqlen1knum_head32场景下重点GDN算子优化效果如下耗时平均缩短为原始triton算子的44%。在输入规模ep64bs32seqlen1hiddensize7ktopk8场景下Dispatch/Combine算子优化效果如下耗时平均缩短为基线方案的43%。
Qwen3.5高性能算子接入指导,让你的GDN性能翻倍
发布时间:2026/5/16 16:49:05
Qwen3.5的核心是GDN线性注意力结构但GDN结构复杂算子选型与接入方案较为复杂。本文分享昇腾NPU上快速接入高性能算子实践包括CANN环境搭建、自定义算子编译、PyTorch适配与算子接入示例。文章中提及的算子已合入vLLM最新版本。背景Qwen3.5介绍Qwen3.5是2026年2月发布的原生多模态大模型该系列采用了和Qwen-Next一致的混合架构包含了线性注意力与传统注意力。获取长序列的高性能的同时保持了传统Attention对等的模型表现力。Qwen3.5在MMLU-Pro、IFBench等多项基准测试中超越GPT-5.2和Gemini 3 Pro并支持最长2小时视频理解、自主操作电脑手机等智能体能力。后续发布的Qwen3.5-Omni更实现原生全模态在215项任务中达到SOTA。截止今天Qwen3.6也已经问世不过模型结构没有出现大的调整。对于Qwen3.6的使用者而言这篇文章的经验也是通用的。模型Highlights旗舰版Qwen3.5-397B的模型结构如图所示Qwen3.5每4层为一个循环每个循环中包含1个传统非线性层和3个线性层。非线性层与线性层的区分仅为Attention模块FFN模块是完全一致的。具体的层数与FFN选型包含Dense与Moe依不同的模型小版本有所区别。线性层将传统的非线性Attention演变成了Linear Attention打破了长序列下On²的复杂度其采取的Linear Attention算法是业界最领先的Gated Delta NetGDN它融合了Mamba与Delta Net算法可以兼顾全局衰减的同时建立单键值替换的逻辑。FFN层采用经典的MOE结构专家数多达512专家小中间层hiddensize仅1024每个token选择10个路由专家以及一个共享专家符合当前的多且小的专家配置演进趋势。10个路由专家的选择算法是朴实的Topk没有演进新的路由策略。综上Qwen3.5给NPU带来的冲击集中在Attention模块的GDN也是开箱算子适配中最困难的地方。针对这样的痛点本文整理了一套高性能算子接入的指导。后文中会重点介绍GDN同时也会简要介绍一下FFN模块的算子选型。本文的算子已合入vLLM最新版本并使能版本链接https://quay.io/repository/ascend/vllm-ascend?tabtagstaglatestv0.20版本与最新的main版本均包含本文中的算子。快速使能指导下图简单描述了复杂的GDN算子、MOE算子与融合算子的替换逻辑图中未穷举所有涉及的接口对于GDN算子需要替换的是预处理算子Causal_conv1D与6个GDN融合算子。对于MOE算子除了GmmSwigluQuant有一处简单融合替换外最值得切换的高性能接口是Dispatch/Combine。准备工作CANN开发环境部署首先需安装CANN开发包提供NPU算子运行所需的底层驱动与工具链。推荐使用是社区版8.5.2总共要下2个run包这里以A3机器为例即需要下载A3-ops、toolkit下载地址为https://www.hiascend.com/developer/download/community/result?modulecanncann8.5.2需要找到与你当前机器对应的包#设置需要安装的路径export INSTALL_PATH/usr/local/Ascend./Ascend-cann-toolkit*run --install-path$INSTALL_PATH --full --quiet./Ascend-cann-A3*run --install-path$INSTALL_PATH --install --quietsource $INSTALL_PATH/ascend-toolkit/set_env.sh编译自定义算子包接下来需要安装包含了高性能GDN算子的算子包此处需要使用三方库fla-npu。下载地址为https://github.com/flashserve/flash-linear-attention-npu# 编译命令注意--soc${soc_version}需要指定为当前机器的芯片类型bash build.sh --socascend910_93 --pkg --opschunk_bwd_dv_local,chunk_bwd_dqkwg,chunk_gated_delta_rule_bwd_dhu,prepare_wy_repr_bwd_da,prepare_wy_repr_bwd_full,chunk_fwd_o,chunk_gated_delta_rule_fwd_h,recurrent_gated_delta_rule,recompute_wu_fwd# 安装run包./build_out/cann-ops-transformer-custom_linux-aarch64.runtorch_custom框架编译构建下载并安装对应python和torch版本的最新发行版https://gitcode.com/Ascend/pytorch/releases/需要获取26.1 beta及以后的版本编译torch适配whl包并安装cd torch_custom/fla_npubash build.sh算子接入Qwen3.5中涉及算子众多基于传统Attention的非线性层与整网耗时占比较小的成熟算子这里不赘述只讲解一下新结构下的中重型算子。重点算子列表推理-Prefill场景/训练-前向场景推理Prefill与训练前向场景使用的算子相同共涉及7个融合算子如下表所示推理-Decode场景训练-反向场景反向场景中包含较多前向算子这里只单独提及仅反向涉及的算子Attention模块-GDN接入实践在接入GDN算子前先说明一下我们追求极致性能做的一些小设计。要想获取到完整的性能收益接入GDN算子需要注意以下两件事情。模型中传递的默认tensor layout均为定长BSH变长TND对GDN来说读写操作会跨越高N维导致降低访存效率。GDN算子众多transpose的开销会低于访存效率降低的代价因此本篇文章中推荐的GDN算子统一采取了NTD或BNSD的特殊layout。为了减少这样的layout引入的transpose开销我们在GDN预处理算子causal_conv1D的前反向完成默认layout到特殊layout的转换所有的GDN算子均使用统一的特殊layoutGDN流程中不存在layout变化。要想做到更好的tiling做到更严谨的负载均衡Ascend C算子的host阶段应拿到cu_seqlen同时这也可以帮我们拦截掉一些索引错误的问题。因此Ascend C GDN算子的输入cu_seqlens是list在host上而Triton GDN算子都是tensordevice上。cu_seqlen的物理意义是组batch逻辑这就意味着45个线性层中所有的GDN算子所需同一份输入。我们需要一开始就在device和host上各存储一份从而使得每个训练step或每个完整Prefill任务仅做一次h2d。接入代码示例https://github.com/flashserve/flash-linear-attention-npu/blob/main/examples/flash_gated_delta_rule.pyFFN模块-Dispatch/Combine接入实践Dispatch和Combine算子用于替换Moe层中的AllToAllV通信算子AllToAllV通信算子涉及H/D同步导致耗时较长。使用Dispatch、Combine替换后专家路由结果的处理下沉到Device上消除了Host和Device同步开销。经过多个迭代的演进Dispatch和Combine算子利用了AIV驱动ROCE能力并叠加了通信数据去重机内机间流水并行等优化手段典型场景下模型吞吐性能提升50%。Dispatch和Combine算子输入比较简单模型侧只需将数据x和前级门控网络选择的topk个专家索引expert_ids作为输入并提供moe专家数moe_expert_num、EP通信域大小ep_world_size、rank ID等属性即可。Dispatch输出数据expand_x、各专家token个数expert_token_nums直接提供给后级GMM。通信算法相关的辅助信息assist_info_for_combine由Dispatch输出直接透传给Combine模型侧无需意识。算子接口参数详细说明、调用示例可参考接口文档Dispatchhttps://www.hiascend.com/document/detail/zh/Pytorch/2600/apiref/torchnpuCustomsapi/docs/zh/custom_APIs/torch_npu/torch_npu-npu_moe_distribute_dispatch_v2.mdCombinehttps://www.hiascend.com/document/detail/zh/Pytorch/2600/apiref/torchnpuCustomsapi/docs/zh/custom_APIs/torch_npu/torch_npu-npu_moe_distribute_combine_v2.md优化结果在输入规模bs64seqlen1knum_head32场景下重点GDN算子优化效果如下耗时平均缩短为原始triton算子的44%。在输入规模ep64bs32seqlen1hiddensize7ktopk8场景下Dispatch/Combine算子优化效果如下耗时平均缩短为基线方案的43%。