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

CANN社区SoftmaxCrossEntropyWithLogits算子设计

SoftmaxCrossEntropyWithLogits算子设计文档

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

一、需求背景

1.1 需求来源

社区任务03-8要求参考内置TBE SoftmaxCrossEntropyWithLogits,在昇腾 NPU 上完成SoftmaxCrossEntropyWithLogits算子的 Ascend C 设计、开发与测试交付。

1.2 背景介绍

1.2.1 算子目标

SoftmaxCrossEntropyWithLogits用于分类训练场景。输入features表示 logits,输入labels表示标签分布,算子输出每个样本的交叉熵损失loss,同时输出对 logits 的梯度backprop

本次设计目标如下:

  1. 功能语义与任务环境中的内置TBE SoftmaxCrossEntropyWithLogits对齐。
  2. 交付 Ascend C 原生算子工程,包含 Host 定义、InferShape、Tiling、AiCore Kernel、aclnn两段式接口、样例与测试框架。
  3. 面向 Atlas A2 训练系列产品,支持FLOATFLOAT16BFLOAT16三类浮点输入输出。
  4. 按任务环境内置 TBE 基线实现ND二维输入和NCHW四维输入支持,featureslabels同 shape、同 dtype,backprop与输入同 shape,loss在类别维归约后按 TBE 输出 format 写回。
  5. 对 TBE 配置中的 dtype、format、rank 和 shape 推导规则进行设计对齐,不把任务书明确排除的数据类型和输入广播纳入设计承诺。
1.2.2 TBE基线来源说明

内置 TBE 算子是本任务的功能、精度与性能对齐基线。基线信息需要在任务 CANN 环境中从以下位置确认:

基线层次直接路径关键文件 / 内容作用
TBE Kernel 实现层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl/dynamic/softmax_cross_entropy_with_logits相关实现核对 TBE 的核心计算语义与调度方式
算子原型层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_proto/inc/SoftmaxCrossEntropyWithLogits原型声明核对输入、输出、dtype、format 和 shape 推导
算子信息库层/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/config/ascend910b/SoftmaxCrossEntropyWithLogits配置条目核对 Atlas A2 /ascend910b上的注册与编译配置

本工作区已在 CANN 8.5.2、910B3 容器中完成基线探测。探测结论为:任务环境内置 TBE 的op_proto/inc/nn_norm_ops.h中保留ND or NHWC2D/4D等原型描述;op_impl/ai_core/tbe/config/ascend910b/aic-ascend910b-ops-info-legacy.jsonfeatures/labels/backprop的 format 为NCHW,NDloss的 format 为NHWC,NDop_impl/ai_core/tbe/kernel/config/ascend910b/ops_legacy/softmax_cross_entropy_with_logits.json的动态 kernel 配置列出FLOATFLOAT16BFLOAT16ND格式,aclnnop/aclnn_softmax_cross_entropy_with_logits.h声明 aclnn 入参与出参数据格式支持ND。本设计按 TBE 口径支持FLOATFLOAT16BFLOAT16,输入支持二维ND和四维NCHW同形输入,loss输出支持ND/NHWCbackprop输出支持ND/NCHW;任务书明确排除int64double与 broadcast,因此这三类能力不纳入本次设计。

1.2.3 TBE算子现状分析
1.2.3.1 支持的数据类型、数据格式与形状

本次 Ascend C 设计范围如下:

参数输入/输出数据类型formatshape
features输入FLOATFLOAT16BFLOAT16ND/NCHWND: [N, C]NCHW: [N, C, H, W]
labels输入features一致features一致features同 shape
loss输出features一致与 TBE 输出 format 对齐ND: [N]NCHW: [N, H, W]
backprop输出features一致features一致features同 shape

其中N表示 batch 数量,C表示类别数量,H/W表示四维布局下的空间维。featureslabels必须同 shape、同 dtype、同 format;lossbackprop的 dtype 必须与features一致。

格式边界说明如下:

