1 Segmentation Fault (core dumped)

例如,在测试relay.nn.conv2d_transpose转conv2d的测试用例中,出现如下错误:
image.png
而debug也几乎也无法定位到出错的代码。
通过打断点的方式,逐步缩小范围,发现其中调用了MakeExpandPixel函数,而该函数调用了vacc_expandpixel算子,但是,在当前分支却找不到该算子的定义(只在src/relay/pass/vacc/pipeline_grouping.cc中通过RELAY_REGISTER_OP(“vacc_expandpixel”)注册了算子, 只要注册了算子,调用算子不会有提示)。也就是说该算子是没有定义的,所以才导致了上面的错误。
也就是说,在tvm中,调用已注册但未定义的算子,编译阶段不会出错,但是在运行阶段会出现上面的Segmentation Fault (core dumped)错误。

2 Incompatible broadcast type

image.png
这个问题是weight (int 8)被数据对齐成了TensorType([8, 8, 3, 3], int8), 而scale (float)数据对齐是TensorType([4, 4, 3, 3], float32) 二者的shape不一样,无法broadcast

3 在使用testing.create_workload(f)的过程中出现如下问题

未命名图片.png
这一般是因为定义变量的名称有问题,例如:

  1. def test_quantize_weight_conv2d():
  2. """ the channel is a multiple of 4"""
  3. dtype = "float32"
  4. dshape = (1, 3, 8, 8)
  5. data = relay.var("x", shape=dshape,dtype=dtype)
  6. w0 = relay.var("w0")
  7. conv0 = relay.nn.conv2d(data, w0,
  8. kernel_size=(3, 3),
  9. padding=(1, 1),
  10. channels=4)

上面的data和w0都有问题:
输入的data的名称应该为”data”
权重的名称应该以”weight”结尾
例如:

  1. def test_quantize_weight_conv2d():
  2. """ the channel is a multiple of 4"""
  3. dtype = "float32"
  4. dshape = (1, 3, 8, 8)
  5. data = relay.var("data", shape=dshape,dtype=dtype)
  6. w0 = relay.var("w0_weight")
  7. conv0 = relay.nn.conv2d(data, w0,
  8. kernel_size=(3, 3),
  9. padding=(1, 1),
  10. channels=4)
  11. w1 = relay.var("w1_weight")
  12. z = relay.nn.conv2d(conv0, w1,
  13. kernel_size=(3, 3),
  14. padding=(1, 1),
  15. channels=4)

3 TVMError: Check failed: ObjectTypeChecker: :Check(ptr): Expected type List[Tensor] but get Tensor

未命名图片.png
这有可能是算子的compute的实现返回的不是一个包含tensor的list,而是一个tensor
例如:

  1. @_reg.register_compute("vacc.op.annotation.qt_after_conv")
  2. def simulated_quantize_compute(attrs, inputs, out_type, target):
  3. """Compiler for qt_after_conv."""
  4. assert len(inputs) == 2
  5. data, _ = inputs
  6. return topi.identity(data)

上面的返回值是topi.identity(data),应该改成:

  1. @_reg.register_compute("vacc.op.annotation.qt_after_conv")
  2. def simulated_quantize_compute(attrs, inputs, out_type, target):
  3. """Compiler for qt_after_conv."""
  4. assert len(inputs) == 2
  5. data, _ = inputs
  6. return [topi.identity(data)]

4 在114上计算KL散度问题,弹出如下错误

但是,同样的计算,在240服务器上则没有
未命名图片.png
暂时未找出原因

5 在使用KL散度计算时,发现计算出的值小于0

原因是:咱们的计算KL散度的函数只支持float32或float16类型。而np默认是float64