尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PyPTO log10 接口详解:Ascend NPU 上以 10 为底的对数运算编程指南

PyPTO log10 接口详解:Ascend NPU 上以 10 为底的对数运算编程指南 PyPTO log10 接口详解Ascend NPU 上以 10 为底的对数运算编程指南【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pyptopypto.log10是 CANN PyPTOParallel Tensor/Tile Operation 编程范式张量 API 中用于对 Tensor 逐元素计算以 10 为底对数out log_10(input)的核心数学算子。本文围绕该接口的产品支持情况、函数原型、参数语义、精度模式选择、TileShape 切分设置与完整调用示例展开并结合仓库源码印证其底层实现python/pypto/op/math.py与枚举定义PrecisionType、LogBaseType帮助开发者在 Atlas 训练/推理系列产品上正确、高效地完成对数运算的 kernel 编写与调优。产品支持情况根据 pypto-log10.md 的官方说明pypto.log10在以下硬件平台上受支持Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持。需要说明的是该产品支持矩阵来自文档注释npu950、npuA3、npu910b等标记实际可用性请以对应版本配套的芯片与驱动环境为准。功能说明逐元素计算以 10 为底的对数pypto.log10对输入 Tensor 的每个元素执行以 10 为底的对数运算其数学语义为out[i] log_10(input[i])该语义在源码 docstring 中有明确表述This function calculates the formula: out log_10(input).见 math.py。它与同一文件中的log自然对数、log2以 2 为底、log1plog(1 input)共同构成 PyPTO 的对数算子家族底层均汇聚到统一的pypto_impl.Log计算入口通过LogBaseType枚举区分底数return pypto_impl.Log(input, pypto_impl.LogBaseType.LOG_10, precision_type)从 pypto_impl/init.pyi 的桩定义可以看到LogBaseType包含LOG_E、LOG_2、LOG_10三个取值log10对应的正是LOG_10。这意味着对数运算的硬件指令是复用的区别仅在于底数参数从而保证了同一套精度策略在三类对数接口上行为一致。函数原型pypto.log10(input, precision_typepypto.PrecisionType.INTRINSIC) - Tensor函数定义位于 python/pypto/op/math.py并且被op_wrapper装饰属于 PyPTO 算子统一封装层。此外Tensor 对象还提供了等价的方法式调用入口Tensor.log10(self, precision_type: PrecisionType PrecisionType.INTRINSIC) - Tensor见 python/pypto/tensor.py其实现为return pypto.log10(self, precision_type)。因此以下两种写法完全等价y pypto.log10(x) y x.log10()参数说明参数类型说明inputTensor源操作数。支持的类型为 TensorTensor 支持的数据类型为 DT_FP32、DT_FP16、DT_BF16支持的维度为 1~4 维不支持空 TensorShape Size 不大于 2147483647即 INT32_MAX。precision_typePrecisionType可选对数操作的精度模式默认值为PrecisionType.INTRINSIC。INTRINSIC直接使用芯片指令进行计算速度更快。HIGH_PRECISION使用更高精度的计算方式减少精度损失。precision_type 精度模式的源码佐证PrecisionType枚举定义于 pypto_impl/init.pyi包含INTRINSIC与HIGH_PRECISION两个成员与文档参数表完全对应class PrecisionType(enum.Enum): INTRINSIC ... HIGH_PRECISION ...在 math.py 的 docstring 中对其语义进一步说明INTRINSIC直接使用芯片指令进行计算性能优先directly uses chip instructions for faster computationHIGH_PRECISION采用更高精度的计算方式以减少精度损失Use higher precision calculation to reduce precision loss。实际使用时若对数值精度敏感例如科学计算、统计归一化场景可显式切换为HIGH_PRECISION若追求吞吐与延迟则保持默认的INTRINSIC。返回值说明返回输出 Tensor其数据类型与 input 相同Shape 与 input 一致即逐元素运算不改变张量形状。这一点与文档中返回输出TensorTensor的数据类型和input相同Shape为input大小的说明一致也与Log算子逐元素计算的语义吻合。约束说明使用pypto.log10时需要注意以下两条约束输入与输出 Tensor 类型必须相同由于返回值的数据类型与 input 保持一致请勿在传入 FP16 输入时期望得到 FP32 输出如需转换请先使用pypto.cast显式转换数据类型。输入元素必须大于 0否则输出为 NaN这是对数函数的数学定义域要求log_10(x)仅在x 0时有实数值。源码 docstring 同样标注了Must be positive (input 0)的前提见 math.py。因此在实际业务中建议在调用前对输入做合法性校验或过滤避免 NaN 结果污染后续计算链路。TileShape 设置示例在 PyPTO 编程范式中TileShape 用于描述硬件调度时的数据切分粒度。log10作为逐元素vector运算其TileShape 维度应与输出 Tensor 的维度一致。例如输入 input 的 Shape 为[m, n]输出为[m, n]则 TileShape 设置为[m1, n1]其中m1、n1分别用于切分 m 轴与 n 轴pypto.set_vec_tile_shapes(m1, n1)set_vec_tile_shapes是向量Vector计算域的 TileShape 设置接口其实现位于 python/pypto/_controller.py本质上是将各维度切分大小写入当前编译作用域pypto_impl.SetScope({vec_tile_shapes: concrete_shapes})并支持传入SymbolicScalar进行符号化切分。典型用法示例pypto.set_vec_tile_shapes(1, 1, 8, 8) print(pypto.get_vec_tile_shapes()) # [1, 1, 8, 8]对于 1~4 维的log10输入开发者应根据实际 Shape 维数传入等长的 TileShape 列表合理设置 TileShape 有助于提升向量指令的利用率与片上存储的命中率。调用示例接口调用示例FP32x pypto.tensor([3], pypto.DT_FP32) y pypto.log10(x)结果示例如下输入数据x: [1.0 2.0 3.0] 输出数据y: [0.0000 0.3010 0.4771]即log_10(1.0) 0、log_10(2.0) ≈ 0.3010、log_10(3.0) ≈ 0.4771与数学预期一致。高精度模式示例FP16 HIGH_PRECISION当输入为 FP16 且对精度有更高要求时显式传入pypto.PrecisionType.HIGH_PRECISIONx pypto.tensor([3], pypto.DT_FP16) y pypto.log10(x, pypto.PrecisionType.HIGH_PRECISION)指令模式示例FP16 INTRINSIC当追求计算速度、可接受一定精度损失时可显式指定默认的pypto.PrecisionType.INTRINSICx pypto.tensor([3], pypto.DT_FP16) y pypto.log10(x, pypto.PrecisionType.INTRINSIC)该写法与直接省略precision_type参数等价函数默认值即为INTRINSIC显式写出可提升代码可读性。方法式调用与 Tensor 链式编程log10同样可作为Tensor的方法参与链式调用便于在算子组合中保持代码简洁x pypto.tensor([1.0, 10.0, 100.0], pypto.DT_FP32) y x.log10() # 输出 y: [0.0000 1.0000 2.0000]与其它对数接口的对比PyPTO 张量 API 中还提供了pypto.log、pypto.log2、pypto.log1p等对数算子对应文档位于 operation 目录它们与log10的差异仅在于底数与输入定义域接口数学语义输入要求pypto.loglog_e(input)input 0pypto.log2log_2(input)input 0pypto.log10log_10(input)input 0pypto.log1plog(1 input)input -1从源码看math.py、math.pylog、log2与log10共享同一pypto_impl.Log底层入口仅LogBaseType参数不同log1p在数值稳定性上对接近 0 的输入更友好。开发者可根据业务底数需求灵活选用并复用本文所述的精度模式与 TileShape 配置经验。总结pypto.log10是 PyPTO 张量 API 中实现逐元素以 10 为底对数运算的标准接口支持 Ascend 950、Atlas A2/A3 系列产品上的 FP32、FP16、BF16 数据提供INTRINSIC速度优先与HIGH_PRECISION精度优先两种精度模式并可通过pypto.set_vec_tile_shapes配合 TileShape 切分完成向量计算的调度配置。实际使用中请牢记输入须大于 0、输入输出类型一致两条约束并结合函数式pypto.log10(x)与对象方法式x.log10()两种调用风格在 math.py 与 tensor.py 的源码基础上将log10高效集成进自己的 NPU kernel 流水线。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表