来源数据类型与格式口径本设计处理
任务书要求对齐原 TBE 数据类型、数据格式;明确排除int64double与 broadcast保留浮点FLOAT/FLOAT16/BFLOAT16,不支持 broadcast、整数和双精度
TBE proto历史原型文字包含ND or NHWC2D/4D,并保留 broadcast 描述作为原 TBE 背景记录;其中 broadcast 已被任务书排除
ascend910bops-infofeatures/labels/backpropNCHW/NDlossNHWC/ND输入按ND/NCHW支持;loss输出 format 按ND/NHWC对齐
ascend910bkernel config 与 aclnn 头文件动态 kernel 配置与 aclnn 头文件列出ND作为二维 aclnn 直调路径的基线口径

关于审核反馈中的NCHW:CANN 8.5.2 的ascend910bops-info 中features/labels输入为NCHW/NDbackprop输出为NCHW/NDloss输出为NHWC/ND;原型说明中四维输入对应loss为 3D。因此本设计按 TBE 口径处理四维 layout:输入不声明NHWC支持;ND使用最后一维为类别维,NCHW使用第 1 维为类别维;backprop与输入同 shape;loss去除类别维后保留其余维度,NCHW [N,C,H,W]对应loss [N,H,W],输出 format 与 TBE 的NHWC/ND元数据对齐。Kernel 侧统一折叠为逻辑[A, R]计算域,其中R=C为类别归约维,A为其余维度乘积。

本任务不支持整数输入、不支持双精度输入、不支持featureslabels间的 shape 扩展或广播。

1.2.3.2 算子数学语义

设输入featureslabels按 format 折叠为逻辑二维计算域[A, R],其中R=C为类别归约维,A为 batch 与非类别维乘积。对第a个逻辑样本,先求类别维最大值:

$$ m_a = \max_{0 \le r < R} x_{a,r}. $$

使用稳定 softmax 形式计算指数和:

$$ s_a = \sum_{r=0}^{R-1}\exp(x_{a,r} - m_a). $$

softmax 概率为:

$$ p_{a,r} = \frac{\exp(x_{a,r} - m_a)}{s_a}. $$

loss输出为:

$$ \text{loss}a = -\sum{r=0}^{R-1} y_{a,r}\log(p_{a,r}). $$

Kernel 中使用等价形式避免直接计算log(softmax)

$$ \text{loss}a = \sum{r=0}^{R-1} y_{a,r}\left(\log(s_a) - (x_{a,r} - m_a)\right). $$

backprop输出为:

$$ \text{backprop}{a,r} = p{a,r} - y_{a,r}. $$

1.2.3.3 TBE算子计算语义分析

TBE / 参考实现的核心调度抽象是把输出backprop的有效计算域折叠为[A, R],其中R是类别归约维,A是其余维度乘积。二维ND [N, C]场景下即A=NR=C;四维NCHW [N, C, H, W]场景下即A=N*H*WR=C。本设计沿用该[A, R]抽象,Host 侧负责根据 format 做逻辑维度折叠和输出 shape 推导。

该算子的计算可以拆为三类操作:

  1. 沿类别维CReduceMax,得到稳定 softmax 所需的行最大值。
  2. 沿类别维CReduceSum,得到指数和以及 loss 归约结果。
  3. 对逻辑[A, R]元素做逐元素指数、除法、乘法和减法,按原 layout 写回backprop,并对每个逻辑样本写回loss

由于不同逻辑样本之间没有数据依赖,分核主轴选取A维。类别维R决定 UB 组织方式:R可完整进入 UB 时使用 FullLoad;R较大时使用 SplitR 分段重扫。

TBE 基线流程图如下:

二、需求分析

2.1 外部组件依赖

不引入新的第三方组件,复用开源算子仓已有能力:

组件用途
aclnn两段式接口提供GetWorkspaceSize和执行接口
opdev/l0op框架完成参数校验、执行器创建、临时 tensor 分配和 AICore launcher 注册
Host tiling 框架读取 shape、dtype 和平台信息,生成TilingDatatilingKey
Ascend C Kernel在 AiCore 上完成归约、指数、对数、逐元素梯度和写回
社区任务构建框架支持ascend910b独立算子构建、UT、样例和 runtime 对比

2.2 内部适配模块

代码交付采用社区任务独立算子工程组织,设计文档、接口文档、Host、Kernel、样例和测试脚本在同一提交目录内保持可追溯关系。当前工程目录职责如下:

