开源onnxruntime Releases·原文 2026年11月14日

ONNX Runtime CUDA插件EP发布 0.4.0:MoE专家可卸载到CPU

微软onnxruntime仓库发布plugin-ep-cuda 0.4.0,新增CPU/GPU混合专家卸载、原生GGUF/块打包权重执行和Tensor-Core INT2/INT3/INT4内核;发布说明称匹配的ONNX Runtime核心版本为 1.32.0。

AI解读:这次发布的核心是让超出GPU显存的MoE模型通过session.moe.offload.* 会话选项把冷专家放到CPU上执行,发布说明称无需修改模型。

兼容性上,最低ONNX Runtime核心版本仍是 1.24.4,但发布说明强调仅满足最低版本不保证兼容,推荐核心与插件用同一份ONNX Runtime源码修订构建;本次匹配版本为 1.32.0。

MoE卸载依赖 1.32.0 核心的新会话状态支持;使用本次新增贡献算子和ONNX opset 28的模型也需要能注册这些schema的核心。

发布说明还列出限制:插件不提供捆绑CUDA EP在 1.32.0 中新增的两个EP自有运行时融合;容量感知分区下核心暂不把GroupQueryAttention节点分配给插件。

其他新增包括原生GGUF与块打包权重的GatherPacked、MatMulPacked、MoEPacked算子,以及长上下文、稀疏注意力和推测解码相关内核与修复。

微软onnxruntime仓库发布ONNX Runtime CUDA Plugin EP 0.4.0。发布说明由tianleiwu署名,列出CPU/GPU混合专家卸载、原生GGUF/块打包权重执行、Tensor-Core INT2/INT3/INT4与离线K-packed NVFP4 QMoE内核,以及长上下文和推测解码加速。

发布说明称,本次匹配的ONNX Runtime核心版本为 1.32.0;最低核心版本仍为 1.24.4,但满足最低版本并不保证贡献算子兼容。

MoE专家卸载与兼容条件

发布说明称,标准com.microsoft::QMoE节点可通过session.moe.offload.* 会话选项启用会话级CPU/GPU专家卸载,无需修改模型。mode="auto" 在专家全部能放进GPU时保留在GPU,否则启用混合卸载;mode="required" 在节点无法被接纳时让会话创建失败。

该功能依赖ONNX Runtime 1.32.0核心的新会话状态支持,以便把专家初始化器留在CPU上。发布说明称,旧运行时不会调用插件新增的GetDeviceMemoryCapacity回调,因此这一功能没有抬高 1.24.4 的最低版本要求。

发布说明称,核心与插件必须使用相同的贡献算子schema;建议二者从同一份ONNX Runtime修订构建。schema不匹配可能导致错误执行或崩溃,且注册插件时未必能被检测到。

发布说明还称,使用本次新增贡献算子或ONNX opset 28(ONNX 1.23.2)的模型,需要能注册相应schema的核心,例如匹配的 1.32.0。

  • session.moe.offload.mode="auto":放得下就全留在GPU,否则混合卸载。
  • "required":节点无法被接纳时,会话创建失败。
  • 规划器按层分配GPU专家槽位,可通过popularity_file指定expert-profile.bin热度配置。
  • 默认adaptive放置,会在步骤间把新变热的专家提升到GPU。

量化内核与原生块打包权重

发布说明称,新版本支持离线K-packed NVFP4 QMoE权重(weights_prepacked=1),由GEMV、分组GEMM和dense回退路径共用,并在SM90及更新GPU上使用PDL重叠。

在量化QMoE内核方面,发布说明称SM80及更新GPU默认启用融合块缩放FP8 QMoE执行,设置ORT_ENABLE_FP8_FUSED=0 可关闭;新增INT3和混合宽度 (FC1, FC2) ∈ {2,3,4}×{2,3,4} 的QMoE内核,以及离线SM80预打包INT2/INT4权重。

