)
PyPTO Tensor 維度查詢詳解pypto.Tensor.dim 屬性用法與底層實現(xiàn)【免費下載鏈接】pyptoPyPTO發(fā)音: pai p-t-oParallel Tensor/Tile Operation編程范式。項目地址: https://gitcode.com/cann/pypto導讀本文聚焦 CANN PyPTO 中張量Tensor的維度秩rank查詢接口pypto.Tensor.dim系統(tǒng)講解其功能語義、產(chǎn)品支持范圍、調(diào)用方式與返回值約定并結(jié)合倉庫源碼逐層剖析從 Python 屬性到 C 底層實現(xiàn)的完整調(diào)用鏈。讀完本文你將掌握在 PyPTO 編程框架中獲取張量維度的標準姿勢并理解它與shape、valid_shape等張量元數(shù)據(jù)屬性之間的區(qū)別與配合用法。功能說明dim 返回張量的維度數(shù)在 PyPTOParallel Tensor/Tile Operation 編程范式中Tensor是承載并行張量/分塊Tile運算的核心數(shù)據(jù)結(jié)構(gòu)。dim是該張量對象的只讀屬性用于獲取 Tensor 的維度數(shù)量即秩rank返回值為整數(shù)。例如一個形狀為(2, 3, 4)的三維張量其dim值為3。該屬性是后續(xù)形狀推斷、索引校驗、循環(huán)遍歷等場景的基礎(chǔ)元數(shù)據(jù)在算子開發(fā)中廣泛使用。產(chǎn)品支持情況pypto.Tensor.dim在以下產(chǎn)品上均獲得支持Ascend 950PR / Ascend 950DT支持Atlas A3 訓練系列產(chǎn)品 / Atlas A3 推理系列產(chǎn)品支持Atlas A2 訓練系列產(chǎn)品 / Atlas A2 推理系列產(chǎn)品支持即該接口覆蓋當前 PyPTO 所面向的主要昇騰訓練與推理產(chǎn)品形態(tài)具備良好的平臺通用性。函數(shù)原型與屬性訪問方式官方 API 文檔給出的函數(shù)原型為dim(self) - int需要特別注意的是在 PyPTO 的 Python 側(cè)dim以只讀屬性property的形式暴露因此實際調(diào)用時不需要加括號直接通過tensor.dim訪問即可返回值為int類型。t pypto.tensor((2, 3, 4), pypto.DT_FP32) d t.dim # 屬性訪問而非 t.dim()參數(shù)說明無參數(shù)。dim是張量對象的只讀屬性不接受任何入?yún)ⅰ7祷刂嫡f明返回 Tensor 的維度數(shù)即張量的秩類型為int。維度數(shù)量等于張量shape列表的長度。約束說明該接口是只讀屬性不支持賦值修改從源碼實現(xiàn)看對空張量Empty Tensor調(diào)用Dim()時底層綁定會拋出py::value_error(Empty tensor.)異常因此使用時需確保張量已被正確初始化。調(diào)用示例官方示例創(chuàng)建了一個形狀為(2, 3, 4)的 FP32 張量并獲取其維度import pypto t pypto.tensor((2, 3, 4), pypto.DT_FP32) out t.dim結(jié)果示例如下輸出數(shù)據(jù)out: 3源碼級實現(xiàn)剖析dim 的完整調(diào)用鏈dim雖然使用簡單但背后是一條跨越 Python、pybind11 綁定與 C 核心實現(xiàn)的完整調(diào)用鏈。下面沿著倉庫源碼逐層展開。第一層Python 屬性定義在 python/pypto/tensor.py 中dim被定義為Tensor類上的property直接轉(zhuǎn)發(fā)到底層 C 對象的Dim()方法property def dim(self) - int: return self._base.Dim()這里self._base即底層綁定對象與之相鄰的shape、valid_shape、dtype、format、id等屬性共同構(gòu)成了張量元數(shù)據(jù)的 Python 側(cè)入口。第二層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.)從這段代碼可以確認兩個實現(xiàn)細節(jié)其一綁定層在調(diào)用前會通過IsEmpty()對空張量做防御性校驗空張量將拋出py::value_error其二返回值類型為無符號整數(shù)對應(yīng) C 層的uint64_t在 Python 側(cè)呈現(xiàn)為int。第三層C 核心實現(xiàn)在 framework/include/tilefwk/tensor.h 中Tensor類聲明了維度查詢接口/** * \brief Get the Shape Dim Size of Tensor. */ uint64_t Dim() const;該接口返回的是 Tensor 形狀的維度個數(shù)Shape Dim Size與GetShape()返回完整形狀Shape、GetShape(int axis)返回指定軸的大小等接口配合構(gòu)成 C 側(cè)完整的張量形狀查詢能力。維度信息最終來源于張量的存儲對象LogicalTensor即storage_成員維度數(shù)即其形狀描述的長度。與 shape、valid_shape 的配合使用在 python/pypto/tensor.py 中shape返回List[SymInt]支持符號化形狀動態(tài)場景下 -1 維度會通過GetInputShape解析valid_shape則用于調(diào)試場景返回有效形狀。三者關(guān)系可概括為dim形狀的長度標量intshape各維度大小的完整列表元素可為符號整數(shù)valid_shape動態(tài)形狀場景下的有效形狀僅用于調(diào)試。因此在編寫算子時通常先用t.dim判斷張量是幾維再配合t.shape[i]逐維訪問具體大小或直接遍歷range(t.dim)實現(xiàn)按維處理邏輯。倉庫中多處索引與形狀處理邏輯正是基于這一模式例如 python/pypto/tensor.py 中的索引校驗就依賴self.dim與索引長度比對并拋出Too many indices for tensor with dimension ...之類的錯誤。常見使用場景形狀推斷與校驗在實現(xiàn)自定義算子時先通過t.dim確認輸入張量的維度數(shù)是否符合預期再逐維訪問shape按維遍歷使用for i in range(t.dim)配合t.shape[i]對各維度做統(tǒng)一處理廣播與拼接在進行需要對齊維度數(shù)的運算如拼接、廣播、索引切片前用dim判斷參與運算張量是否滿足維度一致性要求。小結(jié)pypto.Tensor.dim是 PyPTO 中最基礎(chǔ)也最常用的張量元數(shù)據(jù)屬性之一它以只讀屬性的形式返回張量的維度數(shù)無參數(shù)、返回int覆蓋 Ascend 950、Atlas A2 與 Atlas A3 全系列產(chǎn)品。從 python/pypto/tensor.py 的屬性轉(zhuǎn)發(fā)到 python/src/bindings/tensor.cpp 的 pybind11 綁定再到 framework/include/tilefwk/tensor.h 的Dim()接口整條調(diào)用鏈清晰簡潔是理解 PyPTO 張量元數(shù)據(jù)體系dim/shape/valid_shape的良好切入點?!久赓M下載鏈接】pyptoPyPTO發(fā)音: pai p-t-oParallel Tensor/Tile Operation編程范式。項目地址: https://gitcode.com/cann/pypto創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考