模块对应文件 / 目录设计职责
构建入口CMakeLists.txtbuild.sh支持ascend910b独立算子构建、清理、UT 和 runtime 测试入口
aclnn 文档docs/aclnnSoftmaxCrossEntropyWithLogits.md描述两段式接口、参数、返回值和调用示例
aclnn 接口层op_api/aclnn_softmax_cross_entropy_with_logits.cpp参数校验、空 tensor 快速返回、连续化、执行器组装、输出 view copy
L0 原生调用层op_api/softmax_cross_entropy_with_logits.cpp分配loss/backprop临时输出并注册 AICore 任务
Host 定义op_host/softmax_cross_entropy_with_logits_def.cppdtype、format、AICore 配置和ascend910b注册
Shape 推导op_host/softmax_cross_entropy_with_logits_infershape.cpp根据ND/NCHW输入推导lossbackpropshape
Tilingop_host/softmax_cross_entropy_with_logits_tiling.cppformat 解析、逻辑[A,R]折叠、分核、UB 规划、FullLoad / SplitR / Empty 分支选择
Kernel 入口op_kernel/softmax_cross_entropy_with_logits_apt.cpp根据tilingKey分发 FullLoad、SplitR 或 Empty 执行路径
TilingDataop_kernel/softmax_cross_entropy_with_logits_tiling_data.hHost 到 Kernel 的参数结构
TilingKeyop_kernel/softmax_cross_entropy_with_logits_tiling_key.h模板 tiling key 声明与选择
测试框架tests/uttests/runtimeexamplesHost UT、aclnn 调用样例、custom/TBE runtime 对比脚本

2.3 需求模块设计

2.3.1 Ascend C算子原型

原生算子输入输出契约:

名称类别数据类型formatshape
features输入FLOATFLOAT16BFLOAT16ND/NCHWND: [N,C]NCHW: [N,C,H,W]
labels输入features一致features一致features同 shape
loss输出features一致与 TBE 输出 format 对齐ND: [N]NCHW: [N,H,W]
backprop输出features一致features一致features同 shape

aclnn两段式接口如下:

aclnnStatus aclnnSoftmaxCrossEntropyWithLogitsGetWorkspaceSize( const aclTensor* features, aclTensor* labels, aclTensor* loss, aclTensor* backprop, uint64_t* workspaceSize, aclOpExecutor** executor); aclnnStatus aclnnSoftmaxCrossEntropyWithLogits( void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, const aclrtStream stream);
2.3.2 设计范围与约束
类别约束项约束内容
硬件范围目标产品Atlas A2 训练系列产品
SoC 配置单算子工程默认ascend910b
数据类型输入输出FLOATFLOAT16BFLOAT16
数据格式输入输出输入ND/NCHWloss输出ND/NHWCbackprop输出ND/NCHW
rank支持范围ND二维,NCHW四维
shape输入关系featureslabels同 shape
shape输出关系backprop与输入同 shape;loss去除类别维后保留其余维,二维ND输出为[N]
dtype输入关系featureslabels同 dtype
dtype输出关系lossbackpropfeatures同 dtype
非连续 tensor接口层进入原生算子前连续化,输出通过ViewCopy写回
空 tensor接口层 / Host接口层快速返回,Host/Kernel 保留 Empty 分支
不支持范围数据类型不支持任务范围外的数据类型
不支持范围输入关系不支持featureslabels间的 shape 扩展或 broadcast

三、需求详细设计

3.1 使能方式

本设计面向 Ascend C 原生算子工程与aclnn两段式接口调用场景,硬件范围为 Atlas A2 训练系列产品。

上层调用 / 工具链状态
aclnn直调支持
TensorFlow / PyTorch 前端适配不作为本任务核心交付
ATC 推理不作为本任务核心交付
OPAT 调优不作为本任务核心交付

3.2 需求总体设计

整体链路分为四层:

  1. aclnn接口层:完成非空校验、dtype 校验、shape 校验、空 tensor 快速返回、输入连续化与输出ViewCopy
  2. L0 原生调用层:根据featuresshape 分配lossbackprop临时 tensor,并把 AICore 算子加入执行器。
  3. Host Tiling 层:读取 dtype、format、shape 与平台信息,根据 layout 确定逻辑AR=C,完成按逻辑样本分核、UB 规划和tilingKey选择。
  4. AiCore Kernel 层:按tilingKey进入 FullLoad、SplitR 或 Empty 分支,完成稳定 softmax cross entropy 计算并写回。

