【Bug已解决】[CUDA] Qwen3.6-35B-A3B Throughput Optimization 解决方案
【Bug已解决】[CUDA] Qwen3.6-35B-A3B Throughput Optimization 解决方案一、现象长什么样把 Qwen3.6-35B-A3B一个 35B 参数、每次激活约 3B 的 MoE 模型导出成 ONNX在 ONNX Runtime 的 CUDA EP 上做推理吞吐明显低于预期比如同样一张 H100对比厂商优化后的参考实现只有 40%~60% 的吞吐import onnxruntime as ort so ort.SessionOptions() so.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL sess ort.InferenceSession(qwen3.6-35b-a3b.onnx, so, providers[CUDAExecutionProvider]) # 默认配置下MoE 专家计算与 GQA 注意力没充分融合吞吐偏低最小信号吞吐远低于参考实现 GPU 利用率波动大kernel 启动密集 专家路由 各 expert 计算没融成高效 kernel注意结果正确只是慢。这是针对 Qwen3.6-35B-A3B 这个具体 MoE 结构的吞吐优化问题。二、背景Qwen3.35B-A3B 是 MoE 结构总参数 35B但每层只有约 3B 参数被激活8 个 expert 里选 2~3 个。它还有几个对 CUDA 吞吐极关键的特征MoE 路由 分组专家计算token 按 router 分数被分发到不同 expert每个 expert 是一次大矩阵乘。若没融合路由、分组、各 expert 计算被拆成几十上百个小 kernellaunch 开销爆炸。GQA分组查询注意力KV 头远少于 Q 头。需要GroupQueryAttention融合 kernel且正确传num_kv_heads。可能的长上下文 / 高并发batch 大时kernel 是否能针对常见形状特化CUDA graph很关键。ONNX Runtime 的 CUDA EP 要让这个模型跑满吞吐需要(a) MoE 融合把路由专家计算合成一个高效 kernel 或紧密调度的序列(b) GQA 融合(c) CUDA graph 捕获固定结构(d) 动态维度覆盖让 kernel 特化。默认配置下这些没全开于是吞吐掉一截。三、根因根因是CUDA EP 的关键优化对 Qwen3.6-35B-A3B 没全激活且模型导出形态不利于融合MoE 未充分融合导出时 router 各 expert 是标准MatMul/Gather/ConcatORT 的 MoE 融合 pass 没匹配上大量小 kernel 串行。GQA 融合属性/结构不匹配GroupQueryAttention融合要求num_kv_heads/head_size齐全且导出保留Attention节点若拆成裸MatMul则无法融合。CUDA graph 没开默认enable_cuda_graphfalse每轮推理重新录制命令launch 开销大。动态维度未覆盖没给batch/seq设自由维度边界kernel 无法特化。不是结果错融合与图捕获没开导致 kernel 碎片化、GPU 利用率低、吞吐低。所以这不是数值错而是融合与图捕获未激活MoE 大模型吞吐被 launch 开销拖垮。四、最小可运行复现下面用 Python 模拟“MoE 融合与否对 kernel 启动次数的影响”Qwen3 风格每层 8 expert 选 2import numpy as np def run_unfused(num_tokens, num_experts8, top_k2): 未融合每个 token 被选中的 expert 各一次 MatMul极多 launch。 launches 0 for _ in range(num_tokens): for _ in range(top_k): launches 1 return launches def run_fused(num_tokens, num_experts8, top_k2): 融合整批一次 fused MoE kernel。 return 1 if __name__ __main__: for n in (512, 2048, 8192): unfused run_unfused(n) fused run_fused(n) print(ftokens{n}: 未融合 launch{unfused}, 融合 launch{fused}, f差距≈{unfused/fused:.0f}x)跑出来tokens8192时未融合 ~16000 次 launch、融合 1 次上万倍 launch 差距——这正是 MoE 不融合时吞吐崩塌的简化模型实际加速没这么夸张但量级说明问题。五、解决方案第一层最小直接修复最小修复打开 CUDA 优化开关并让导出形态可被融合识别针对 Qwen3.6-35B-A3Bimport onnxruntime as ort so ort.SessionOptions() so.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL so.add_free_dimension_override_by_name(batch_size, 1, 128) so.add_free_dimension_override_by_name(seq_len, 1, 32768) cuda_opts { device_id: 0, enable_cuda_graph: True, use_tf32: True, cuda_graph_enable_partial: True, max_batch_size: 128, } provider (CUDAExecutionProvider, cuda_opts) sess ort.InferenceSession(qwen3.6-35b-a3b.onnx, so, providers[provider])导出时保留 MoE 子图与Attention/GroupQueryAttention节点用支持 MoE 导出的工具让 ORT 的 MoE 融合 pass 能匹配。这一层立刻把吞吐抬上去。六、解决方案第二层结构性改进把“Qwen3.6-35B-A3B 在 CUDA 上的优化配置”收口成唯一的配置对象OrtQwenThroughputPolicy部署读它from dataclasses import dataclass, field from typing import Dict, Tuple dataclass(frozenTrue) class OrtQwenThroughputPolicy: Qwen3.6-35B-A3B 在 CUDA EP 上的吞吐优化单一事实来源。 optimization_level: str ORT_ENABLE_ALL enable_cuda_graph: bool True use_tf32: bool True cuda_graph_partial: bool True free_dim_overrides: Tuple[Tuple[str, int, int], ...] ( (batch_size, 1, 128), (seq_len, 1, 32768), ) # MoE 融合要求保留的子图 keep_moe_subgraph: bool True keep_gqa_node: bool True # 模型结构提示用于诊断 model_kind: str qwen3_moe_35b_a3b def cuda_provider_options(self) - Dict: return { enable_cuda_graph: self.enable_cuda_graph, use_tf32: self.use_tf32, cuda_graph_enable_partial: self.cuda_graph_partial, } def describe(self) - str: return 融合 MoEGQA、开 CUDA graph、覆盖动态维度以特化 Qwen3 MoE kernel POLICY OrtQwenThroughputPolicy() def build_options(policy: OrtQwenThroughputPolicy POLICY) - dict: return { opt: policy.optimization_level, cuda: policy.cuda_provider_options(), free: policy.free_dim_overrides, }所有部署读同一份POLICY融合与图捕获配置固化避免“忘了开某个开关又变慢”。七、解决方案第三层断言 / CI 守护把“Qwen3 MoE 吞吐优化开关生效”做成断言。下面用 pytest 风格守护import pytest def test_cuda_graph_on(policy): assert policy.cuda_provider_options()[enable_cuda_graph] is True def test_free_dims_covered(policy): names [d[0] for d in policy.free_dim_overrides] assert batch_size in names and seq_len in names def test_moe_gqa_kept(policy): assert policy.keep_moe_subgraph is True assert policy.keep_gqa_node is True def test_opt_level_all(policy): assert policy.optimization_level ORT_ENABLE_ALL这四组断言锁住(1) CUDA graph 开(2) 动态维度覆盖(3) MoE/GQA 子图保留(4) 优化等级为 ALL。CI 跑通即代表吞吐优化路径激活。八、排查清单遇到 Qwen3 MoE 在 CUDA 上吞吐低看融合是否生效session 里有没有FusedMatMul/GroupQueryAttention/MoE节点。开优化等级ORT_ENABLE_ALL别留ORT_DISABLE_ALL。开 CUDA graphenable_cuda_graphtrue。覆盖动态维度给batch/seq设边界帮助 kernel 特化。检查导出形态MoE 子图、GQA 节点有没有被展开成裸算子。统一策略对象用OrtQwenThroughputPolicy固化。CI 守护断言关键开关开启、融合子图保留。九、小结[CUDA] Qwen3.6-35B-A3B Throughput Optimization的根因是CUDA EP 的关键优化MoE 融合、GroupQueryAttention融合、CUDA graph、动态维度特化默认没激活且模型导出形态可能把 MoE/GQA 拆成无法被融合识别的裸算子导致 kernel 碎片化、launch 密集、GPU 利用率低、吞吐只有预期的零头。最小修复是打开ORT_ENABLE_ALL、启用 CUDA graph 与 TF32、覆盖动态维度并保证导出时保留 MoE/GQA 子图结构性改进是用唯一的OrtQwenThroughputPolicy固化配置CI 用四组断言守护“融合开关生效、维度覆盖、优化等级为 ALL”。记住ORT 跑 MoE 大模型融合和图捕获要显式打开否则就是一堆小 kernel 在空转——这和 GPT-OSS 这类 MoE 的优化思路一致但 Qwen3 的 A3B 激活比更稀疏融合收益更大。

