CANN/asc-devkit AdjustSoftMaxRes API
AdjustSoftMaxRes【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Kirin X90√Kirin 9030√功能说明本接口用于调整SoftMax的计算结果为指定的值。主要用于对SoftMax相关计算结果做后处理。当输入的max中存在指定的值的时候会调整对应的softmaxres中的结果为输入的自定义的值。以上调整方式为按行进行即当max某一行的值为某个值时调整当前softmaxres对应一行的值都为输入的值。为方便理解通过Python脚本实现的方式表达其计算公式如下其中res是输入也是输出max\from\to\res_shape都为输入。def adjust_softmax_res(res, max, from, to, res_shape): for i in res_shape[0]: if max[i] from: for j in res_shape[1]: res[i][j] to return函数原型template typename T1, typename T2, bool isDataFormatNZ false, uint8_t stepSizeMode 0 __aicore__ inline bool AdjustSoftMaxRes(const LocalTensorT1 softMaxRes, const LocalTensorT2 maxTensor, const uint32_t from, const T1 to, const SoftMaxShapeInfo softmaxShapeInfo)参数说明表 1模板参数说明参数名描述T1softMaxRes的数据类型。Ascend 950PR/Ascend 950DT支持的数据类型为half、float。Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持的数据类型为half、float。Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持的数据类型为half、float。Kirin X90支持的数据类型为half、float。Kirin 9030支持的数据类型为half、float。T2maxTensor的数据类型。Ascend 950PR/Ascend 950DT支持的数据类型为half、float。Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持的数据类型为half、float。Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持的数据类型为half、float。Kirin X90支持的数据类型为half、float。Kirin 9030支持的数据类型为half、float。isDataFormatNZ当前输入输出的数据格式是否为NZ格式默认数据格式为ND即默认取值为false。stepSizeModemaxTensor取元素的步进长度的模式。参数取值如下0默认值每个BlockSize32字节内取第一个元素的数值与输入from的数值作对比。即maxTensor的数据类型为float时按照输入shape为(m, 8)的格式每8个数取一个数maxTensor的数据类型为half时按照输入shape为(m, 16)的格式每16个数取一个数。非0取maxTensor每个元素的数值与输入from的数值作对比。即按照输入shape为(m, 1)的格式每次取一个元素的数值与输入from的数值作对比。该参数取值非0时仅支持maxTensor为ND格式。表 2接口参数说明参数名输入/输出描述softMaxRes输入/输出既是源操作数也是目的操作数。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。LocalTensor数据结构的定义请参考LocalTensorlast轴长度需要32Byte对齐。一般为softmax计算的输出结果。maxTensor输入源操作数。类型为LocalTensor支持的TPosition为VECIN/VECCALC/VECOUT。softmax计算过程中reducemax的结果。maxTensor的last轴长度固定为32Byte即一个datablock长度。该datablock中的所有数据为同一个值。比如half数据类型下该datablock中的16个数均为相同的reducemax的值。非last轴的长度与softMaxRes保持一致。from输入源操作数类型为uint32_t。需要判断的maxTensor中的值。需要注意的是由于maxTensor中的值均为浮点数类型因此此处需要填入的值为浮点数类型对应十六进制的值。比如当需要判断maxTensor是否有1.0这个值时from值需要填入1.0对应的十六进制值0x3f800000。to输入源操作数类型和softMaxRes的数据类型保持一致。需要往softMaxRes中填充的值。softmaxShapeInfo输入softMaxRes的shape信息结构定义如下struct SoftMaxShapeInfo { uint32_t srcM; // 非尾轴乘积长度 uint32_t srcK; // 尾轴长度必须32Byte对齐 uint32_t oriSrcM; // 原始非尾轴乘积长度 uint32_t oriSrcK; // 原始尾轴长度 };需要注意目前仅支持ND输入。返回值说明bool类型当返回true时表示maxTensor中存在需要判断的值若返回false则表示maxTensor中不存在需要判断的值。约束说明操作数地址对齐要求请参见通用地址对齐约束。当参数softmaxShapeInfo中srcM ! oriSrcM 或者 srcK ! oriSrcK时开发者需要对GM上的原始输入(oriSrcM, oriSrcK)在M或K方向补齐数据到(srcM, srcK)补齐的数据会参与部分运算在输入输出复用的场景下API的计算结果会覆盖srcTensor中补齐的原始数据在输入输出不复用的场景下API的计算结果会覆盖dstTensor中对应srcTensor补齐位置的数据。调用示例本样例中需要对SoftMax计算结果做后处理判断maxTensor中是否存在0xFF7FFFFF如果存在刷新对应结果为0。本样例中实现的是固定shape为输入x[32, 32]输出y[32, 32]的AdjustSoftMaxResCustom算子。输入softMaxRes的shape大小为[32,32]maxTensor的shape大小为[32,8]数据类型均为float。AscendC::LocalTensorfloat srcLocal inQueueSrc.DeQuefloat(); AscendC::LocalTensorfloat maxLocal inQueueMax.DeQuefloat(); AscendC::LocalTensorfloat dstLocal outQueueDst.AllocTensorfloat(); AscendC::LocalTensorfloat tmpTensor calcBuf.Getfloat(); AscendC::SoftMaxShapeInfo srcShape {height, width, height, width}; AscendC::AdjustSoftMaxResfloat, float(srcLocal, maxLocal, FROM, TO, srcShape); AscendC::DataCopy(tmpTensor, srcLocal, height * width); AscendC::DataCopy(dstLocal, tmpTensor, height * width);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598253.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!