Host-Tiling-Kernel 策略图如下:

3.2.1 Host侧设计
3.2.1.1 接口校验与规整策略

aclnn接口层校验顺序如下:

  1. featureslabelslossbackprop非空。
  2. 四个 tensor 的 dtype 均属于支持列表。
  3. labelslossbackprop的 dtype 与features一致。
  4. featureslabelsformat 为NDNCHW
  5. featureslabelsshape 完全一致。
  6. ND输入要求 rank 为 2;NCHW输入要求 rank 为 4。
  7. lossshape 满足 TBE 类别维归约规则:二维ND[N],四维NCHW[N,H,W]
  8. backpropshape 与features完全一致。

合法输入进入计算前,接口层执行:

  1. featureslabels为空,返回空执行器。
  2. featureslabels执行Contiguous,保证原生 Kernel 面向连续存储。
  3. L0 层分配连续临时输出。
  4. 原生算子完成计算后,通过ViewCopy写回用户传入的lossbackprop
3.2.1.2 Shape推导策略

设输入 format 为ND时:

$$ \text{features.shape} = \text{labels.shape} = [N, C]. $$

则输出 shape 为:

$$ \text{loss.shape} = [N], $$

$$ \text{backprop.shape} = [N, C]. $$

设输入 format 为NCHW时:

$$ \text{features.shape} = \text{labels.shape} = [N, C, H, W]. $$

backprop与输入同 shape,loss按类别维归约规则去除C维并保留N/H/W

$$ \text{backprop.shape} = [N, C, H, W],\quad \text{loss.shape} = [N, H, W]. $$

对于四维 layout,loss的输出 format 与 shape 推导同时对齐 TBE 元数据和原型契约:输入为NCHWloss输出 format 为NHWC,逻辑上保留 batch 与非类别维,去除类别维;backprop始终与输入同 shape。以NCHW [2,3,4,5]为例,按 TBE 四维loss为 3D 的约定,归约类别维后得到逻辑 loss 形状[2,4,5]。Kernel 内部可用[N,1,H,W]形式保存行归约结果以便广播,但对外输出 shape 按[N,H,W]校验与写回。

Shape 推导要求featureslabels同 shape,不做 shape 扩展或 broadcast。

3.2.1.3 分核策略

Host tiling 将输入按 format 折叠为逻辑二维计算域:

$$ \text{ND}: A=N,\quad R=C. $$

$$ \text{NCHW}: A=N\cdot H\cdot W,\quad R=C. $$

其中A是逻辑样本数,是多核并行主轴;R是类别维,是每个逻辑样本的归约维。由于逻辑样本之间互不依赖,分核只按A维进行。

设可用 AIV 核数为coreNum

$$ \text{useCoreNum} = \min(A, \text{coreNum}). $$

每核基础行数:

$$ \text{blockFactor} = \left\lceil \frac{A}{\text{useCoreNum}} \right\rceil. $$

实际使用核数:

$$ \text{realCoreNum} = \left\lceil \frac{A}{\text{blockFactor}} \right\rceil. $$

尾核行数:

$$ \text{tailBlockFactor} = A - \text{blockFactor}\cdot(\text{realCoreNum}-1). $$

Kernel 侧根据blockIdx计算本核起始行,普通核处理blockFactor行,尾核处理tailBlockFactor行。

3.2.1.4 UB分块策略

设输入类型字节数为:

$$ b = \begin{cases} 4, & \text{FLOAT}, \ 2, & \text{FLOAT16 或 BFLOAT16}. \end{cases} $$

32B对齐下单个 block 能容纳的元素数为:

$$ \text{perBlock} = \frac{32}{b}. $$

类别维对齐长度为:

$$ R_{\text{align}} = \left\lceil \frac{R}{\text{perBlock}} \right\rceil \cdot \text{perBlock}. $$

FullLoad 路径要求单行完整Ralign能在 UB 中同时容纳输入队列、输出队列和 float32 中间缓冲。估算可容纳行数:

$$ A_{\text{ub}} = \left\lfloor \frac{UB}{M_{AR}+M_A} \right\rfloor. $$

其中MAR表示按[A, R]组织的输入、输出和中间缓冲开销,MA表示行级归约结果开销。当Aub至少能覆盖一个32B对齐粒度时,选择 FullLoad。

