news 2026/5/9 14:31:30

CANN/cann-recipes-infer MoE路由分组量化算子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/cann-recipes-infer MoE路由分组量化算子

custom-npu_moe_init_routing_group_quant

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT

功能说明

  • 算子功能:MoE的routing计算,根据MoE Gating TopK的计算结果做routing处理,支持不量化和动态量化模式。

  • 计算公式:

    1.对输入expertIdx做排序,得出排序后的结果sortedExpertIdx和对应的序号sortedRowIdx:

    $$ sortedExpertIdx, sortedRowIdx=keyValueSort(expertIdx,rowIdx) $$

    2.以sortedRowIdx做位置映射得出expandedRowIdx:

    $$ expandedRowIdx[sortedRowIdx[i]]=i $$

    3.在drop模式下,对sortedExpertIdx的每个专家统计直方图结果,得出expertTokensCountOrCumsum:

    $$ expertTokensCountOrCumsum[i]=Histogram(sortedExpertIdx) $$

    4.计算quant结果:

    • 动态quant:
      • 若不输入scale: $$ dynamicQuantScaleOut = row_max(abs(x)) / 127 $$

        $$ quantResult = round(x / dynamicQuantScaleOut) $$

      • 若输入scale: $$ dynamicQuantScaleOut = row_max(abs(x * scale)) / 127 $$

        $$ quantResult = round(x / dynamicQuantScaleOut) $$

    5.对quantResult取前NUM_ROWS个sortedRowIdx的对应位置的值,得出expandedXOut:

    $$ expandedX[i]=quantResult[sortedRowIdx[i]%NUM_ROWS] $$

    6.expandedRowIdx的有效元素数量availableIdxNum计算方式为,expertIdx中activeExpertRange范围内的元素的个数 $$ availableIdxNum = |{x\in expertIdx| expert_start \le x<expert_end \ }| $$

函数原型

custom.npu_moe_init_routing_group_quant(Tensor x, Tensor expert_idx, Tensor? scale=None, Tensor? offset=None, int active_num=-1, int expert_capacity=-1, int expert_num=-1, int drop_pad_mode=-1, int expert_tokens_num_type=-1, bool expert_tokens_num_flag=False, int quant_mode=-1, SymInt[] active_expert_range, int row_idx_type=-1, int group_size=128) ->(Tensor, Tensor, Tensor, Tensor)

参数说明

参数名输入/输出/属性描述数据类型数据格式
x输入MOE的输入,即token特征输入,对应公式中x。FLOAT32、FLOAT16、BFLOAT16、INT8ND
expert_idx输入每一行特征对应的K个处理专家,里面元素专家id不能超过专家数。对应公式中 expertIdx。INT32ND
scale可选输入表示用于计算quant结果的参数。如果不输入表示计算时不使用scale,对应公式中scale。FLOAT32ND
offset可选输入表示用于计算quant结果的偏移值。在非量化场景下和动态quant场景下不输入,对应公式中offset。FLOAT32ND
active_num属性表示总的最大处理row数,输出expanded_x只有这么多行是有效的。INT-
expert_capacity属性表示每个专家能够处理的tokens数,取值范围大于等于0。INT-
expert_num属性表示专家数,expert_tokens_num_type为key\_value模式时,取值范围为[0, 5120], 其它模式取值范围[0, 10240]。INT-
drop_pad_mode属性表示是否为 DropPad 场景,取值为 0 和 1。
  • 0:表示 Dropless 场景,该场景下不校验 expert_capacity。
  • 1:表示 DropPad 场景。
INT-
expert_tokens_num_type属性取值为0、1和2 。
  • 0:表示 comsum 模式。
  • 1:表示 count 模式,即输出的值为各个专家处理的 token 数量的累计值。
  • 2:表示 key\_value 模式,即输出的值为专家和对应专家处理 token 数量的累计值。
INT-
expert_tokens_num_flag属性取值为false和true。
  • false:表示不输出 expert_tokens_count_or_cumsum。
  • true:表示输出 expert_tokens_count_or_cumsum。
Bool-
quant_mode属性取值为-1、0、1、2、3、4、5。
  • -1:表示不量化场景。
  • 0:表示静态 quant 场景。
  • 1:表示动态 quant 场景。
  • 2:表示MXFP8量化场景,expanded_x量化到FLOAT8_E5M2。
  • 3:表示MXFP8量化场景,expanded_x量化到FLOAT8_E4M3FN。
  • 4:表示PerGroup量化,group_size固定为128,expanded_x量化到FLOAT8_E5M2,scale的dtype为float。
  • 5:表示PerGroup量化,group_size固定为128,expanded_x量化到FLOAT8_E4M3FN,scale的dtype为float。
