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

资讯详情

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

PyPTO Tensor 维度查询详解:pypto.Tensor.dim 属性用法与底层实现

PyPTO Tensor 维度查询详解:pypto.Tensor.dim 属性用法与底层实现 PyPTO Tensor 维度查询详解pypto.Tensor.dim 属性用法与底层实现【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto导读本文聚焦 CANN PyPTO 中张量Tensor的维度秩rank查询接口pypto.Tensor.dim系统讲解其功能语义、产品支持范围、调用方式与返回值约定并结合仓库源码逐层剖析从 Python 属性到 C 底层实现的完整调用链。读完本文你将掌握在 PyPTO 编程框架中获取张量维度的标准姿势并理解它与shape、valid_shape等张量元数据属性之间的区别与配合用法。功能说明dim 返回张量的维度数在 PyPTOParallel Tensor/Tile Operation 编程范式中Tensor是承载并行张量/分块Tile运算的核心数据结构。dim是该张量对象的只读属性用于获取 Tensor 的维度数量即秩rank返回值为整数。例如一个形状为(2, 3, 4)的三维张量其dim值为3。该属性是后续形状推断、索引校验、循环遍历等场景的基础元数据在算子开发中广泛使用。产品支持情况pypto.Tensor.dim在以下产品上均获得支持Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持即该接口覆盖当前 PyPTO 所面向的主要昇腾训练与推理产品形态具备良好的平台通用性。函数原型与属性访问方式官方 API 文档给出的函数原型为dim(self) - int需要特别注意的是在 PyPTO 的 Python 侧dim以只读属性property的形式暴露因此实际调用时不需要加括号直接通过tensor.dim访问即可返回值为int类型。t pypto.tensor((2, 3, 4), pypto.DT_FP32) d t.dim # 属性访问而非 t.dim()参数说明无参数。dim是张量对象的只读属性不接受任何入参。返回值说明返回 Tensor 的维度数即张量的秩类型为int。维度数量等于张量shape列表的长度。约束说明该接口是只读属性不支持赋值修改从源码实现看对空张量Empty Tensor调用Dim()时底层绑定会抛出py::value_error(Empty tensor.)异常因此使用时需确保张量已被正确初始化。调用示例官方示例创建了一个形状为(2, 3, 4)的 FP32 张量并获取其维度import pypto t pypto.tensor((2, 3, 4), pypto.DT_FP32) out t.dim结果示例如下输出数据out: 3源码级实现剖析dim 的完整调用链dim虽然使用简单但背后是一条跨越 Python、pybind11 绑定与 C 核心实现的完整调用链。下面沿着仓库源码逐层展开。第一层Python 属性定义在 python/pypto/tensor.py 中dim被定义为Tensor类上的property直接转发到底层 C 对象的Dim()方法property def dim(self) - int: return self._base.Dim()这里self._base即底层绑定对象与之相邻的shape、valid_shape、dtype、format、id等属性共同构成了张量元数据的 Python 侧入口。第二层pybind11 绑定在 python/src/bindings/tensor.cpp 中Tensor类的 C 绑定注册了Dim方法.def( Dim, [](const Tensor t) { if (t.IsEmpty()) { throw py::value_error(Empty tensor.); } return t.Dim(); }, Get the number of dimensions of the tensor.)从这段代码可以确认两个实现细节其一绑定层在调用前会通过IsEmpty()对空张量做防御性校验空张量将抛出py::value_error其二返回值类型为无符号整数对应 C 层的uint64_t在 Python 侧呈现为int。第三层C 核心实现在 framework/include/tilefwk/tensor.h 中Tensor类声明了维度查询接口/** * \brief Get the Shape Dim Size of Tensor. */ uint64_t Dim() const;该接口返回的是 Tensor 形状的维度个数Shape Dim Size与GetShape()返回完整形状Shape、GetShape(int axis)返回指定轴的大小等接口配合构成 C 侧完整的张量形状查询能力。维度信息最终来源于张量的存储对象LogicalTensor即storage_成员维度数即其形状描述的长度。与 shape、valid_shape 的配合使用在 python/pypto/tensor.py 中shape返回List[SymInt]支持符号化形状动态场景下 -1 维度会通过GetInputShape解析valid_shape则用于调试场景返回有效形状。三者关系可概括为dim形状的长度标量intshape各维度大小的完整列表元素可为符号整数valid_shape动态形状场景下的有效形状仅用于调试。因此在编写算子时通常先用t.dim判断张量是几维再配合t.shape[i]逐维访问具体大小或直接遍历range(t.dim)实现按维处理逻辑。仓库中多处索引与形状处理逻辑正是基于这一模式例如 python/pypto/tensor.py 中的索引校验就依赖self.dim与索引长度比对并抛出Too many indices for tensor with dimension ...之类的错误。常见使用场景形状推断与校验在实现自定义算子时先通过t.dim确认输入张量的维度数是否符合预期再逐维访问shape按维遍历使用for i in range(t.dim)配合t.shape[i]对各维度做统一处理广播与拼接在进行需要对齐维度数的运算如拼接、广播、索引切片前用dim判断参与运算张量是否满足维度一致性要求。小结pypto.Tensor.dim是 PyPTO 中最基础也最常用的张量元数据属性之一它以只读属性的形式返回张量的维度数无参数、返回int覆盖 Ascend 950、Atlas A2 与 Atlas A3 全系列产品。从 python/pypto/tensor.py 的属性转发到 python/src/bindings/tensor.cpp 的 pybind11 绑定再到 framework/include/tilefwk/tensor.h 的Dim()接口整条调用链清晰简洁是理解 PyPTO 张量元数据体系dim/shape/valid_shape的良好切入点。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表