若 FullLoad 不满足 UB 容量要求,则进入 SplitR。SplitR 固定按较小的Atile 处理行,剩余 UB 用于分段容纳类别维:

$$ \text{rLoopTime} = \left\lceil \frac{R}{\text{rUbNumFactor}} \right\rceil. $$

尾段有效长度为:

$$ \text{rLoopTile} = \begin{cases} \text{rUbNumFactor}, & R \bmod \text{rUbNumFactor} = 0,\ R \bmod \text{rUbNumFactor}, & \text{otherwise}. \end{cases} $$

3.2.1.5 tilingKey规划策略

tilingKey由模板参数组成:

schId, featuresBrc, labelsBrc, db

本设计不支持featureslabels间的 shape 扩展或 broadcast,因此featuresBrclabelsBrc固定使用非扩展路径;db暂保留模板位。format 信息由 Host 侧转换为类别维位置、逻辑A/R、GM stride 和输出 shape 参数写入 tilingData。

schId分支触发条件作用
0FullLoadR维可完整装入 UB单行完整进入 UB 后完成 max、sum、loss、backprop
1SplitRFullLoad 容量不足分段重扫R维,先保证大C泛化能力
2EmptyA<=0R<=0空输入路径快速返回

Host 写入SoftmaxCrossEntropyWithLogitsTilingData后执行:

SetBlockDim(realCoreNum)

Kernel 侧根据blockIdx处理本核负责的行块,行间互不依赖,lossbackprop均由负责对应行的核直接写回。

3.2.2 Kernel侧设计
3.2.2.1 Kernel入口

Kernel 入口读取SoftmaxCrossEntropyWithLogitsTilingData,根据schId分发:

Kernel 分支对应 schId设计职责
FullLoad0中小R场景,完整逻辑行进入 UB 后计算;其中C==1、大AC和非对齐C有专用子路径
SplitR1R场景,分段扫描并重算输出
Empty2空输入或R==0边界场景

Kernel 计算流程图如下:

3.2.2.2 FullLoad路径

FullLoad 每次处理若干行和完整R维。单行处理流程如下:

  1. 从 GM 读取当前行featureslabels
  2. 将输入转为 float32 中间值。
  3. 执行ReduceMax得到m_n
  4. 计算z = features - m_n
  5. 计算exp(z)
  6. 执行ReduceSum得到s_n
  7. 计算backprop = exp(z) / s_n - labels并写回。
  8. 计算lossPart = labels * (log(s_n) - z)
  9. lossPartReduceSum得到loss[n]并写回。

该路径每行只读取一次features和一次labels,中间数据保留在 UB 内,是当前主要性能路径。

针对常见小类别数场景,FullLoad 内部进一步细分:

  1. C==1时 softmax 恒为1,直接计算backprop = 1 - labelsloss = 0,避免指数、对数和归约。
  2. NC场景按行块处理,并对C=2/3/4/5/8等形状使用列紧凑和行级标量复用子路径,减少通用Reduce和行级结果展开的固定开销。
  3. C32B对齐时 Host 记录有效列数,Kernel 右侧 padding 只参与 UB 对齐,不写回无效列,保证backprop按原 shape 输出不越界。
3.2.2.3 SplitR路径

SplitR 面向R维较大、完整行无法同时容纳输入和多个 float32 中间缓冲的场景。该路径使用三阶段分段重扫:

  1. 第一轮按R分段读取features,对每段做局部ReduceMax,归并为全行最大值m_n
  2. 第二轮按R分段读取features,计算exp(features - m_n)并累加全行指数和s_n
  3. 第三轮按R分段读取featureslabels,计算并写回backprop,同时累加各段 loss 贡献,最后写回loss[n]

该路径面向大类别维输入的泛化执行能力设计。相比 FullLoad,它增加了 GM 读取次数,性能需要在 runtime 对比中单独评估。

3.2.2.4 精度策略

精度设计如下:

  1. FLOAT输入以 float32 参与中间计算。
  2. FLOAT16BFLOAT16输入读取后转换为 float32,完成maxexpsumlog、乘法和减法。
  3. 输出 dtype 与输入 dtype 一致,写回前转换回对应类型。
  4. 使用log(sum) - (features - max)计算 loss,避免直接计算log(softmax)
  5. FullLoad 与 SplitR 使用相同数学公式,SplitR 的分段累加误差按 AscendOpTest 默认阈值验证。
