尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【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 激活比更稀疏融合收益更大。
RELATED

相关推荐

基金实时估值系统架构设计与关键技术解析

基金实时估值系统架构设计与关键技术解析

1. 基金实时估值系统概述 基金实时估值系统是金融科技领域的重要基础设施,它通过动态计算基金资产净值(NAV),为投资者提供及时、透明的投资决策依据。在传统模式下,基金估值往往存在滞后性,而实时估值系统通…

📅 2026/10/24 19:16:25
西门子PLC一键手自动切换程序设计与无扰切换实战

西门子PLC一键手自动切换程序设计与无扰切换实战

1. 项目概述:为什么“一键切换”是工业控制的核心痛点 在工业自动化现场,无论是调试、维护还是紧急处理,操作员最常面对的一个场景就是:设备正在自动运行,突然需要手动干预一下,比如微调一个阀门的位置&…

📅 2026/10/23 11:15:32
Android应用间跳转实战:从隐式Intent到抖音启动的健壮实现

Android应用间跳转实战:从隐式Intent到抖音启动的健壮实现

1. 从“一键跳转”到“深度集成”:为什么我们需要在App内启动抖音在Android开发中,我们经常会遇到一个看似简单,实则充满细节和“坑点”的需求:在自己的App里,通过一个按钮或某个操作,直接唤起并跳转到抖音…

📅 2026/10/25 6:35:23
MORE NEWS

更多资讯

📰

数值分析上机核心:三次样条、重积分与常微分方程数值解

简介:面向理工科数值分析课程的上机作业文档,围绕三次样条插值、重积分计算与常微分方程初值问题数值解三类实验,梳理公式推导、算法步骤和MATLAB编程实现要点,适合本科生、研究生对照课程题目完成上机练习与报告整理。压缩包内仅…

📰

如何构建可落地的营销技能知识体系

我无法根据当前输入生成符合要求的博文。原因如下:项目标题为"marketingskills",但未提供项目正文、关键词、摘要描述等核心输入要素;所有关键字段(项目正文、关键词、摘要描述)均为空字符串,不符…

📰

MATLAB数值分析上机实战:三次样条、二重积分外推与ODE方法对比

简介:面向学习数值分析与科学计算的高校学生,这份东南大学出版配套上机题文档围绕MATLAB编程实践展开,聚焦三次样条插值函数、重积分计算和常微分方程初值问题数值解三类典型题目。文档不仅给出第一型三次样条插值、复化梯形公式与外推、RK4、…

📰

示波器初学入门:波形测量与信号完整性实战指南

简介:《深入了解示波器》入门教材面向电子工程初学者、调试人员及需要补强信号观测基础的技术人员,围绕示波器工作原理、波形读取与测量方法展开,可帮助读者理解信号完整性、反射衰减失真等现象,并建立从波形观察到参数判读的知识…

📰

AI视频监控在厂区安防中的技术突破与应用实践

1. 厂区安防升级的痛点与AI破局之道厂区安防系统升级面临三大核心矛盾:传统监控设备的高部署成本与有限效益的失衡、被动响应机制与主动防御需求的断层、人力巡检效率与全天候覆盖要求的冲突。以某汽车零部件工厂为例,其原有40路摄像头组成的监控网络&am…

📰

大数据量JSON处理性能优化实战

1. 为什么大数据量JSON处理会成为性能瓶颈?JSON作为现代应用中最常用的数据交换格式,其性能问题在大数据量场景下会被急剧放大。我曾在一个电商促销项目中处理过单条超过50MB的JSON数据,解析时间竟然达到了惊人的800毫秒——这对于要求响应时…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