发布说明称,BF16 Tensor-Core解码GEMV默认启用,可用ep.cuda.disable_moe_gemv_tc=1(INT4/INT2)和ep.cuda.disable_qmoe_int3_tc=1(INT3)恢复SIMT内核。

新增GatherPacked、MatMulPacked、MoEPacked算子,直接读取原生块打包量化权重,发布说明列出的格式包括GGUF的IQ2_XXS、IQ2_XS、IQ2_S、IQ3_XXS、IQ4_NL、IQ4_XS、Q2_0、Q4_0、Q5_0、Q5_K、Q6_K、Q8_0,以及F16、BF16、F32。

  • SM80及更新GPU默认启用融合块缩放FP8 QMoE;ORT_ENABLE_FP8_FUSED=0 可关闭。
  • ORT_NVFP4_GEMV_NATIVE_SCALE=1 可启用原生E4M3块缩放转换。
  • BF16 Tensor-Core解码GEMV默认启用,并有开关恢复SIMT路径。
  • 发布说明称,GoEmbd等格式的GGUF量化权重可按原生布局执行,无需离线重打包或单独scale张量。

注意力、长上下文与推测解码

发布说明称,GroupQueryAttention新增可选query_seqlens输入,用于右填充、固定形状的分块预填充;填充token和query_seqlens[b]=0 的空闲批次项会在FlashAttention、内存高效和非融合路径中被跳过。

稀疏注意力方面,新增PackedSparseAttentionIndexerMerge,用于多token预测的索引共享;PackedSparseAttentionIndexer新增indexshare_mode、max_output_entries、indexshare_state_policy控制项,以及可选的state_status输出,供CUDA Graph重放循环检测被拒绝的步骤。

发布说明称,DynamicSparseAttention新增逐通道对称INT8 KV缓存,并加入默认启用的Tensor-Core INT8-KV预填充与split-K解码内核。这是一项行为变化:累加顺序不同,结果与旧版本不逐位相同;可用ep.cuda.dsa_prefill_int8_tc=0 或ep.cuda.dsa_decode_int8_tc=0 恢复旧内核。

在状态空间模型方面,GatedDeltaNet新增Kimi Delta Attention(gate_activation="sigmoid",别名 "kda");发布说明称FP16 KDA预填充默认检查状态溢出,设置ep.cuda.gated_delta_net_fp16_state_guard=0 可跳过。

  • DynamicSparseAttention的INT8-KV Tensor-Core内核默认启用,结果不再与旧版本逐位一致。
  • PackedSparseAttentionIndexer在固定形状分块预填充中可跳过填充token和空闲批次项。
  • GatedDeltaNet与CausalConvWithState扩展到最多 8 token的推测解码。

平台覆盖与已知限制

发布说明称,新版本扩大Linux aarch64 CUDA 13 GPU覆盖;针对消费级GPU和Windows,加入感知WDDM的显存预算,避免溢出到共享GPU内存。

发布说明列出几项限制:捆绑CUDA EP在ONNX Runtime 1.32.0中新增的ep.cuda.runtime_fusion.unit_swish和ep.cuda.runtime_fusion.causal_conv_with_state两项可选EP自有运行时融合,不在CUDA插件构建中提供。

发布说明还称,在ONNX Runtime 1.32.0核心配合session.resource_cuda_partitioning_settings时,核心暂不把GroupQueryAttention节点分配给插件,因为路由感知的工作区估算尚不能通过插件记账路径;此时会记录警告并把节点留给其他EP。未启用容量感知分区的会话不受影响。

发布说明同时提到,session.moe.offload.gpu_device_mem_limit不支持外部CUDA分配器或CUDA内存池。

  • 运行时融合ep.cuda.runtime_fusion.unit_swish与ep.cuda.runtime_fusion.causal_conv_with_state不在插件构建中提供。
  • 容量感知分区下,GroupQueryAttention暂不会被分配给插件,并会记录警告。
  • session.moe.offload.gpu_device_mem_limit与外部CUDA分配器、CUDA内存池不兼容。

信息来源

更多

新闻专题
外观