当前位置: 首页 > article >正文

CANN/cann-bench MoeReRouting算子API描述

MoeReRouting 算子 API 描述【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench1. 算子简介MoE 网络中进行 AlltoAll 操作从其他卡上拿到需要算的 token 后将 token 按照专家顺序重新排列。主要应用场景Mixture of Experts (MoE) 模型中 token 到专家的数据分发分布式 MoE 训练中跨 rank 的 token 重新路由MoE 前馈网络前的 token 重排使同一专家处理的 token 连续排列算子特征难度等级L3LayoutTransform多输入多输出根据每个 rank 的专家 token 数量对输入 token 进行重新排列支持可选的 per_token_scales 同步重排2. 算子定义数学公式通过双重求和计算当前 token 在源位置的偏移量$$ \text{SrcOffset} \sum_{i0}^{\text{cur_rank}} \left( \sum_{j0}^{\text{cur_expert}} \text{expert_token_num_per_rank}(i,j) \right) $$通过双重求和计算当前 token 在目标位置的偏移量$$ \text{DstOffset} \sum_{j0}^{\text{cur_expert}} \left( \sum_{i0}^{\text{cur_rank}} \text{expert_token_num_per_rank}(i,j) \right) $$SrcOffset当前需要移动的 token 源偏移根据输入expert_token_num_per_rank的值进行计算DstOffset当前需要移动的 token 目的偏移cur_rankexpert_token_num_per_rank的纵轴索引表示该 token 原本在的卡cur_expertexpert_token_num_per_rank的横轴索引表示该 token 由卡上专家 cur_expert 计算处理流程根据expert_token_num_per_rank矩阵计算每个 token 的源位置和目标位置将 token 从源位置移动到目标位置实现按专家顺序排列若提供per_token_scales同步进行重排输出重排后的 token、scales、索引及每个专家的 token 数量3. 接口规范算子原型cann_bench.moe_re_routing( Tensor tokens, Tensor expert_token_num_per_rank, Tensor? per_token_scales None, int expert_token_num_type 1, int idx_type 0 ) - (Tensor permute_tokens, Tensor permute_per_token_scales, Tensor permute_token_idx, Tensor expert_token_num)输入参数说明参数类型默认值描述ShapetokensTensor必选待重新排布的 token(A, H)expert_token_num_per_rankTensor必选每张卡上各个专家处理的 token 数矩阵元素 [i,j] 表示从卡 i 获取的专家 j 处理的 token 数(N, E)per_token_scalesTensorNone每个 token 对应的 scale需要随 token 同样进行重新排布(A)expert_token_num_typeint1输出 expert_token_num 的模式0cumsum1count。当前只支持为 1-idx_typeint0输出 permute_token_idx 的索引类型0gather索引1scatter索引。当前只支持为 0-输出参数Shapedtype描述permute_tokens(A, H)与 tokens 相同重新排布后的 tokenpermute_per_token_scales(A)float32重新排布后的 per_token_scales输入不携带时无效permute_token_idx(A)int32每个 token 在原排布方式的索引expert_token_num(E)与 expert_token_num_per_rank 相同每个专家处理的 token 数数据类型tokens dtypeexpert_token_num_per_rank dtypeper_token_scales dtypefloat16int32 / int64float32bfloat16int32 / int64float32int8int32 / int64float32Shape 变量说明Atoken 个数取值要求 Sum(expert_token_num_per_rank) AHtoken 长度hidden_dim取值要求 0 H 16384N卡数rank 数取值无限制E卡上的专家数取值无限制规则与约束tokens的形状为 2D (A, H)expert_token_num_per_rank的形状为 2D (N, E)元素必须大于 0所有元素之和必须等于 ASum(expert_token_num_per_rank) Aexpert_token_num_type当前只支持为 1count 模式idx_type当前只支持为 0gather 索引模式per_token_scales为可选参数存在时 shape 必须为 (A)4. 精度要求采用生态算子精度标准进行验证。误差指标平均相对误差MERE采样点中相对误差平均值$$ \text{MERE} \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$最大相对误差MARE采样点中相对误差最大值$$ \text{MARE} \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$通过标准数据类型FLOAT16BFLOAT16FLOAT32HiFLOAT32FLOAT8 E4M3FLOAT8 E5M2通过阈值(Threshold)2^-102^-72^-132^-112^-32^-2当平均相对误差 MERE Threshold最大相对误差 MARE 10 * Threshold 时判定为通过。5. 标准 Golden 代码import torch import numpy as np def moe_re_routing( tokens: torch.Tensor, expert_token_num_per_rank: torch.Tensor, per_token_scales: torch.Tensor None, expert_token_num_type: int 1, idx_type: int 0 ) - tuple: MoeReRouting 算子 Torch Golden 参考实现 MoE 网络中将 token 按照专家顺序重新排列 Args: tokens: 待重新排布的 tokenshape (A, H) expert_token_num_per_rank: 每张卡上各个专家处理的 token 数shape (N, E) per_token_scales: 每个 token 对应的 scaleshape (A)可选 expert_token_num_type: 输出 expert_token_num 的模式0cumsum, 1count当前只支持 1 idx_type: 输出 permute_token_idx 的索引类型0gather, 1scatter当前只支持 0 Returns: (permute_tokens, permute_per_token_scales, permute_token_idx, expert_token_num) # 获取参数 N, E expert_token_num_per_rank.shape A, H tokens.shape # 确保总和匹配 total_tokens expert_token_num_per_rank.sum().item() assert total_tokens A, fSum of expert_token_num_per_rank ({total_tokens}) must equal A ({A}) # 构建 src_offset 和 dst_offset 映射 # 计算每个 (rank, expert) 位置的源偏移和目标偏移 src_offsets {} # (rank, expert) - src_offset dst_offsets {} # (rank, expert) - dst_offset # 计算 SrcOffset按 rank 和 expert 的顺序累加 src_acc 0 for i in range(N): # cur_rank for j in range(E): # cur_expert src_offsets[(i, j)] src_acc src_acc expert_token_num_per_rank[i, j].item() # 计算 DstOffset按 expert 和 rank 的顺序累加 dst_acc 0 for j in range(E): # cur_expert for i in range(N): # cur_rank dst_offsets[(i, j)] dst_acc dst_acc expert_token_num_per_rank[i, j].item() # 构建重排映射src_pos - dst_pos src_to_dst {} for i in range(N): for j in range(E): num_tokens expert_token_num_per_rank[i, j].item() src_start src_offsets[(i, j)] dst_start dst_offsets[(i, j)] for k in range(num_tokens): src_to_dst[src_start k] dst_start k # 构建反向映射用于 gather 索引 dst_to_src {v: k for k, v in src_to_dst.items()} # 生成 permute_token_idx (gather 索引) permute_token_idx torch.zeros(A, dtypetorch.int32) for dst_pos in range(A): permute_token_idx[dst_pos] dst_to_src[dst_pos] # 重排 tokens permute_tokens tokens[permute_token_idx] # 重排 per_token_scales如果存在 if per_token_scales is not None: permute_per_token_scales per_token_scales[permute_token_idx] else: permute_per_token_scales torch.zeros(A, dtypetorch.float32) # 计算 expert_token_num (count 模式) if expert_token_num_type 1: expert_token_num expert_token_num_per_rank.sum(dim0) # 每个专家的总 token 数 else: # cumsum 模式暂不支持 expert_token_num torch.zeros(E, dtypeexpert_token_num_per_rank.dtype) return permute_tokens, permute_per_token_scales, permute_token_idx, expert_token_num6. 额外信息算子调用示例import torch import cann_bench import math import random # 基础示例 tokens_num 16384 tokens_length 7168 rank_num 16 expert_num 16 tokens torch.randint(low-10, high20, size(tokens_num, tokens_length), dtypetorch.int8) expert_token_num_per_rank torch.ones(rank_num, expert_num, dtypetorch.int32) # 设置每个位置的 token 数量确保总和等于 tokens_num tokens_sum 0 for i in range(rank_num): for j in range(expert_num): if i rank_num - 1 and j expert_num - 1: expert_token_num_per_rank[i][j] tokens_num - tokens_sum break rand_num 1 expert_token_num_per_rank[i][j] rand_num tokens_sum rand_num per_token_scales torch.randn(tokens_num, dtypetorch.float32) # 调用算子 permute_tokens, permute_per_token_scales, permute_token_idx, expert_token_num cann_bench.moe_re_routing( tokens, expert_token_num_per_rank, per_token_scalesper_token_scales )【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/cann-bench MoeReRouting算子API描述