3.2.2.5 Ascend C路径与TBE路径的差异点及原因
差异点Ascend C设计选择原因
分核主轴按逻辑A维分核每个逻辑样本互不依赖,按样本切分同步开销最低
UB 组织FullLoad 与 SplitR 两条路径C维大小直接决定完整行能否进入 UB
中间精度半精度输入统一转 float32 中间计算softmax cross entropy 对指数和对数敏感
loss 公式使用log(sum) - (x - max)提升数值稳定性
非连续输入aclnn层连续化后进入原生 KernelKernel 聚焦连续存储和显式 layout stride
平台实现面向 Atlas A2 / 910B 目标环境实现任务范围为 Atlas A2 / 910B

四、特性交叉分析

交叉维度设计关注点应对策略
dtype × 中间精度半精度直接执行指数和对数会放大误差统一使用 float32 中间计算,写回时转换
A× 小C启动开销占比较高使用 FullLoad,按任务小 shape 例外条款分析性能
A× 多核逻辑样本间无依赖A维分核,提高多核覆盖
A× 小C通用 Reduce 和行级结果展开固定开销占比高使用行块专用路径和小C子路径降低无效搬运和重复展开
C× UB 容量完整行无法进入 UB使用 SplitR 三阶段分段重扫
非 32B 对齐C搬运和向量计算存在尾段Host 生成对齐 tiling,Kernel 写回只处理有效元素
空 tensor × 普通分核A==0R==0会导致分核公式失效接口层快速返回,Host/Kernel 保留 Empty 分支
format × 类别维位置ND类别维在最后一维,NCHW类别维在第 1 维;四维loss输出 format 对齐 TBENHWC元数据Host 侧统一折叠为[A,R]并下发 stride 参数
非连续输入 × 连续 Kernelview stride 与 Kernel 连续假设不一致aclnn层执行ContiguousViewCopy
shape 扩展 × Shape 推导输入关系超出任务书要求要求featureslabels完全同形,不支持 broadcast

五、可维可测分析

5.1 验收标准与验证口径

验收项硬门槛目标值 / 说明
功能标准与任务环境内置 TBE 功能一致合法输入下aclnn两段式接口可正常执行
精度标准满足 AscendOpTest 默认阈值半精度和 BF16 使用默认容差评估
性能标准所有核参与场景性能不低于 TBE 95%以任务环境 TBE 计时为基线
小 shape 例外10 us 以下场景若差距不超过 3 us,可按任务书例外条款说明需要保留仿真或性能分析材料
泛化标准覆盖常规、边界、不同C规模和ND/NCHW输入 format 场景FullLoad 为性能主路径,SplitR 为大C兜底路径
文档标准README、aclnn 文档、设计文档口径一致不声明任务范围外能力

5.2 验证矩阵

验证项典型场景验证方式 / 产出
dtype 覆盖FLOATFLOAT16BFLOAT16与 TBE / golden 对比lossbackprop
format 覆盖输入ND [N,C]NCHW [N,C,H,W];输出loss覆盖ND/NHWC覆盖类别维位置、loss shape 和 backprop layout
小 shape[1,1][1,7][7,1][1,16]正确性、耗时和小 shape 差值记录
常规 shape[16,16][64,128][256,257]正确性和性能对比
四维 shapeNCHW [2,3,4,5]验证类别维归约后的lossshape 和与输入同 shape 的backprop
C[8,2048][16,4096]或按 TBE 支持范围选择覆盖 SplitR 路径
A[1024,64][4096,32]NCHW [64,16,8,8]覆盖多核分核
非对齐C[17,255][21,257]覆盖尾段和32B对齐
空 tensor[0,C][N,0]验证空路径与 TBE 行为一致
非连续输入切片或转置后的 view验证Contiguous + ViewCopy语义
非法输入dtype 不一致、shape 不一致、非支持 rank/format、broadcast 输入验证错误码和快速失败路径

当前交付目录保留 Host UT 与 runtime custom/TBE 对比入口。Host UT 覆盖 InferShape、Tiling 和基础错误路径;runtime 用例覆盖 dtype、输入 format、常规 shape、小 shape、四维 shape、非对齐C、多核A、大C、空 tensor、非连续输入和非法输入等场景,用于验证lossbackprop的正确性、精度和性能表现。

