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