bmodel与tpu.mlir对比不过(4)

Viewed 111

问题描述:

yolov5x模型转换失败,bmodel结果与tpu.mlir结果不一致。
问题如图:
image.png

1 Answers

分析过程:

  1. 关闭layer group,问题不复现。这种情况就只能对final.mlir做裁剪。对更上层的mlir做截断,产生的group情况不同,可能不复现问题。
  2. 对final.mlir做裁剪,裁剪后生成bmodel,并运行结果和对比结果,如下:(裁剪的时候注意tpu.Group要做一个整体)
tpuc-opt yolov5x_bm1684x_f32_final.mlir --init --codegen="model_file=yolov5x_f32.bmodel" -o /dev/null
model_runner.py --input yolov5x_in_f32.npz --model yolov5x_f32.bmodel --output yolov5x_bm1684x_f32_model_outputs.npz
npz_tool.py compare yolov5x_bm1684x_f32_model_outputs.npz yolov5x_bm1684x_f32_tpu_outputs.npz --tolerance 0.99,0.90 --except - -vv

  1. 裁剪到如下图位置,问题复现。再裁剪问题就不复现。所以问题在这个位置:image.png
  2. tpu.Group内的算子依然是可以做裁剪,定位到具体的op。比如注释掉%325,flow里面%325对应的id 13也要删掉。如下:image.png
  3. 最后发现%323去掉的时候,%324结果是对的。所以问题出在%323,这是个Store算子。结合Store算子的特点,它是将数据填到gmem,猜测是gmem踩踏。最后对比地址,果然是地址踩踏问题:image.png