MoeReRouting 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台&…...

基于零知识证明与Cardano的隐私优先AI赏金池系统NightPay实战指南

1. 项目概述:一个为AI智能体设计的隐私优先赏金池系统如果你正在寻找一种既能激励AI智能体完成特定任务,又能完全保护资金提供者隐私的解决方案,那么NightPay很可能就是你需要的工具。简单来说,NightPay是一个建立在Midnight隐私网…...

MAX3420E USB控制器开发实战与优化技巧

1. MAX3420E USB控制器概述 MAX3420E是一款全速USB外设控制器芯片,广泛应用于嵌入式系统开发中。作为USB协议栈的硬件实现载体,它通过SPI接口与主控MCU通信,减轻了主控处理USB协议的压力。芯片内部集成了USB串行接口引擎(SIE)、端点FIFO缓冲区…...

CANN/ops-nn Gelu激活函数算子

Gelu 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas…...

大语言模型在仇恨言论检测中的实践:从零样本提示到系统部署

1. 项目概述:当大语言模型成为“网络清道夫”在互联网内容生态治理的战场上,自动化检测系统一直是核心防线。传统的基于规则或传统机器学习的方法,往往在语言的微妙性、语境依赖性和快速演变的网络用语面前捉襟见肘。仇恨言论的检测尤其棘手&…...

