CANN/asc-devkit DumpTensor调试接口

发布时间:2026/7/15 15:42:00
CANN/asc-devkit DumpTensor调试接口 DumpTensor产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品√Atlas 推理系列产品 AI Core√Atlas 推理系列产品 Vector CorexAtlas 训练系列产品xKirin X90√Kirin 9030√功能说明基于算子工程开发的算子可以使用该接口Dump指定Tensor的内容。同时支持打印自定义的附加信息仅支持uint32_t数据类型的信息比如打印当前行号等。在算子kernel侧实现代码中需要打印Tensor数据的地方调用DumpTensor接口打印相关内容。样例如下AscendC::DumpTensor(srcLocal, 5, dataLen);[!CAUTION]注意 DumpTensor接口打印功能会对算子实际运行的性能带来一定影响通常在调测阶段使用。开发者可以按需通过设置ASCENDC_DUMP0来关闭打印功能。打印示例如下DumpTensor: desc5, addr0, data_typefloat16, positionUB, dump_size32 [19.000000, 4.000000, 38.000000, 50.000000, 39.000000, 67.000000, 84.000000, 98.000000, 21.000000, 36.000000, 18.000000, 46.000000, 10.000000, 92.000000, 26.000000, 38.000000, 39.000000, 9.000000, 82.000000, 37.000000, 35.000000, 65.000000, 97.000000, 59.000000, 89.000000, 63.000000, 70.000000, 57.000000, 35.000000, 3.000000, 16.000000, 42.000000] DumpTensor: desc5, addr100, data_typefloat16, positionUB, dump_size32 [6.000000, 34.000000, 52.000000, 38.000000, 73.000000, 38.000000, 35.000000, 14.000000, 67.000000, 62.000000, 30.000000, 49.000000, 86.000000, 37.000000, 84.000000, 18.000000, 38.000000, 18.000000, 44.000000, 21.000000, 86.000000, 99.000000, 13.000000, 79.000000, 84.000000, 9.000000, 48.000000, 74.000000, 52.000000, 99.000000, 80.000000, 53.000000] ... DumpTensor: desc5, addr0, data_typefloat16, positionUB, dump_size32 [35.000000, 41.000000, 41.000000, 22.000000, 84.000000, 49.000000, 60.000000, 0.000000, 90.000000, 14.000000, 67.000000, 80.000000, 16.000000, 46.000000, 16.000000, 83.000000, 6.000000, 70.000000, 97.000000, 28.000000, 97.000000, 62.000000, 80.000000, 22.000000, 53.000000, 37.000000, 23.000000, 58.000000, 65.000000, 28.000000, 4.000000, 29.000000]函数原型无Tensor shape的打印template typename T __aicore__ inline void DumpTensor(const LocalTensorT tensor, uint32_t desc, uint32_t dumpSize) template typename T __aicore__ inline void DumpTensor(const GlobalTensorT tensor, uint32_t desc, uint32_t dumpSize)带Tensor shape的打印template typename T __aicore__ inline void DumpTensor(const LocalTensorT tensor, uint32_t desc, uint32_t dumpSize, const ShapeInfo shapeInfo) template typename T __aicore__ inline void DumpTensor(const GlobalTensorT tensor, uint32_t desc, uint32_t dumpSize, const ShapeInfo shapeInfo)参数说明表 1模板参数说明参数名描述T需要dump的Tensor的数据类型。Ascend 950PR/Ascend 950DT支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half、bfloat16_t、fp8_e4m3fn_t、fp8_e5m2_t、hifloat8_t、fp8_e8m0_t。Atlas A3 训练系列产品 / Atlas A3 推理系列产品支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half、bfloat16_t。Atlas A2 训练系列产品 / Atlas A2 推理系列产品支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half、bfloat16_t。Atlas 200I/500 A2 推理产品支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half。Atlas 推理系列产品 AI Core支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half。Kirin X90支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half。Kirin 9030支持的数据类型为bool、uint8_t、int8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t、float、half。表 2参数说明参数名输入/输出描述tensor输入需要dump的Tensor。待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。desc输入用户自定义附加信息行号或其他自定义数字。在使用DumpTensor功能时用户可通过desc参数附加自定义信息以便在不同调用场景下区分Dump内容的来源。此功能有助于精准定位具体DumpTensor的输出提升调试与分析效率。dumpSize输入需要dump的元素个数。shapeInfo输入传入Tensor的shape信息可按照shape信息进行打印。当Shape尺寸大于dumpSize元素个数时 按照ShapeInfo打印元素不足的Dump数据用-展示。当Shape尺寸小于等于dumpSize元素个数时 按照ShapeInfo打印元素多出的Dump数据不展示。返回值说明无约束说明该功能仅用于NPU上板调试。暂不支持算子入图场景的打印。当前仅支持打印存储位置为Unified Buffer/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。针对Ascend 950PR/Ascend 950DT不支持打印L1 Buffer上的Tensor信息。操作数地址对齐要求请参见通用地址对齐约束。单次调用DumpTensor打印的数据总量不可超过1MB还包括少量框架需要的头尾信息通常可忽略。使用时应注意如果超出这个限制则数据不会被打印。在计算数据量时若Dump的总长度未对齐需要考虑padding数据的影响。当进行非对齐Dump时如果实际Dump的元素长度不满足32字节对齐系统会在其末尾自动补充一定数量的padding数据以满足对齐要求。例如Tensor1中用户需要Dump的元素长度为30字节系统会在其后添加2字节的padding使总长度对齐到32字节。但在实际解析时仍只解析原始的30字节数据padding部分不会被使用。使用自定义算子工程进行算子开发时接口的打印信息和上文描述有些差异Dump时每个block核的dump信息前会增加对应信息头DumpHead用于记录核号和资源使用信息每次Dump的Tensor数据前也会添加信息头DumpTensorHead用于记录Tensor的相关信息。如下图所示展示了多核打印场景下的打印信息结构。DumpHead的具体信息如下opType当前运行的算子类型CoreType当前运行的核的类型block dim开发者设置的算子执行核数total_block_num参与dump的核数block_remain_len当前核剩余可用的dump的空间block_initial_space当前核初始分配的dump空间rsv保留字段magic内存校验魔术字。DumpHead打印时除了上述打印还会自动打印当前所运行核的类型及对应的该类型下的核索引如AIV-0。DumpTensorHead的具体信息如下desc用户自定义附加信息addrTensor的地址data_typeTensor的数据类型position表示Tensor所在的物理存储位置当前仅支持Unified Buffer/L1 Buffer/L0C Buffer/Global Memorydump_size表示用户需要dump的元素个数。DumpTensor打印结果的最前面会自动打印CANN_VERSION_STR值与CANN_TIMESTAMP值。其中CANN_VERSION_STR与CANN_TIMESTAMP为宏定义CANN_VERSION_STR代表CANN软件包的版本号信息形式为字符串CANN_TIMESTAMP为CANN软件包发布时的时间戳形式为数值uint64_t。开发者也可在代码中直接使用这两个宏。打印示例如下opTypeAddCustom, DumpHead: AIV-0, CoreTypeAIV, block dim8, total_block_num8, block_remain_len1046912, block_initial_space1048576, rsv0, magic5aa5bccd CANN Version: XX.XX, TimeStamp: XXXXXX DumpTensor: desc5, addr0, data_typefloat16, positionUB, dump_size32 [19.000000, 4.000000, 38.000000, 50.000000, 39.000000, 67.000000, 84.000000, 98.000000, 21.000000, 36.000000, 18.000000, 46.000000, 10.000000, 92.000000, 26.000000, 38.000000, 39.000000, 9.000000, 82.000000, 37.000000, 35.000000, 65.000000, 97.000000, 59.000000, 89.000000, 63.000000, 70.000000, 57.000000, 35.000000, 3.000000, 16.000000, 42.000000] DumpTensor: desc5, addr100, data_typefloat16, positionUB, dump_size32 [6.000000, 34.000000, 52.000000, 38.000000, 73.000000, 38.000000, 35.000000, 14.000000, 67.000000, 62.000000, 30.000000, 49.000000, 86.000000, 37.000000, 84.000000, 18.000000, 38.000000, 18.000000, 44.000000, 21.000000, 86.000000, 99.000000, 13.000000, 79.000000, 84.000000, 9.000000, 48.000000, 74.000000, 52.000000, 99.000000, 80.000000, 53.000000] ... DumpTensor: desc5, addr0, data_typefloat16, positionUB, dump_size32 [35.000000, 41.000000, 41.000000, 22.000000, 84.000000, 49.000000, 60.000000, 0.000000, 90.000000, 14.000000, 67.000000, 80.000000, 16.000000, 46.000000, 16.000000, 83.000000, 6.000000, 70.000000, 97.000000, 28.000000, 97.000000, 62.000000, 80.000000, 22.000000, 53.000000, 37.000000, 23.000000, 58.000000, 65.000000, 28.000000, 4.000000, 29.000000]该接口使用Dump功能一个算子所有使用Dump功能的接口在每个核上Dump的数据总量包括信息头不可超过1M。请开发者自行控制待打印的内容数据量超出则不会打印。调用示例无Tensor shape的打印AscendC::DumpTensor(srcLocal, 5, dataLen);带Tensor shape的打印uint32_t array[] {static_castuint32_t(8), static_castuint32_t(8)}; AscendC::ShapeInfo shapeInfo(2, array); // dim为2 shape为(8,8) AscendC::DumpTensor(x, 2, 64, shapeInfo); // dump x的64个元素且解析按照shapeInfo的(8,8)排列 uint32_t array1[] {static_castuint32_t(7), static_castuint32_t(8)}; AscendC::ShapeInfo shapeInfo1(2, array1); // dim为2 shape为(7,8) AscendC::DumpTensor(x1, 3, 64, shapeInfo1); // 当Shape尺寸小于等于dumpSize元素个数时 按照ShapeInfo打印元素多出的Dump数据不展示 uint32_t array2[] {static_castuint32_t(9), static_castuint32_t(8)}; AscendC::ShapeInfo shapeInfo2(2, array2); // dim为2 shape为(9,8) AscendC::DumpTensor(x2, 4, 64, shapeInfo2); // 当Shape尺寸大于dumpSize元素个数时 按照ShapeInfo打印元素不足的Dump数据用-展示打印结果如下DumpTensor: desc2, addrxxxx, data_typefloat16, positionUB, dump_size64 [[150.000000,83.000000,109.000000,166.000000,129.000000,50.000000,150.000000,74.000000], [135.000000,79.000000,98.000000,134.000000,146.000000,166.000000,112.000000,70.000000], [122.000000,51.000000,116.000000,68.000000,172.000000,72.000000,102.000000,69.000000], [136.000000,83.000000,88.000000,88.000000,112.000000,148.000000,79.000000,136.000000], [133.000000,104.000000,83.000000,71.000000,83.000000,99.000000,103.000000,151.000000], [98.000000,118.000000,128.000000,83.000000,25.000000,105.000000,179.000000,34.000000], [104.000000,169.000000,115.000000,113.000000,134.000000,121.000000,88.000000,96.000000], [29.000000,139.000000,70.000000,40.000000,158.000000,138.000000,72.000000,171.000000]] DumpTensor: desc3, addrxxxx, data_typefloat16, positionUB, dump_size64 shape is [7, 8], dumpSize is 64, dumpSize is greater than shapeSize. [[82.250000,37.312500,22.843750,91.937500,93.312500,77.125000,50.718750,27.171875], [21.859375,32.906250,20.109375,70.875000,13.398438,14.562500,30.156250,52.562500], [40.156250,45.781250,78.937500,65.687500,71.562500,61.375000,32.062500,80.750000], [55.593750,44.031250,43.781250,3.132812,38.750000,50.968750,79.562500,80.562500], [51.562500,22.468750,88.250000,20.578125,95.437500,83.562500,76.812500,34.281250], [75.500000,47.875000,52.562500,74.937500,39.687500,90.062500,28.890625,10.593750], [42.343750,67.062500,35.468750,60.875000,71.812500,81.562500,57.531250,62.500000]] DumpTensor: desc4, addrxxxx, data_typefloat16, positionUB, dump_size64 shape is [9, 8], dumpSize is 64, data is not enough. [[95.437500,59.250000,57.281250,27.093750,41.375000,48.375000,33.093750,91.312500], [27.703125,60.718750,68.187500,70.875000,67.437500,84.562500,13.507812,4.550781], [24.500000,73.437500,36.062500,68.437500,55.500000,95.375000,60.250000,64.750000], [40.093750,85.000000,42.250000,39.531250,60.968750,8.953125,48.531250,53.906250], [53.656250,64.187500,84.750000,22.250000,95.500000,39.937500,12.945312,54.031250], [3.804688,98.187500,43.968750,26.000000,41.750000,34.500000,75.750000,89.625000], [25.046875,5.265625,65.500000,45.468750,32.937500,8.593750,1.705078,12.742188], [37.281250,95.125000,71.562500,27.515625,47.250000,36.312500,66.750000,31.250000], [-,-,-,-,-,-,-,-]]创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考