TBE单算子验证及调试

TBE单算子验证及调试

  • 前言
  • TBE单算子测试总体介绍
    • TBE单算子测试的目的
    • TBE测试工程介绍
  • TBE单算子UT测试
    • UT测试目的
    • UT测试流程
    • UT测试示例 ——以softmax_grad算子为例
    • UT测试结果分析
  • TBE单算子ST测试
    • ST测试目的
    • ST测试流程
    • ST测试示例
    • ST测试结果分析
  • TBE单算子BBIT测试
    • BBIT测试目的
    • BBIT测试流程
    • BBIT测试结果分析
  • TBE单算子性能分析
    • 性能分析目的与流程
    • 性能分析测试示例
    • 性能分析结果分析
  • 总结

前言

TBE单算子测试总体介绍

TBE单算子测试的目的

  • 算子程序能够跑通,场景覆盖全面
    ——UT测试
  • 算子逻辑正确
    ——ST测试
    ——BBIT测试
  • 算子性能最优
    ——性能分析

TBE测试工程介绍

Mind Studio工程目录结构如下:
TBE单算子验证及调试_第1张图片

TBE单算子UT测试

UT测试目的

UT测试的主要目的是:

  • 测试算子代码的正确性,验证每个输入输出的结果,确认是否与设计文档中一致;
  • UT测试侧重于保证算子程序能够跑通,场景覆盖全面(覆盖率要达到100%);最终的业务正确性由ST/BBIT保证。

UT测试流程

UT测试是采用Python自带的Unittest测试框架,会自动执行所有test_开头的测试函数,具体流程如下:
TBE单算子验证及调试_第2张图片

UT测试示例 ——以softmax_grad算子为例

  • 在Mind Studio算子工程目录tbe/testcases/ut/softmax_grad目录下编写ut测试代码文件test_softmax_grad.py( init.py 内容可以空)
  • 按照Unittest测试框架,撰写测试用例def test_xxx( )
  • 执行UT测试操作: 右键单击tbe/testcases/ut/softmax_grad,选择“run ‘softmax_grad’UT with coverage”
  • UT执行成功后,IDE会显示覆盖率报告的链接

UT测试框架
TBE单算子验证及调试_第3张图片
执行UT测试
TBE单算子验证及调试_第4张图片

UT测试结果分析

在Mind Studio工程目录./out/coverage_report/ut/目录下查看相应算子代码覆盖率等信息,如下:
TBE单算子验证及调试_第5张图片

TBE单算子ST测试

ST测试目的

ST工程的主要目的是:

  • 正确的生成算子.o, .json:
    TBE生成算子即是一个完整的业务流程,因此ST侧重测试各种数据类型、shape等场景下的生成的算子的正确性。
  • 验证算子逻辑的正确性:
    ST测试通过C++用例调用runtime的接口,然后端到端计算出执行结果,并取回结果和预期结果进行比较,来测试算子逻辑的正确性。

ST测试流程

st测试算子逻辑的正确性:
.o ->.data-> runtime -> pv model,通过软件实现,模拟算子在硬件上执行流程。
TBE单算子验证及调试_第6张图片

ST测试示例

  • ——以softmax_grad算子为例,Python用例
    • 在Mind Studio的tbe/testcases/st/softmax_grad/目录,编辑test_softmax_grad.py文件,用来生成st测试所需要的算子.o和.json文件;
    • 生成的算子.o和.json文件,保存在out/bin/llt/ops/common/kernel_bin目录下,bbit、camodel(Cycle Accurate Model,周期精确的处理器仿真程序)性能测试也会用到。
      TBE单算子验证及调试_第7张图片
  • ——以softmax_grad算子为例,生成数据data
    • 在Mind Studio的tbe/testcases/st/softmax_grad/目录,编辑softmax_grad_datagen.py文件,用来生成st测试所需要的输入数据和对比数据;bbit,camodel性能测试也会用到。
    • 生成的算子.data文件,保存在out/bin/llt/ops/common/data目录下,bbit、camodel性能测试也会用到
      TBE单算子验证及调试_第8张图片
  • ——以softmax_grad算子为例,C++用例
    • 在Mind Studio的tbe/testcases/st/softmax_grad目录下编写softmax_grad_st.cc代码,用来生成st测试的可执行程序
      TBE单算子验证及调试_第9张图片
      TBE单算子验证及调试_第10张图片

ST测试结果分析

——以softmax_grad算子为例

  • Mind Studio右键单击st/算子文件夹,选择run ‘softmax_grad’st with coverage执行测试;

启动st测试
TBE单算子验证及调试_第11张图片
Log日志
TBE单算子验证及调试_第12张图片

TBE单算子BBIT测试

BBIT测试目的

  • BBIT:Building Block Integerated Test,系统联调
  • ST测试得到的结果是通过pvmodel仿真出来的,并不是实际D芯片的执行结果;BBIT则利用ST生成的算子,进行上板测试,得到最真实的芯片输出结果
    TBE单算子验证及调试_第13张图片

BBIT测试流程

——以softmax_grad算子为例
TBE单算子验证及调试_第14张图片

BBIT测试结果分析

——以softmax_grad算子为例
运行bbit测试命令:
./tvm_bbit SoftmaxgradTest
TBE单算子验证及调试_第15张图片

TBE单算子性能分析

性能分析目的与流程

通过仿真的手段,提前知道已开发算子的性能,并以此进行针对性的算子逻辑优化,已达到算子性能理论最优。
具体仿真流程如下:
流程

性能分析测试示例

——以softmax_grad算子为例 执行仿真
切换工程Target为Simulator(Performance),重新执行st测试
TBE单算子验证及调试_第16张图片

性能分析结果分析

  • ——以softmax_grad算子为例
    生成散点图,分析算子性能:
    TBE单算子验证及调试_第17张图片
  • ——以sqrt算子为例
    利用脚本工具,生成散点图,分析算子性能:
    TBE单算子验证及调试_第18张图片
  • ——gelu算子
    采用了乒乓的策略,vector的利用率很高:
    TBE单算子验证及调试_第19张图片
  • ——matmlu算子
    数据搬运要进行分形操作,UB->L1(Zz) ->L0A(Zz)、 L0B(Zn),cube利用率很低
    TBE单算子验证及调试_第20张图片

总结

  • 单算子UT用例的编写、测试以及结果分析
  • 单算子的ST测试的python用例、C++用例的编写,运行以及结果分析
  • 单算子BBIT用例的编写,测试以及结果分析
  • 单算子的性能分析

你可能感兴趣的:(huawei,TBE,人工智能,python,大数据,软件测试,tensorflow,神经网络)