INT-
active_expert_range可选属性长度为2,数组内的值为[expertStart, expertEnd], 表示活跃的expert范围在expertStart和expertEnd之间,左闭右开。要求值大于等于0,并且expertEnd不大于expertNum。不输入则不使能专家筛选功能。ListInt-
row_idx_type属性表示expanded_row_idx使用的索引类型,取值为0、1。(性能模板仅支持1)
  • 0:表示gather类型的索引。
  • 1:表示scatter类型的索引。
INT-
expanded_x输出根据expert_idx进行扩展过的特征。非量化场景下数据类型同x,量化场景quant_mode为0、1时数据类型支持INT8,quant_mode为2、3时数据类型分别支持FLOAT8_E5M2、FLOAT8_E4M3FN。FLOAT32、FLOAT16、BFLOAT16、INT8、FLOAT8_E5M2、FLOAT8_E4M3FNND
expanded_row_idx输出expanded_x和x的索引映射关系,前available_idx_num\*H个元素为有效数据,其余无效数据,当row_idx_type为0时,无效数据由-1填充;当row_idx_type为1时,无效数据未初始化。INT32ND
expert_tokens_count_or_cumsum输出
  • 在expert_tokens_num_type为1的场景下,表示active_expert_range范围内expert对应的处理token的总数。
  • 在expert_tokens_num_type为2的场景下,表示active_expert_range范围内token总数为非0的expert,以及对应expert处理token的总数。
INT64ND
expanded_scale输出输出量化计算过程中scale的中间值。FLOAT32ND

约束说明

  • 输入值域限制:

    • active_num 当前未使用,校验需等于NUM_ROWS*K。
    • expert_capacity 当前未使用,仅校验非空。
    • offset 当前未使用。
    • drop_pad_mode 当前只支持0,代表 Dropless 场景。
    • expert_tokens_num_type 当前只支持 1 和 2,分别代表 count 模式和 key_value 模式。
    • expert_tokens_num_flag 只支持 true,代表输出 expert_tokens_count_or_cumsum。
    • quant_mode: 支持-1、0、1、2、3、4、5,其中-1表示不量化,0表示静态量化(输出INT8),1表示动态量化(输出INT8),2表示MXFP8量化到FLOAT8_E5M2,3表示MXFP8量化到FLOAT8_E4M3FN。4模式是groupSize固定为128的PerGroup量化,expand_x量化到float8_e5m2类型,scale为float类型。5模式是groupSize固定为128的PerGroup量化,expand_x量化到float8_e4m3类型,scale为float类型。
  • 输入shape约束:

    • x : shape为 (N, H)
    • expert_id : shape为(N, topK)
    • scale : shape为(N, )或者(expert, H)
  • 输出shape约束:

    • expanded_x : shape为 (N*K, H)
    • expanded_row_idx : shape为 (N*K)
    • expert_tokens_count_cumsum : expert_tokens_num_type为1时,shape为 (expert, ) expert_tokens_num_type为2时,shape为 (expert, 2)
    • expanded_scale : quant_mode = 4或者quant_mode = 5时,shape为 (N*K, M),其中M=Ceil(H, 128)
  • 该接口支持推理场景下使用。

  • 该接口支持图模式。

  • 该接口与PyTorch配合使用时,需要保证CANN相关包与PyTorch相关包的版本匹配。

调用示例

  • 详见 test_npu_moe_init_routing_group_quant.py

【免费下载链接】cann-recipes-infer本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例项目地址: https://gitcode.com/cann/cann-recipes-infer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 14:26:31

【Copilot Chat 】之内置命令和插件使用

Copilot Chat 内置命令 GitHub Copilot Chat 的内置命令主要分为三大类&#xff1a; (聊天参与者)&#xff0c;用于召唤领域专家&#xff1b;# (聊天变量)&#xff0c;用于精确定位上下文&#xff1b;以及 / (斜杠命令)&#xff0c;用于快速执行特定开发任务。 聊天参与者 () -…

作者头像 李华
网站建设 2026/5/9 14:26:30

Openclaw源码深潜之三——调度器架构详解

** 作者:** AiToMoney 团队 阅读时间: 约 25 分钟 📋 学习目标 学完本教程后,你将理解: OpenClaw Cron 调度器的整体架构 CronService → ops → timer → isolated-agent 调用链 at(一次性)/every(周期性)任务的调度机制 孤立会话(isolated-agent)的执行原理 如…

作者头像 李华
网站建设 2026/5/9 14:21:10

CANN/Ascend C开发套件

项目文档 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.com/c…

作者头像 李华
网站建设 2026/5/9 14:19:32

基于血常规与AI的COVID-19辅助筛查:集成学习与图像处理的融合实践

1. 项目概述&#xff1a;当血液分析遇上人工智能在临床诊断领域&#xff0c;尤其是面对突发性、高传染性的呼吸道疾病时&#xff0c;快速、准确且低成本的筛查与辅助诊断手段一直是医疗工作者追求的目标。传统的病原体检测&#xff0c;如核酸检测&#xff0c;虽然特异性高&…

作者头像 李华