TIK功能调试

简介

MindStudio支持TIK算子的可视化调试,可以实现断点设置、单步调试、连续运行直到结束或下一断点、查看变量信息、退出调试等功能。

前提条件

操作步骤

本章节以add算子为例介绍TIK功能调试方法。

  1. 编写add算子调试代码.py文件。

    完整代码示例参考:(以文件名simple_add.py为例)
    import numpy as np
    
    from tbe import tik
    from tbe.common.platform import set_current_compile_soc_info
    
    def simple_add():
        tik_instance = tik.Tik(disable_debug=False)
        kernel_name = "tik_vec_add_128_float32"
        dst_ub = tik_instance.Tensor("float32", [128], tik.scope_ubuf, "dst_ub")
        dst_gm = tik_instance.Tensor("float32", (128,), tik.scope_gm,  "dst_gm")
        src0_gm = tik_instance.Tensor("float32", (128,), tik.scope_gm, "src0_gm")
        src0_ub = tik_instance.Tensor("float32", (128,), tik.scope_ubuf, "src0_ub")
        src1_gm = tik_instance.Tensor("float32", (128,), tik.scope_gm, "src1_gm")
        src1_ub = tik_instance.Tensor("float32", (128,), tik.scope_ubuf, "src1_ub")
    
        tik_instance.data_move(src0_ub, src0_gm, 0, 1, 16, 0, 0)
        tik_instance.data_move(src1_ub, src1_gm, 0, 1, 16, 0, 0)
        tik_instance.vec_add(64, dst_ub, src0_ub, src1_ub, 2, 8, 8, 8)
        tik_instance.data_move(dst_gm, dst_ub, 0, 1, 16, 0, 0)
        tik_instance.BuildCCE(kernel_name, [src0_gm, src1_gm], [dst_gm])
    
        return tik_instance
    
    if __name__=='__main__':
        set_current_compile_soc_info("Ascendxxx")   # 请根据芯片实际版本设置,具体请参考set_current_compile_soc_info接口说明
        tik_instance = simple_add()
        data_x = np.ones((128,)).astype("float32")
        data_y = np.ones((128,)).astype("float32")
        feed_dict = {'src0_gm': data_x, 'src1_gm': data_y}
        model_data, = tik_instance.tikdb.start_debug(feed_dict=feed_dict,interactive=True) # 添加TIK调试代码
        print(model_data)

    调试TIK Debug时,用户需自行修改tik_instance的描述为tik.Tik(disable_debug=False),操作方法如下:

    在add算子调试代码.py文件中添加如下加粗字体信息。

    self.tik_instance = tik.Tik(disable_debug=False)

  2. 设置断点。

    • 添加断点

      单击需要设置tik断点的行,在弹出的对画框中选择“Tik Operator Breakpoint”。如图1

      图1 设置断点
      • TIK断点必须添加在TIK 语句上。
      • 若一行代码被分为多行,需在最后一行设置断点。
    • 删除断点

      在设置断点的地方,单击左侧的即可取消断点。

    • Disable断点。若用户设置了多个断点,执行调试时想使用部分断点又不删除其他断点,则可以通过该功能将暂不使用的断点Disable,操作方法如下:

      右击已经设置断点的代码行号处的,在弹出界面中取消勾选“Enabled”,可以看到原有断点标识变成,则再执行调试功能时,该断点不生效。

      图2 断点Disable
    • Enable断点。若已经有部分断点设置了Disable,执行新的调试功能时想使原有Disable的断点生效,则可以通过该功能实现。操作方法如下:

      右击已经Disable断点处的,在弹出界面中勾选“Enabled”,可以看到原有断点标识变成,则后续执行调试功能时,该断点生效。

      图3 断点Enable
    • 查看断点。通过该功能,用户可以查看设置过的断点。

      单击Disable断点或Enable断点界面的“More(Ctrl+Shift+F8)”,弹出图4所示断点查看界面。

      图4 TIK 断点查看界面

      左侧序号1断点列表展示了当前代码中所设置的所有断点,序号2对应相应断点的停用(Disabled)或启用(Enabled)功能,序号3为代码预览区域。

      • 单击左侧断点列表中,断点左侧的复选框,勾选表示该断点启用,相应序号2处“Enabled”功能被勾选,同时在代码预览区域中,对应代码行左侧行号处显示图标;取消勾选表示该断点停用,相应序号2处“Enable”功能被取消勾选,同时在代码预览区域中,对应代码行左侧行号处显示图标。
      • 选中断点列表处的断点,单击上方的可以删除断点,同时代码预览区域,相应代码行号处的断点图标随之删除。
      • 在代码预览区域,代码行号处单击,则该行被标记为断点,同时断点列表中会自动增加该断点信息。

  3. 运行调试。

    • 首次调试,右键单击simple_add.py文件选择“Tik Operator Debug”运行调试。
    • 非首次调试,可以通过单击工具栏或“Shift+F9”按键运行调试。

  4. 调试执行。

    调试执行操作步骤请参见调试执行