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

CANN Scatter算子评测

Scatter 算子 API 描述

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

1. 算子简介

将 updates 按索引 indices 更新到 data 中。

主要应用场景

  • 嵌入表更新与稀疏梯度回传
  • One-hot 编码生成
  • 图神经网络中的消息聚合(scatter_add)
  • 稀疏张量的构造与更新

算子特征

  • 难度等级:L2(ScatterUpdate)
  • 三输入单输出,按指定维度将 updates 的值写入到 data 对应索引位置

2. 算子定义

数学公式

对于 3D 张量,当 dim=0 时:

$$ y[\text{index}[i][j][k]][j][k] = \text{src}[i][j][k] $$

更一般地,对于任意维度 dim:

$$ y[\text{index}_0][\text{index}_1] \cdots [\text{index}_{\text{dim}}] \cdots [\text{index}_{n-1}] = \text{updates}[i_0][i_1] \cdots [i_{n-1}] $$

其中 $\text{index}_d = \text{indices}[i_0][i_1] \cdots [i_{n-1}]$ 当 $d = \text{dim}$,否则 $\text{index}_d = i_d$。

当指定 reduce 参数时:

  • add:$y[\ldots] = y[\ldots] + \text{updates}[\ldots]$
  • multiply:$y[\ldots] = y[\ldots] \times \text{updates}[\ldots]$
  • amax:$y[\ldots] = \max(y[\ldots], \text{updates}[\ldots])$
  • amin:$y[\ldots] = \min(y[\ldots], \text{updates}[\ldots])$

3. 接口规范

算子原型

cann_bench.scatter(Tensor data, int dim, Tensor indices, Tensor updates, str? reduce=None) -> Tensor y

输入参数说明

参数类型默认值描述
dataTensor必选输入数据张量
dimint必选沿哪个维度 scatter
indicesTensor必选索引张量,值必须在 [0, data.size(dim)) 范围内
updatesTensor必选更新值张量,与 data 维度数相同
reducestrNone聚合方式,可选值:None(update), 'add', 'multiply', 'amin', 'amax'

输出

参数Shapedtype描述
y与 data 相同与 data 相同输出张量,scatter 结果,与 data 形状相同

数据类型

data dtypeindices dtypeupdates dtype输出 dtype
float16int32 / int64float16float16
float32int32 / int64float32float32
bfloat16int32 / int64bfloat16bfloat16
int32int32 / int64int32int32
int64int32 / int64int64int64

规则与约束

  • data、indices、updates 的维度数必须相同
  • indices 的每个维度大小不能超过对应 data 或 updates 的维度大小
  • indices 中的值必须在 [0, data.size(dim)) 范围内
  • updates 和 data 的 dtype 必须一致
  • indices 的 dtype 必须为 int32 或 int64
  • reduce 为 None 时执行直接覆盖更新,为 'add' 时执行累加,为 'multiply' 时执行累乘,为 'amax'/'amin' 时取最大/最小值
  • 输出 shape 与 data shape 完全一致

支持范围

输入 tensor 各维度与参数的支持范围:

维度 / 参数范围备注
data维度数1 ~ 8cases.csv 实测 1 ~ 5;dataindicesupdates维度数必须相同
data各维度大小1 ~ 2097152cases.csv 实测 2 ~ 1048583(一维大张量场景)
indices各维度大小1 ~ 2097152cases.csv 实测 2 ~ 8193;每维 ≤ 对应data维度大小
updates各维度大小1 ~ 2097152cases.csv 实测 2 ~ 8193;shape 须与indices一致
indices[0, data.size(dim))cases.csv 实测覆盖完整索引范围
dim0 ~ 7cases.csv 实测 0 / 1;支持负数索引,等价范围为[-rank, rank-1]
reduceNone/add/multiply/amin/amaxcases.csv 实测全部 5 种取值

4. 精度要求

采用生态算子精度标准进行验证。

