CANN PyPTO 元素级倒数算子 pypto.reciprocal 使用指南

发布时间:2026/9/19 12:58:05
CANN PyPTO 元素级倒数算子 pypto.reciprocal 使用指南 CANN PyPTO 元素级倒数算子 pypto.reciprocal 使用指南【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto导读本文系统讲解 CANN PyPTOParallel Tensor/Tile Operation 编程范式中元素级倒数算子pypto.reciprocal的完整用法覆盖产品支持情况、函数原型、参数与精度模式HIGH_PRECISION / INTRINSIC、约束条件以及可复现的调用示例。读者将掌握如何在昇腾 AI 处理器上通过 PyPTO 完成out 1 / input的逐元素倒数计算并理解其底层 Python 绑定与 ST 测试实现从而在实际算子开发中正确选型精度模式并规避格式限制。产品支持情况pypto.reciprocal在以下昇腾产品系列上受支持Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持说明以上支持情况以当前仓库文档声明为准实际使用前建议结合目标环境的产品型号与 PyPTO 版本确认。功能说明pypto.reciprocal计算输入张量的元素级倒数element-wise reciprocal数学定义为out[i] 1 / input[i]该算子不改变输入张量的形状与数据类型仅对每个元素独立执行倒数运算属于典型的逐元素element-wise向量算子可广泛应用于归一化、注意力 softmax 分母求逆、归一化因子计算等需要取倒数的场景。函数原型pypto.reciprocal(input, precision_typepypto.PrecisionType.HIGH_PRECISION) - Tensor从源码看该接口定义在 python/pypto/op/math.py#L1382-L1412函数体直接调用底层绑定接口op_wrapper def reciprocal(a: Tensor, precision_type: PrecisionType PrecisionType.HIGH_PRECISION) - Tensor: ... return pypto_impl.Reciprocal(a, precision_type)其中pypto_impl.Reciprocal在 python/pypto/pypto_impl/init.pyi#L627 中声明是 PyPTO 对外暴露的 C/pybind 绑定入口。此外Tensor对象还提供等价的方法调用形式见 python/pypto/tensor.py#L933-L934def reciprocal(self, precision_type: PrecisionType PrecisionType.HIGH_PRECISION) - Tensor: return pypto.reciprocal(self, precision_type)因此以下两种写法等价y pypto.reciprocal(x) y x.reciprocal()参数说明参数类型说明inputTensor输入张量。支持的数据类型为DT_FP16、DT_BF16、DT_FP32。不支持空 Tensor支持的维度1-4 维Shape Size 不大于 2147483647即 INT32_MAX。precision_typePrecisionType可选倒数操作的精度模式。默认值为PrecisionType.HIGH_PRECISION。HIGH_PRECISION使用更高精度的计算方式减少精度损失。INTRINSIC直接使用芯片指令进行计算速度更快。精度模式 PrecisionType 详解PrecisionType是 PyPTO 内置的枚举类型定义于 Python 侧 python/pypto/enum.py#L37PrecisionType pypto_impl.PrecisionType其枚举成员在类型声明文件 python/pypto/pypto_impl/init.pyi#L140-L142 中可确认class PrecisionType(enum.Enum): INTRINSIC ... HIGH_PRECISION ...两种模式的取舍建议HIGH_PRECISION默认底层采用更高精度的中间计算路径能显著减少除法/取倒数过程中的精度损失适合对数值精度敏感、且性能余量充足的场景。注意reciprocal的默认值正是HIGH_PRECISION与rsqrt、sqrt、exp、log等默认INTRINSIC的算子不同说明该算子默认策略更偏向精度优先。INTRINSIC直接映射到芯片上的倒数指令intrinsic instruction计算速度快适合对吞吐敏感、对精度要求相对宽松的场景。同一枚举还被div、remainder、pow、exp、sqrt、rsqrt、log等算子复用见 python/pypto/op/math.py 中多处precision_type参数因此掌握该枚举的语义即可迁移到其他数学算子。返回值说明类型说明Tensor包含输入张量元素级倒数的新张量。返回张量与输入张量形状一致且不修改原输入张量。约束说明使用pypto.reciprocal时需注意以下限制Tensor 类型输入不支持TileOpFormat.TILEOP_NZ格式。若输入张量采用 NZ 分形格式需要先转换为受支持的格式如 ND 等后再调用本算子。此外输入张量必须满足支持数据类型DT_FP16、DT_BF16、DT_FP32不支持整型因为整型除法语义与浮点倒数不同不支持空 Tensor支持 1-4 维Shape Size 不大于 INT32_MAX2147483647。调用示例示例1基本使用默认高精度模式import pypto x pypto.tensor([4], pypto.DT_FP32) y pypto.reciprocal(x) # Input x: [-0.4595, -2.1219, -1.4314, 0.7298] # Output y: [-2.1763, -0.4713, -0.6986, 1.3702]该示例即文档 API 注释与 python/pypto/op/math.py#L1400-L1406 中的内置示例对 FP32 四元素张量逐元素取倒数输出与输入一一对应如1 / (-0.4595) ≈ -2.1763。示例2使用高精度模式进行 FP16 计算import pypto # 使用高精度模式进行FP16计算 x pypto.tensor([4], pypto.DT_FP16) y pypto.reciprocal(x, pypto.PrecisionType.HIGH_PRECISION) # Input x: [4] # Output y: [0.25]FP16 有效位数较少默认高精度模式可降低舍入误差。也可使用等价的方法调用形式y x.reciprocal(pypto.PrecisionType.HIGH_PRECISION)示例3使用指令模式INTRINSICimport pypto # 使用指令模式 x pypto.tensor([4], pypto.DT_FP32) y pypto.reciprocal(x, pypto.PrecisionType.INTRINSIC) # Input x: [4] # Output y: [0.25]INTRINSIC 模式直接使用芯片倒数指令追求更快的计算速度适合性能敏感场景。源码级实现佐证从 Python 绑定到 ST 测试底层绑定与调用链pypto.reciprocal的完整调用链为pypto.reciprocal(x, precision_type) └─ pypto_impl.Reciprocal(a, precision_type) # 见 python/pypto/op/math.py#L1412 └─ PrecisionType 枚举pypto_impl.PrecisionType # 见 python/pypto/enum.py#L37绑定入口Reciprocal声明于 python/pypto/pypto_impl/init.pyi#L627其实际实现位于 C 侧的算子内核/编译管线中负责把逐元素倒数翻译为设备侧向量指令。在 tile 编程中的典型用法结合测试验证仓库的 ST 测试 python/tests/st/operation/vector/test_reciprocal.py 展示了reciprocal在 tile 分形编程中的标准用法先通过pypto.view切出 tile再对 tile 调用reciprocal并通过pypto.assemble写回结果张量def op_reciprocal(params, a, b): n, m a.shape view_shape, tile_shape params for b_idx in pypto.loop(int(np.ceil(n / view_shape[0])), nameLOOP_RECIPROCAL_L0, idx_nameb_idx): for s_idx in pypto.loop(int(np.ceil(m / view_shape[1])), nameLOOP_RECIPROCAL_L1, idx_names_idx): tile_a pypto.view( a, view_shape, [b_idx * view_shape[0], s_idx * view_shape[1]], valid_shape[...], ) pypto.set_vec_tile_shapes(tile_shape[0], tile_shape[1]) tile_a.move(pypto.reciprocal(tile_a)) pypto.assemble(tile_a, [b_idx * view_shape[0], s_idx * view_shape[1]], b)其 golden 参考实现直接使用 PyTorch 的torch.reciprocal见同文件 python/tests/st/operation/vector/test_reciprocal.py#L40-L41def op_reciprocal_golden(param, a, b): return torch.reciprocal(a)一维场景的测试见 python/tests/st/operation/vector/test_vector_operation_1d.py#L474-L506其中在pypto.function上下文中对长度为tiling * 4的 FP32 张量按 view/tile 切分后逐 tile 执行tile_a.move(pypto.reciprocal(tile_a))并用torch.reciprocal的结果以rtol1e-3, atol1e-3做数值比对。这说明reciprocal可直接作用于 view/tile 切片天然适配 PyPTO 的 tile 分形编程模型输出精度可通过与torch.reciprocal的比对测试进行验证默认容差 1e-3。在张量除法中的隐式应用从 python/pypto/tensor.py#L406 可以看到PyPTO 张量的除法实现内部复用了reciprocalreturn pypto.mul(pypto.reciprocal(self), other)因此a / b标量或张量倒数场景在底层可能经由reciprocal加mul组合完成这也解释了为何reciprocal的精度模式会直接影响除法结果的数值精度——需要高精度除法结果时应显式使用PrecisionType.HIGH_PRECISION。相关接口pypto.rsqrt计算输入张量的元素级平方根的倒数1 / sqrt(x)默认精度模式为INTRINSIC。pypto.div计算两个张量的元素级除法同样支持precision_type精度模式参数。小结pypto.reciprocal是 PyPTO 数学算子库中最基础的逐元素算子之一一句话概括其用法对 FP16/BF16/FP32 且 1-4 维的 Tensor 调用pypto.reciprocal(x)即得到逐元素倒数默认高精度模式需要极致性能时可切换PrecisionType.INTRINSIC。开发时注意三点输入不支持TileOpFormat.TILEOP_NZ格式精度敏感场景优先保持默认的HIGH_PRECISION该算子可无缝用于 view/tile 分形编程并可作为底层构件参与除法等复合运算的实现。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询