| Files | Last commit | Last update |
|---|---|---|
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago | |
迁移开源TF插件--math Co-authored-by: yaochen<yaochen15@huawei.com> # message auto-generated for no-merge-commit merge: !4308 merge transfer-math into master 迁移开源TF插件--math Created-by: nextyale Commit-by: yaochen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:迁移TF插件 See merge request: cann/ops-math!4308 | 3 months ago | |
legacy下线:为AdaCast/SignBitsUnpack/Sinh/Spence/Tan新增tiling/infer调试日志+op_graph InferDataType迁移 Co-authored-by: zhouxuan78<zhouxuan78@huawei.com> # message auto-generated for no-merge-commit merge: !4498 merge master into master legacy下线:为AdaCast/SignBitsUnpack/Sinh/Spence/Tan新增tiling/infer调试日志+op_graph InferDataType迁移 Created-by: zhouxuan78 Commit-by: zhouxuan78 Merged-by: cann-robot Description: ## 描述 Legacy包下线整改:为AdaCast/SignBitsUnpack/Sinh/Spence/Tan 5个算子新增tiling/infer调试日志,补充spence op_graph InferDataType迁移。 ## 变更内容 - tiling入口新增OP_LOGD锚点日志,TilingData新增OP_LOGI日志 - InferShape新增OP_LOGI输出日志 - 补充spence_graph_infer.cpp(InferDataType迁移到op_graph,IMPL_OP注册) ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> ## 测试 <!-- 描述您如何测试这些更改。--> ## 文档更新 <!-- 如果有文档更新,请在这里描述。--> ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他:Legacy包下线整改 See merge request: cann/ops-math!4498 | 2 months ago | |
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago | |
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago | |
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago | |
Math仓算子适配Ascend350平台 Co-authored-by: huairuchen<chenhuairu@huawei.com> # message auto-generated for no-merge-commit merge: !6372 merge dvlite-math-350-adapt into master Math仓算子适配Ascend350平台 Created-by: huairuchen Commit-by: huairuchen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Math仓部分随机数算子在350平台进行适配 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/4202 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 算子泛化测试,冒烟测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6372 | 16 days ago | |
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago | |
[CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Co-authored-by: u010470851<shangguanqinnan@huawei.com> # message auto-generated for no-merge-commit merge: !6799 merge fix/ndtri-subnormal-infershape into master [CANNBot]修复Ndtri完善边界处理、形状推导和 GEIR 样例 Created-by: u010470851 Commit-by: u010470851 Merged-by: cann-robot Description: ## 描述 Ndtri 的 FP32/BF16 次正规数结果与边界验收参考不一致,缺少显式 InferShape 注册;tiling 还会错误接受未解析的负维度和元素数乘积溢出的形状。GEIR 样例忽略 dtype 参数、固定生成 FP32 数据,且部分失败路径没有正确检查返回值或释放资源。 - 在特殊值判断前按整数位模式将 FP32/BF16 正、负次正规数转为带符号零,复用零输入返回 -inf 的处理;FP16 跳过该步骤。 - 补充逐元素 InferShape 注册,保持输入输出形状一致,覆盖空张量、动态维度和动态 rank。 - tiling 在计算切分参数前拒绝负维度及元素总数溢出;保留空张量和最多 8 维的合法输入。 - 保留两份 GEIR 样例的原宏、函数、固定形状和值,仅修复 dtype 参数解析、输入编码/输出解码、AddGraph 和文件写入错误检查、临时输入缓冲及 Session 释放。 FP16 转换使用样例内的位级实现,与公共 graph 构建脚本兼容,无需额外链接 ACL 转换库。 ## 关联的Issue 关联的Issue https://gitcode.com/cann/ops-math/issues/4584 ## 测试 环境:950。 - 原始完整尺寸 GEIR 边界用例 8/8 通过;对应 release kernel 8 例也通过。NPU 输出重新采集,CPU/GPU 参考复用此前实测的完整 dump,已校验完整输入 SHA256 一致,按原三方判据比较。 - 普通输入覆盖三种 dtype,元素数 65、65536、1048576;两实现、两轮共 36 次三方精度验证均通过,同组输出逐字节一致。未修改 Golden、原始用例或验收容差。 - 标准命令 bash build.sh --run_example ndtri graph --soc=ascend950 原样通过,两份 GEIR 样例均编译和运行成功;未修改公共构建脚本或增加链接参数。 - 两份 GEIR 样例的 FP32、FP16、BF16 共 6/6 通过;固定形状 (4, 2)、全 0.5 输入及原输出文件名保持不变,核对输入/输出字节数、类型、数值和打印结果。 - 非零输入类型校验 3/3 通过:本地验证副本使用 0.25,核对三种 dtype 的输入编码、结果文件和打印解码;提交样例保持原输入。 - FP16 位级转换对照 Python struct 验证,覆盖全部 65536 种 FP16 位模式、最近偶数舍入边界、随机 FP32 输入和溢出边界;有符号零、次正规数、Inf/NaN 语义均正确。 - 错误路径 7/7 通过:两份样例的非法 dtype、AddGraph 失败、输入 SetData 失败、输入/输出文件打开失败、缓冲写入失败。正常路径及 AddGraph/文件错误路径核对 Session 在 GEFinalize 前释放,输入创建失败时核对 GEFinalize 被调用。 - Host UT 22/22 通过。新增回归先复现了原实现错误接受 3 组负维度形状及 2 组乘积溢出形状,修复后均按预期拒绝;同时回归 8 维合法边界、9 维拒绝及原有测试。 - 当前验证包的真实 GEIR 探针 8/8 通过:8 维、动态维度和动态 rank 正常执行;9 维、INT32/DOUBLE、缺输入按预期拒绝;7 维 NCHW 描述经图通路接受并得到正确结果。 次正规数修复阶段的同包 kernel 性能对照:每次预热 1 次、采样 4 次;普通输入交换顺序测两轮,合并 8 个样本取中位数。原 8 条边界用例耗时增加 0.81%–1.58%(基线精度失败,修复后通过)。普通输入 1048576 元素的结果: | 数据类型 | 修改前(us) | 修改后(us) | 耗时变化 | | --- | ---: | ---: | ---: | | FP32 | 36.3825 | 36.7345 | +0.97% | | BF16 | 35.6410 | 36.2540 | +1.72% | | FP16 | 35.7595 | 35.6255 | -0.37% | 小尺寸微秒级耗时存在轮间波动,未作统计显著性判断。 ## 文档更新 README 补充次正规数边界行为、FP16 计算说明、维数及运行时形状约束,并规范调用表。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6799 | 5 days ago |
Ndtri
English | 简体中文
Product Support Status
| Product | Supported |
|---|---|
| Ascend 950PR&950DT products | √ |
| Atlas A3 products | √ |
| Atlas A2 products | √ |
| Atlas 200I/500 A2 inference products | × |
| Atlas inference products | √ |
| Atlas training products | √ |
Function Description
-
Operator function: computes the inverse standard normal cumulative distribution function (probit / inverse normal CDF). It computes the standard normal quantile element by element for the input probability tensor. The bottom layer uses the piecewise rational approximation algorithm of the Cephes math library.
-
Computation formula:
yi=ndtri(xi)=Φ−1(xi)=2⋅erf−1(2xi−1),xi∈(0,1)y_i = \mathrm{ndtri}(x_i) = \Phi^{-1}(x_i) = \sqrt{2} \cdot \mathrm{erf}^{-1}(2 x_i - 1), \quad x_i \in (0, 1) yi=ndtri(xi)=Φ−1(xi)=2⋅erf−1(2xi−1),xi∈(0,1)
- Special value handling:
| Input xix_ixi | Output yiy_iyi |
|---|---|
0 |
-inf |
1 |
+inf |
| Positive and negative FP32/BF16 subnormal values | -inf; the inputs are treated as zero during computation |
| xi<0x_i < 0xi<0 (excluding the subnormal values above) or xi>1x_i > 1xi>1 | NaN |
NaN / +inf / -inf |
NaN |
FP16 inputs are first promoted to FP32. FP16 subnormal values become normal FP32 values and are processed by the original numerical algorithm.
Parameter Description
| Parameter Name | Input/Output/Attribute | Description | Data Type | Data Format |
|---|---|---|---|---|
| x | Input | Probability tensor for the ndtri computation, which is x_i in the formula. The recommended value range is (0, 1). | FLOAT, FLOAT16, BFLOAT16 | ND |
| y | Output | Computation result of the inverse standard normal CDF, which is y_i in the formula. The output has the same shape and data type as the input. A scalar input produces a scalar output, and an empty tensor produces an empty tensor of the same shape. | FLOAT, FLOAT16, BFLOAT16 | ND |
Constraint Description
- The input x has at most 8 dimensions.
- At runtime, each dimension of input x must be a non-negative integer, and the total number of elements must not exceed the maximum value of INT64.
Invocation Description
| Invocation Method | Sample Code | Description |
|---|---|---|
| GE graph mode | test_geir_ndtri | Invokes the Ndtri operator by building a graph through the operator IR. |