蓝桥杯嵌入式STM32G431按键实战:从CubeMX配置到长按短按识别(附完整代码)

蓝桥杯嵌入式STM32G431按键实战:从CubeMX配置到长按短按识别(附完整代码) 在嵌入式系统开发中,按键处理看似简单,实则暗藏玄机。一个健壮的按键模块需要解决抖动干扰、长短按识别、多任务协调等问题,这正是…...

深度解析:DeepSeek集成项目的微服务架构与配置管理最佳实践

深度解析:DeepSeek集成项目的微服务架构与配置管理最佳实践 【免费下载链接】awesome-deepseek-integration Integrate the DeepSeek API into popular software 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-integration 在AI应用快…...

金融监管AI实战:从模型部署到风险管理的挑战与应对

1. 项目概述:当AI遇见金融监管的“深水区”最近几年,和不少在银行、券商和监管科技公司工作的朋友聊天,一个绕不开的话题就是AI。大家聊的已经不是“要不要用”,而是“怎么用”和“用起来有多头疼”。从反洗钱(AML&…...

解锁车辆新姿势:从PEPS解锁看AUTOSAR局部网络管理(Partial NM)如何省电

解锁车辆新姿势:从PEPS解锁看AUTOSAR局部网络管理如何省电 当车主在停车场按下智能钥匙的解锁按钮时,车辆不会像传统机械钥匙那样全车通电——只有门锁控制器和车身控制模块(BCM)被悄然唤醒,而仪表盘、中控屏等系统仍在…...

HCOMM获取拓扑层级rank数量

HcclRankGraphGetRankSizeByLayer 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT&…...

2025最权威的十大AI辅助论文工具实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 聚焦大语言模型架构创新以及训练优化展开研究的是DeepSeek论文,该模型运用混合专…...

2026届必备的五大AI辅助写作工具推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek系列论文,系统且全面地对混合专家模型与多头潜在注意力机制的精妙技术架…...

CANN/asc-devkit AbsSub API 文档

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

基于Temporal Fusion Transformer的FAPAR时序预测:农业遥感与深度学习的融合实践

1. 项目概述:当Transformer遇见FAPAR,如何为农业监测装上“预测之眼”在农业监测和地球观测领域,我们每天都在与海量的时序数据打交道。从卫星传感器传回的每一幅影像,都记录着地表植被的生命律动。其中,光合有效辐射吸…...

CANN多线程Device管理

1_device_multi_thread 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 描述 本用例展示了多线程的场景如何管理Device,主线程中设置Device,设置资源限制,另一个线程…...

taotoken助力企业内统一管理多个团队的ai模型调用与成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 taotoken助力企业内统一管理多个团队的ai模型调用与成本 当企业内部多个项目组或团队同时接入和使用不同的大模型服务时&#xff0…...

拓扑数据分析与持久谱图:AI蛋白质工程中的数学基础与实践

1. 项目概述:当AI遇见蛋白质,数学是那座看不见的桥如果你关注AI在生物医药领域的应用,尤其是这两年火热的AI蛋白质设计,可能会发现一个有趣的现象:很多顶级的模型和算法,其核心思想并非直接来自生物学&…...

AI技能安全守卫:构建大语言模型应用的安全调用与权限管控体系

1. 项目概述:一个守护技能安全的“哨兵” 最近在GitHub上看到一个挺有意思的项目,叫 skill-security-guard 。光看名字,你可能会有点摸不着头脑,这到底是做什么的?是网络安全工具,还是某种权限管理系统&a…...

Claude API用量监控桌面小组件开发实战:Python+SwiftBar实现成本可视化

1. 项目概述:一个提升Claude使用效率的桌面小工具 最近在折腾AI工具链的时候,发现了一个挺有意思的开源项目,叫 claude-usage-widget 。这名字听起来就挺直白的,一个用来监控Claude使用情况的桌面小工具。对于像我这样重度依赖C…...

CANN/xla-npu 安装指南

XLA-NPU 安装指南 【免费下载链接】xla-npu XLA-NPU 是一个面向华为昇腾NPU硬件的 XLA后端实现。本项目通过接入OpenXLA/XLA开源项目,将XLA开源生态与华为 CANN软件栈集成,对接JAX框架。JAX框架运行时可以直接加载XLA-NPU,使得基于JAX框架开发…...

CANN/community Issue 操作指南

Issue 操作指南 【免费下载链接】community 本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息 项目地址: https://gitcode.com/cann/community 1. 🔍 查找 Issue 1.1 🌐 全局搜索…...

Java开发者集成OpenAI API实战:chatgpt-java库深度解析与应用指南

1. 项目概述与核心价值最近在折腾一些需要集成AI对话能力的Java后端项目,发现市面上虽然有不少封装好的SDK,但要么功能不全,要么文档写得云里雾里,要么就是更新维护跟不上OpenAI API的迭代速度。直到我遇到了hongspell/chatgpt-ja…...

观察taotoken在多模型间自动路由与容灾的实际效果

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察taotoken在多模型间自动路由与容灾的实际效果 1. 测试背景与目标设定 在构建依赖大模型能力的应用时,服务的稳定性…...

LangChain vs 直接调用OpenAI API:我为什么最终选择了框架?深度对比与选型指南

LangChain vs 直接调用OpenAI API:深度技术选型指南 当项目需要集成大语言模型能力时,开发者往往面临一个关键抉择:是直接调用OpenAI API,还是采用LangChain这类框架?这个决策会显著影响开发效率、系统可维护性和未来扩…...

终极指南:如何快速找到Windows热键冲突的罪魁祸首

终极指南:如何快速找到Windows热键冲突的罪魁祸首 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经遇…...

告别手动拼接:用ESP-IDF内置的cJSON库,5分钟搞定ESP32与服务器的JSON通信

ESP32与服务器JSON通信实战:5分钟掌握cJSON高效用法 在物联网开发中,JSON作为轻量级数据交换格式,几乎成为设备与服务器通信的标准协议。ESP32开发者常面临一个现实痛点:如何快速构建和解析JSON数据包?传统的手动拼接…...

除了ChatGPT,SSE还能这么用?用Nginx代理构建一个实时日志仪表盘

实时日志监控新思路:基于Nginx与SSE的高效实践 日志监控一直是开发运维工作中的关键环节。传统的轮询方式不仅效率低下,还增加了服务器负担。今天我要分享的是一种基于Server-Sent Events(SSE)技术的实时日志监控方案,结合Nginx反向代理实现…...

CH395Q vs W5500 实测对比:项目选型时,除了SPI速率我们更该关注什么?

CH395Q vs W5500 实测对比:项目选型时,除了SPI速率我们更该关注什么? 在物联网网关或工业控制板的硬件设计中,以太网芯片的选型往往决定着整个项目的开发效率和长期稳定性。当工程师在国产CH395Q与国际品牌W5500之间犹豫时&#…...

CANN/shmem RMA设备到主机演示

概述 【免费下载链接】shmem CANN SHMEM 是面向昇腾平台的多机多卡内存通信库,基于OpenSHMEM 标准协议,实现跨设备的高效内存访问与数据同步。 项目地址: https://gitcode.com/cann/shmem 本样例基于 SHMEM 工程,介绍了 put & get…...

使用Taotoken后我的API调用延迟与稳定性观察记录

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后我的API调用延迟与稳定性观察记录 作为一名日常重度依赖大模型API进行编程辅助和代码生成的开发者,我最…...