误差指标

  1. 平均相对误差(MERE):采样点中相对误差平均值

    $$ \text{MERE} = \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)+\text{1e-7}}) $$

  2. 最大相对误差(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 """ Scatter算子Torch Golden参考实现 将updates按索引indices更新到data中 公式: y[i] = updates[j] where indices[j] == i """ def scatter( data: torch.Tensor, dim: int, indices: torch.Tensor, updates: torch.Tensor, reduce: str = None ) -> torch.Tensor: """ 将updates按索引indices更新到data中 公式: y[i] = updates[j] where indices[j] == i Args: data: 输入数据张量 dim: 沿哪个维度scatter indices: 索引张量 updates: 更新值张量 reduce: 聚合方式 Returns: 输出张量,scatter结果 """ y = data.clone() if reduce is None or reduce == 'update': y.scatter_(dim, indices.long(), updates) elif reduce == 'add': y.scatter_add_(dim, indices.long(), updates) return y

6. 额外信息

算子调用示例

import torch import cann_bench data = torch.randn(1024, 1024, dtype=torch.float16, device="npu") indices = torch.randint(0, 1024, (1024, 512), dtype=torch.int32, device="npu") updates = torch.randn(1024, 512, dtype=torch.float16, device="npu") y = cann_bench.scatter(data, 1, indices, updates) # dim=1, 直接更新 # reduce=add 模式 data = torch.randn(2048, 512, dtype=torch.float32, device="npu") indices = torch.randint(0, 2048, (1024, 512), dtype=torch.int32, device="npu") updates = torch.randn(1024, 512, dtype=torch.float32, device="npu") y = cann_bench.scatter(data, 0, indices, updates, reduce="add")

【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台,推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench

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

http://www.cnnetsun.cn/news/2478729.html

相关文章:

  • CANN/asnumpy随机抽样API
  • wlnmp一键安装包260520更新:多软件版本升级,支持多系统架构快速部署
  • 智能救场答辩,PPT躺平出圈
  • BBDown实用指南:高效下载B站视频的完整解决方案
  • OpCore-Simplify:3步完成黑苹果配置的终极自动化工具
  • 《大营销平台系统设计实现》 - 营销服务 第3节:策略概率装配处理
  • 通过 curl 命令快速测试 Taotoken 大模型接口连通性
  • 3步完成IDM永久免费使用:开源激活脚本完全解析
  • 如何快速将B站缓存视频转换为MP4:m4s-converter完整使用教程
  • IDM激活脚本终极指南:如何免费锁定30天试用期无限使用
  • Buzz语音转文字工具中Faster Whisper模型下载失败的3步解决方案与深度解析
  • 别折腾小米电脑管家了!用这个锤子遗产HandShaker修改版,Win/Mac轻松访问安卓14手机文件
  • 从面积与性能权衡出发:深度解析Tessent MBIST中Bypass/Observation逻辑的配置艺术
  • 智能车竞赛光电组核心技术解析:从图像处理到PID控制实战
  • Cat-Catch资源嗅探工具:5步解锁网页媒体下载新境界
  • 2026四大便利店收银软件深度横评:从参数实测到选型避坑指南
  • 3分钟掌握Blender四边形重拓扑:QRemeshify终极简单指南
  • OpenCATS:如何构建企业级招聘自动化平台
  • CANN/Ascend C矩阵乘法Tiling参数获取接口
  • 深入解析设备树二进制(DTB)格式:从内核启动到驱动绑定的底层原理
  • 3个关键决策:为什么顶级技术团队选择Arco Design Pro构建企业级应用
  • AI Cover技术深度解析:从OpenAI到AWS S3的完整架构实现
  • 告别Eclipse插件!在Maven项目中用antlr4-maven-plugin自动生成解析器代码(附完整pom.xml配置)
  • 基于容器化技术构建安全高效的Linux在线调试环境方案
  • FreeRTOS互斥锁的‘坑’与‘宝’:优先级翻转那些事儿,用ESP32实测给你看
  • 2026年大厂Java面试高频场景题 + 八股文(万字干货,纯手工硬核整理)
  • 如何快速掌握FunASR后端解码:从声学特征到文本的完整指南
  • Qlib量化投资平台:用AI技术打造智能金融分析系统的终极指南
  • 碧蓝航线Alas脚本:告别肝帝生活,让游戏自动化的终极指南
  • Linux内核启动耗时测量:从日志时间戳到硬件计数器的五种实战方法