下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

DumpTensor

函数功能

基于算子工程开发的算子,可以使用该接口Dump指定Tensor的内容。同时支持打印自定义的附加信息(仅支持uint32_t数据类型的信息),比如打印当前行号等。

在算子kernel侧实现代码中需要打印Tensor数据的地方调用DumpTensor接口打印相关内容。样例如下:
1
AscendC::DumpTensor(srcLocal,5, dataLen);
DumpTensor接口打印功能会对算子实际运行的性能带来一定影响,通常在调测阶段使用。开发者可以按需通过如下方式关闭打印功能。
  • 自定义算子工程
    修改算子工程op_kernel目录下的CMakeLists.txt文件,首行增加编译选项-DASCENDC_DUMP=0,关闭ASCENDC_DUMP开关,示例如下:
    1
    2
    // 关闭所有算子的printf打印功能
    add_ops_compile_options(ALL OPTIONS -DASCENDC_DUMP=0)
    
  • Kernel直调工程
    修改cmake目录下的npu_lib.cmake文件,在ascendc_compile_definitions命令中增加-DASCENDC_DUMP=0宏定义来关闭ASCENDC_DUMP开关。示例如下:
    1
    2
    3
    4
    // 关闭所有算子的printf打印功能
    ascendc_compile_definitions(ascendc_kernels_${RUN_MODE} PRIVATE
        -DASCENDC_DUMP=0
    )
    

Dump时,每个block核的dump信息前会增加对应信息头DumpHead(32字节大小),用于记录核号和资源使用信息;每次Dump的Tensor数据前也会添加信息头DumpTensorHead(32字节大小),用于记录Tensor的相关信息。如下图所示,展示了多核打印场景下的打印信息结构。

DumpHead的具体信息如下:

  • block_id:当前运行的核号;
  • total_block_num:此次dump的核数;
  • block_remain_len:当前核剩余可用的dump的空间;
  • block_initial_space:当前核初始分配的dump空间;
  • magic:内存校验魔术字。

DumpTensorHead的具体信息如下:

  • desc:用户自定义附加信息;
  • addr:Tensor的地址;
  • data_type:Tensor的数据类型;
  • position:表示Tensor所在的物理存储位置,当前仅支持Unified Buffer/L1 Buffer/L0C Buffer/Global Memory

DumpTensor打印结果的最前面会自动打印CANN_VERSION_STR值与CANN_TIMESTAMP值。其中,CANN_VERSION_STR与CANN_TIMESTAMP为宏定义,CANN_VERSION_STR代表CANN软件包的版本号信息,形式为字符串,CANN_TIMESTAMP为CANN软件包发布时的时间戳,形式为数值(uint64_t)。开发者也可在代码中直接使用这两个宏。

打印示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CANN Version: XXX.XX, TimeStamp: 20240807XXXXXXXXX
DumpHead: block_id=0, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
[40, 82, 60, 11, 24, 55, 52, 60, 31, 86, 53, 61, 47, 54, 34, 62, 84, 29, 48, 95, 16, 0, 20, 77, 3, 55, 69, 73, 75, 40, 35, 13]
CANN Version: XXX.XX, TimeStamp: 20240807XXXXXXXXX
DumpHead: block_id=1, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
[58, 84, 22, 54, 41, 93, 1, 45, 50, 9, 72, 81, 23, 96, 86, 45, 36, 9, 36, 34, 78, 7, 2, 29, 47, 26, 13, 24, 27, 55, 90, 5]
...
CANN Version: XXX.XX, TimeStamp: 20240807XXXXXXXXX
DumpHead: block_id=7, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
[28, 27, 79, 39, 86, 5, 23, 97, 89, 5, 65, 69, 59, 13, 49, 2, 34, 6, 52, 38, 4, 90, 11, 11, 61, 50, 71, 98, 19, 54, 54, 99]

函数原型

  • 无Tensor shape的打印
    1
    2
    void DumpTensor(const LocalTensor<T> &tensor, uint32_t desc, uint32_t dumpSize)
    void DumpTensor(const GlobalTensor<T>& tensor, uint32_t desc, uint32_t dumpSize)
    
  • 带Tensor shape的打印
    1
    2
    void DumpTensor(const LocalTensor<T> &tensor, uint32_t desc, uint32_t dumpNum, const ShapeInfo& shapeInfo)
    void DumpTensor(const GlobalTensor<T> &tensor, uint32_t desc, uint32_t dumpNum, const ShapeInfo& shapeInfo)
    

参数说明

参数名

输入/输出

描述

tensor

输入

需要dump的Tensor。

  • 待dump的tensor位于Unified Buffer/L1 Buffer/L0C Buffer时使用LocalTensor类型的tensor参数输入。
  • 待dump的tensor位于Global Memory时使用GlobalTensor类型的tensor参数输入。
  • 当前支持的数据类型为uint8_t/int8_t/int16_t/uint16_t/int32_t/uint32_t/int64_t/uint64_t/float/half。

desc

输入

用户自定义附加信息(行号或其他自定义数字)。

dumpSize

输入

需要dump的元素个数。dump的元素总长度需要32Byte对齐。

shapeInfo

输入

传入Tensor的shape信息,可按照shape信息进行打印。

返回值

支持的型号

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas推理系列产品AI Core

约束说明

  • 该功能仅用于NPU上板调试,且仅在如下场景支持
    • 通过单算子API调用方式调用算子。
    • 间接调用单算子API(aclnnxxx)接口:Pytorch框架单算子直调的场景。
  • 当前仅支持打印存储位置为Unified Buffer/L1 Buffer/L0C Buffer/Global Memory的Tensor信息。
  • 操作数地址偏移对齐要求请参见通用约束
  • 程序中调用printf接口使用的空间+assert接口使用的空间+DumpAccChkPoint接口使用的空间+调用DumpTensor接口使用的空间+框架dump功能所使用的空间,每个核上不可超过1M。请开发者自行控制待打印的内容数据量,超出则不会打印。

调用示例

  • 无Tensor shape的打印
    1
    AscendC::DumpTensor(srcLocal,5, dataLen);
    
  • 带Tensor shape的打印
    1
    2
    3
    uint32_t array[] = {static_cast<uint32_t>(8),static_cast<uint32_t>(8)};
    AscendC::ShapeInfo shapeInfo(2, array);       # dim为2 shape为(8,8)
    AscendC::DumpTensor(x, 2, 64, shapeInfo);     # dump x的64个元素且解析按照shapeInfo的(8,8)排列
    

    打印结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    [[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]]
    
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词