5.3 兼容性分析

本设计的兼容性结论如下:

  1. SoftmaxCrossEntropyWithLogits的正式语义与任务环境内置 TBE 保持一致,输入featureslabels同 shape、同 dtype、同 format,backprop与输入同 shape,loss为类别维归约后的 shape。
  2. 支持FLOATFLOAT16BFLOAT16三类任务范围内 dtype;输入支持ND二维[N,C]NCHW四维 layout,loss输出 format 按 TBE 对齐ND/NHWC
  3. aclnn接口层兼容非连续输入的逻辑 view 语义,进入原生 Kernel 前完成连续化,输出通过 ViewCopy 写回。
  4. 兼容空 tensor、小 shape、非对齐C、多核A、四维 layout 和大C输入,分别由接口快速返回、FullLoad、小C专用路径、layout stride 和 SplitR 路径覆盖。
  5. 任务范围外 dtype、rank 和 shape 关系由接口与 Host 侧校验拒绝,不进入 Kernel 主执行路径。

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

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

http://www.jsqmd.com/news/946484/

相关文章:

  • 实战指南:基于快马平台开发符合国内需求的ai儿童故事生成器
  • 测试左移遇上AI右延:当ChatGPT生成用例、Claude分析日志、LLM驱动探索性测试——你还在手动点点点?
  • 如何快速掌握OpenCode:面向开发者的开源AI编程助手完整指南
  • 30天从0到1搭建AI Agent工作流,效率提升300%,小白也能学会并收藏这份实践指南
  • AI工具链如何引爆业务增长:7步完成从数据孤岛到智能预测闭环的落地实践
  • 用STM32F103RCT6和0.96寸OLED,我DIY了一个能控制空调风扇的万能遥控器(附完整代码)
  • 告别‘不支持编解码器’:手把手教你修改FFmpeg源码,让ffplay流畅播放H265的RTMP直播流
  • 讲真的2026年广州专利申请与无效律师 这5位值得推荐 - 本地品牌推荐
  • 别再傻傻分不清了!用大白话给你讲明白电脑/手机里的RAM、ROM和Cache
  • 2026年专业的天津河西企业搬家/天津河西搬家公司品牌排行 - 行业平台推荐
  • 数据标注避坑指南:解决Labelme闪退,从图片格式到文件路径的完整自查清单
  • 手把手教你用STM32CubeMX配置TM1616数码管驱动(附完整代码和原理图)
  • 计算机毕业设计之基于hadoop的社交媒体情感分析系统设计与实现
  • 手把手教你用ethtool-E命令修改网卡EEPROM(附虚拟机安全测试流程)
  • 3分钟免费美化:让Windows系统拥有macOS精致鼠标指针的完整指南
  • MATLAB一键运行的心电基线漂移校正工具(小波法,含对比图与多小波支持)
  • 解决90%的关键词提取难题:bert-uncased-keyword-extractor常见问题与解决方案
  • C++开发避坑:0xC0000005访问冲突,除了空指针你还要检查内存对齐
  • DeepSeek V4 vs Claude Code实测:PDF结构化提取的工程化选型指南
  • 稀疏自编码器在语言模型分析与数据审计中的应用
  • 企业级AI-VR协同平台搭建:从NVIDIA Omniverse Connect配置到自研空间意图识别模型(含GitHub私有仓库邀请码)
  • BioGPT社区生态:如何参与开源医疗AI项目并贡献代码
  • 2026年靠谱的打包搬家服务/写字楼搬家服务/仓库搬家服务实力公司推荐 - 品牌宣传支持者
  • 2026年知名的东莞监控维护/东莞监控热选公司推荐 - 品牌宣传支持者
  • 从eSIM到-40℃宽温:拆解一款工业级MiniPCIe 4G模组(ASR平台)的选型要点与实战配置
  • 告别阻塞延时!STM32+ADS1115多通道轮询采样的高效定时器方案
  • GPT-4o实测:AI编程与计算机自动化操作的工程落地路径
  • OneMore插件终极指南:160+功能彻底解放你的OneNote生产力
  • 2026年热门的东莞监控高清/东莞监控施工年度精选公司 - 行业平台推荐
  • MATLAB近红外光谱PLS建模与交叉验证选主成分工具集