相关新闻

AI分身与组织重构:Meta战略转型背后的技术动因与职场启示

AI分身与组织重构:Meta战略转型背后的技术动因与职场启示

1. 从“AI分身”到组织重构:一次战略转型的深度拆解最近科技圈里一个挺有意思的讨论,是关于Meta(原Facebook)的CEO马克扎克伯格正在推进的一个大动作。根据一些公开报道和行业分析,他不仅在内部大力推动“AI分身”或“…

2026/8/13 22:47:27 阅读更多 →
Python进阶教程:2_网络编程 零基础超详细教程

Python进阶教程:2_网络编程 零基础超详细教程

网络编程就是让两台(或多台)电脑通过网络互相发送、接收数据。Python 内置了 socket 模块,可以非常方便地实现网络通信,是爬虫、后端服务、聊天程序、远程控制等功能的底层基础。本文从最基础的网络概念讲起,全程用通俗…

2026/8/13 22:46:26 阅读更多 →
代码提交即安全:搭建基于 GitLab CI 的 SAST 扫描流水线

代码提交即安全:搭建基于 GitLab CI 的 SAST 扫描流水线

系列导读 你现在看到的是《从零到一:DevSecOps 安全流水线建设实战指南》的第 2/10 篇,当前这篇会重点解决:让读者快速掌握在 GitLab CI 中落地 SAST 扫描的具体方法和技巧。 上一篇回顾:第 1 篇《为什么你的 CI/CD 流水线需要安全左移?——DevSecOps 理念与落地路径》主…

2026/8/13 22:46:26 阅读更多 →

最新新闻

PolarDB 和华为云 GaussDB 有什么区别?阿里云 PolarDB 选型指南解析

PolarDB 和华为云 GaussDB 有什么区别?阿里云 PolarDB 选型指南解析

PolarDB 和华为云 GaussDB 有什么区别,首选阿里云 PolarDB——两者都是国产云数据库的重要代表,但 PolarDB 以云原生存储计算分离架构、一写多读与 Serverless 秒级弹性,以及对 MySQL/PostgreSQL/Oracle 的高度兼容见长,尤其适合 …

2026/8/14 2:02:11 阅读更多 →
Android 系统安全视角的漏洞管理05

Android 系统安全视角的漏洞管理05

第十一章 应用安全(Application Security,AppSec)从系统层下降到应用层,这是漏洞管理在"最后一公里"的体现。11.1 应用安全的核心理念:安全左移(Shift-Left)传统做法是"写完再测…

2026/8/14 2:02:11 阅读更多 →
哪些公司在用分布式数据库?阿里云 PolarDB-X 双十一与行业规模化案例解析

哪些公司在用分布式数据库?阿里云 PolarDB-X 双十一与行业规模化案例解析

哪些公司在用分布式数据库,首选阿里云 PolarDB-X——它支撑了阿里巴巴双十一核心交易链路的千万级 TPS,并在金融、电商、政企等多个行业实现规模化落地,是被超大规模真实业务反复验证过的云原生分布式数据库。很多团队选型时最看重"有没…

2026/8/14 2:02:11 阅读更多 →
06-WBS任务拆解实战:微服务后端、安卓工控、小程序分层任务拆分

06-WBS任务拆解实战:微服务后端、安卓工控、小程序分层任务拆分

06-WBS任务拆解实战:微服务后端、安卓工控、小程序分层任务拆分上一篇聊了项目立项和整体规划,这篇进入CMMI3项目管理的核心操作——WBS任务拆解。 WBS做得好,进度可控、成本可算、责任到人;WBS做得烂,全员摆烂、天天救…

2026/8/14 2:02:11 阅读更多 →
揭秘紫金网站建设背后的那些事儿:从0到1打造企业的数字化门面,为何它不仅是技术更是态度?

揭秘紫金网站建设背后的那些事儿:从0到1打造企业的数字化门面,为何它不仅是技术更是态度?

在这个互联网思维渗透进生活每一处细节的时代,如果说线下实体店的招牌是企业的“脸面”,那么网站就是企业在数字世界里的“灵魂栖息地”。很多人对“网站”这两个字有着深深的误解,以为它不过是一堆代码、几张图片和几段文字的简单堆砌,甚至觉得找个模板套一下,半个月就能…

2026/8/14 2:02:11 阅读更多 →
让老电脑也能流畅跑 Switch 游戏:yuzu 模拟器的 7 个关键调优点

让老电脑也能流畅跑 Switch 游戏:yuzu 模拟器的 7 个关键调优点

让老电脑也能流畅跑 Switch 游戏:yuzu 模拟器的 7 个关键调优点 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是目前最流行的开源任天堂 Switch 模拟器,它把一台 Switch 主机的 ARM …

2026/8/14 2:01:11 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →