Open abdulazizm opened 2 years ago
Hi @jornt-xilinx ,
Please help us with your suggestion for improving the performance. Did you find any irregularities in this mod['main']?
FYI:
fn (%data: Tensor[(1, 3, 550, 550), float32]) -> (Tensor[(1, 19173, 4), float32], Tensor[(1, 19173, 81), float32], Tensor[(1, 19173, 32), float32], Tensor[(19173, 4), float32]) {
%0 = layout_transform(%data, src_layout="NCHW", dst_layout="NHWC") /* ty=Tensor[(1, 550, 550, 3), float32] */;
%1 = @tvmgen_default_vitis_ai_main_0(%0) /* ty=(Tensor[(1, 35, 35, 256), float32], Tensor[(1, 69, 69, 256), float32], Tensor[(1, 35, 35, 12), float32], Tensor[(1, 18, 18, 12), float32], Tensor[(1, 9, 9, 12), float32], Tensor[(1, 35, 35, 243), float32], Tensor[(1, 18, 18, 243), float32], Tensor[(1, 9, 9, 243), float32], Tensor[(1, 35, 35, 96), float32], Tensor[(1, 18, 18, 96), float32], Tensor[(1, 9, 9, 96), float32]) */;
%2 = %1.0;
%3 = layout_transform(%2, src_layout="NHWC", dst_layout="NCHW") /* ty=Tensor[(1, 256, 35, 35), float32] */;
%4 = %1.1;
%5 = image.resize2d(%3, size=[69, 69], roi=[0f, 0f, 0f, 0f], rounding_method="", cubic_alpha=-0.75f) /* C.graph: aten::upsample_bilinear2d, jit._trace.TopLevelTracedModule: __module.fpn */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%6 = layout_transform(%4, src_layout="NHWC", dst_layout="NCHW") /* ty=Tensor[(1, 256, 69, 69), float32] */;
%7 = add(%5, %6) /* C.graph: aten::add, jit._trace.TopLevelTracedModule: __module.fpn */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%8 = nn.conv2d(%7, meta[relay.Constant][0] /* ty=Tensor[(256, 256, 3, 3), float32] */, padding=[1, 1, 1, 1], channels=256, kernel_size=[3, 3]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.fpn/__module.fpn.pred_layers.1_PART_0 */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%9 = add(%8, meta[relay.Constant][1] /* ty=Tensor[(1, 256, 1, 1), float32] */) /* ty=Tensor[(1, 256, 69, 69), float32] */;
%10 = nn.relu(%9) /* C.graph: aten::relu, jit._trace.TopLevelTracedModule: __module.fpn */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%11 = nn.conv2d(%10, meta[relay.Constant][2] /* ty=Tensor[(256, 256, 3, 3), float32] */, padding=[1, 1, 1, 1], channels=256, kernel_size=[3, 3]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.prediction_layers.0/__module.prediction_layers.0.upfeature/__module.prediction_layers.0.upfeature.0_PART_2 */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%12 = add(%11, meta[relay.Constant][3] /* ty=Tensor[(1, 256, 1, 1), float32] */) /* ty=Tensor[(1, 256, 69, 69), float32] */;
%13 = nn.relu(%12) /* C.graph: aten::relu_, jit._trace.TopLevelTracedModule: __module.prediction_layers.0/__module.prediction_layers.0.upfeature/__module.prediction_layers.0.upfeature.1 */ /* ty=Tensor[(1, 256, 69, 69), float32] */;
%14 = nn.conv2d(%13, meta[relay.Constant][4] /* ty=Tensor[(12, 256, 3, 3), float32] */, padding=[1, 1, 1, 1], channels=12, kernel_size=[3, 3]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.prediction_layers.0/__module.prediction_layers.0.bbox_layer_PART_0 */ /* ty=Tensor[(1, 12, 69, 69), float32] */;
%15 = add(%14, meta[relay.Constant][5] /* ty=Tensor[(1, 12, 1, 1), float32] */) /* ty=Tensor[(1, 12, 69, 69), float32] */;
%16 = transpose(%15, axes=[0, 2, 3, 1]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 12), float32] */;
%17 = %1.2;
%18 = transpose(%17, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 12), float32] */;
%19 = %1.3;
%20 = transpose(%19, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 12), float32] */;
%21 = %1.4;
%22 = transpose(%21, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 12), float32] */;
%23 = reshape(%16, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 4), float32] */;
%24 = reshape(%18, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 4), float32] */;
%25 = reshape(%20, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 4), float32] */;
%26 = reshape(%22, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 4), float32] */;
%27 = (%23, %24, %25, %26);
%28 = nn.conv2d(%13, meta[relay.Constant][6] /* ty=Tensor[(243, 256, 3, 3), float32] */, padding=[1, 1, 1, 1], channels=243, kernel_size=[3, 3]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.prediction_layers.0/__module.prediction_layers.0.conf_layer_PART_0 */ /* ty=Tensor[(1, 243, 69, 69), float32] */;
%29 = add(%28, meta[relay.Constant][7] /* ty=Tensor[(1, 243, 1, 1), float32] */) /* ty=Tensor[(1, 243, 69, 69), float32] */;
%30 = transpose(%29, axes=[0, 2, 3, 1]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 243), float32] */;
%31 = %1.5;
%32 = transpose(%31, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 243), float32] */;
%33 = %1.6;
%34 = transpose(%33, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 243), float32] */;
%35 = %1.7;
%36 = transpose(%35, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 243), float32] */;
%37 = reshape(%30, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 81), float32] */;
%38 = reshape(%32, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 81), float32] */;
%39 = reshape(%34, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 81), float32] */;
%40 = reshape(%36, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 81), float32] */;
%41 = (%37, %38, %39, %40);
%42 = concatenate(%41, axis=-2) /* C.graph: aten::cat, warning: no trace info 1 */ /* ty=Tensor[(1, 19173, 81), float32] */;
%43 = nn.conv2d(%13, meta[relay.Constant][8] /* ty=Tensor[(96, 256, 3, 3), float32] */, padding=[1, 1, 1, 1], channels=96, kernel_size=[3, 3]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.prediction_layers.0/__module.prediction_layers.0.mask_layer_PART_0 */ /* ty=Tensor[(1, 96, 69, 69), float32] */;
%44 = add(%43, meta[relay.Constant][9] /* ty=Tensor[(1, 96, 1, 1), float32] */) /* ty=Tensor[(1, 96, 69, 69), float32] */;
%45 = transpose(%44, axes=[0, 2, 3, 1]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 96), float32] */;
%46 = reshape(%45, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 32), float32] */;
%47 = %1.8;
%48 = transpose(%47, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 96), float32] */;
%49 = reshape(%48, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 32), float32] */;
%50 = %1.9;
%51 = transpose(%50, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 96), float32] */;
%52 = reshape(%51, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 32), float32] */;
%53 = %1.10;
%54 = transpose(%53, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 96), float32] */;
%55 = reshape(%54, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 32), float32] */;
%56 = tanh(%46) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 32), float32] */;
%57 = tanh(%49) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 32), float32] */;
%58 = tanh(%52) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 32), float32] */;
%59 = tanh(%55) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 32), float32] */;
%60 = (%56, %57, %58, %59);
%61 = concatenate(%27, axis=-2) /* C.graph: aten::cat, warning: no trace info 0 */ /* ty=Tensor[(1, 19173, 4), float32] */;
%62 = nn.softmax(%42) /* C.graph: aten::softmax, warning: no trace info 4 */ /* ty=Tensor[(1, 19173, 81), float32] */;
%63 = concatenate(%60, axis=-2) /* C.graph: aten::cat, warning: no trace info 2 */ /* ty=Tensor[(1, 19173, 32), float32] */;
(%61, %62, %63, meta[relay.Constant][10] /* ty=Tensor[(19173, 4), float32] */)
}
@abdulazizm I think the issue is the bilinear resize2d layers. From the Vitis AI user guide:
If the mode of the resize is 'BILINEAR', align_corner=false, half_pixel_centers = false, size = 2, 4, 8; align_corner=false, half_pixel_centers = true, size = 2, 4 can be transformed to DPU implementations (pad +depthwisetransposed conv2d). Ifthe mode of the resize is 'NEAREST' and the size is an integer, the resize would be mapped to DPU implementations.
I created a small test case and the DPU compiler couldn't handle these resize layers. I believe the issue is the floating scale from [35, 35] to [69, 69].
Thanks for the quick reply, @jornt-xilinx . Completely makes sense. Are there any suggestions to improve this further by any chance?
@jtuyls aten::view, aten::permute operators are running on cpu it seems. DPU is not supporting these?
Tried changing aten::view -> aten::reshape , seems its also pulled on CPU.
Is this expected?
@abdulazizm I think the issue is the bilinear resize2d layers. From the Vitis AI user guide:
If the mode of the resize is 'BILINEAR', align_corner=false, half_pixel_centers = false, size = 2, 4, 8; align_corner=false, half_pixel_centers = true, size = 2, 4 can be transformed to DPU implementations (pad +depthwisetransposed conv2d). Ifthe mode of the resize is 'NEAREST' and the size is an integer, the resize would be mapped to DPU implementations.
I created a small test case and the DPU compiler couldn't handle these resize layers. I believe the issue is the floating scale from [35, 35] to [69, 69].
@jtuyls I don't think the issue is with scaling_factor. Refer below mod['main'] -> this has resize2d [69,69] to [138,138] in CPU after partition.
fn (%data: Tensor[(1, 3, 550, 550), float32]) -> (Tensor[(1, 19173, 4), float32], Tensor[(1, 19173, 81), float32], Tensor[(1, 19173, 32), float32], Tensor[(19173, 4), float32], Tensor[(1, 138, 138, 32), float32]) {
%0 = layout_transform(%data, src_layout="NCHW", dst_layout="NHWC") /* ty=Tensor[(1, 550, 550, 3), float32] */;
%1 = @tvmgen_default_vitis_ai_main_0(%0) /* ty=(Tensor[(1, 69, 69, 12), float32], Tensor[(1, 35, 35, 12), float32], Tensor[(1, 18, 18, 12), float32], Tensor[(1, 9, 9, 12), float32], Tensor[(1, 69, 69, 243), float32], Tensor[(1, 35, 35, 243), float32], Tensor[(1, 18, 18, 243), float32], Tensor[(1, 9, 9, 243), float32], Tensor[(1, 69, 69, 96), float32], Tensor[(1, 35, 35, 96), float32], Tensor[(1, 18, 18, 96), float32], Tensor[(1, 9, 9, 96), float32], Tensor[(1, 69, 69, 256), float32]) */;
%2 = %1.0;
%3 = transpose(%2, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 12), float32] */;
%4 = %1.1;
%5 = transpose(%4, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 12), float32] */;
%6 = %1.2;
%7 = transpose(%6, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 12), float32] */;
%8 = %1.3;
%9 = transpose(%8, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 12), float32] */;
%10 = reshape(%3, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 4), float32] */;
%11 = reshape(%5, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 4), float32] */;
%12 = reshape(%7, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 4), float32] */;
%13 = reshape(%9, newshape=[1, -1, 4]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 4), float32] */;
%14 = (%10, %11, %12, %13);
%15 = %1.4;
%16 = transpose(%15, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 243), float32] */;
%17 = %1.5;
%18 = transpose(%17, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 243), float32] */;
%19 = %1.6;
%20 = transpose(%19, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 243), float32] */;
%21 = %1.7;
%22 = transpose(%21, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 243), float32] */;
%23 = reshape(%16, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 81), float32] */;
%24 = reshape(%18, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 81), float32] */;
%25 = reshape(%20, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 81), float32] */;
%26 = reshape(%22, newshape=[1, -1, 81]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 81), float32] */;
%27 = (%23, %24, %25, %26);
%28 = concatenate(%27, axis=-2) /* C.graph: aten::cat, warning: no trace info 4 */ /* ty=Tensor[(1, 19173, 81), float32] */;
%29 = %1.8;
%30 = transpose(%29, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 69, 69, 96), float32] */;
%31 = reshape(%30, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 32), float32] */;
%32 = %1.9;
%33 = transpose(%32, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 35, 35, 96), float32] */;
%34 = reshape(%33, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 32), float32] */;
%35 = %1.10;
%36 = transpose(%35, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 18, 18, 96), float32] */;
%37 = reshape(%36, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 32), float32] */;
%38 = %1.11;
%39 = transpose(%38, axes=[0, 1, 2, 3]) /* C.graph: aten::permute, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 9, 9, 96), float32] */;
%40 = reshape(%39, newshape=[1, -1, 32]) /* C.graph: aten::view, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 32), float32] */;
%41 = tanh(%31) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.0 */ /* ty=Tensor[(1, 14283, 32), float32] */;
%42 = tanh(%34) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.1 */ /* ty=Tensor[(1, 3675, 32), float32] */;
%43 = tanh(%37) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.2 */ /* ty=Tensor[(1, 972, 32), float32] */;
%44 = tanh(%40) /* C.graph: aten::tanh, jit._trace.TopLevelTracedModule: __module.prediction_layers.3 */ /* ty=Tensor[(1, 243, 32), float32] */;
%45 = (%41, %42, %43, %44);
%46 = %1.12;
%47 = layout_transform(%46, src_layout="NHWC", dst_layout="NCHW") /* ty=Tensor[(1, 256, 69, 69), float32] */;
%48 = image.resize2d(%47, size=[138, 138], roi=[0f, 0f, 0f, 0f], rounding_method="", cubic_alpha=-0.75f) /* C.graph: aten::upsample_bilinear2d, jit._trace.TopLevelTracedModule: __module.proto_net/__module.proto_net.6 */ /* ty=Tensor[(1, 256, 138, 138), float32] */;
%49 = nn.relu(%48) /* C.graph: aten::relu_, jit._trace.TopLevelTracedModule: __module.proto_net/__module.proto_net.7 */ /* ty=Tensor[(1, 256, 138, 138), float32] */;
%50 = nn.conv2d(%49, meta[relay.Constant][1] /* ty=Tensor[(32, 256, 1, 1), float32] */, padding=[0, 0, 0, 0], channels=32, kernel_size=[1, 1]) /* C.graph: aten::_convolution, jit._trace.TopLevelTracedModule: __module.proto_net/__module.proto_net.8_PART_0 */ /* ty=Tensor[(1, 32, 138, 138), float32] */;
%51 = add(%50, meta[relay.Constant][2] /* ty=Tensor[(1, 32, 1, 1), float32] */) /* ty=Tensor[(1, 32, 138, 138), float32] */;
%52 = nn.relu(%51) /* C.graph: aten::relu_, warning: no trace info 0 */ /* ty=Tensor[(1, 32, 138, 138), float32] */;
%53 = concatenate(%14, axis=-2) /* C.graph: aten::cat, warning: no trace info 3 */ /* ty=Tensor[(1, 19173, 4), float32] */;
%54 = nn.softmax(%28) /* C.graph: aten::softmax, warning: no trace info 7 */ /* ty=Tensor[(1, 19173, 81), float32] */;
%55 = concatenate(%45, axis=-2) /* C.graph: aten::cat, warning: no trace info 5 */ /* ty=Tensor[(1, 19173, 32), float32] */;
%56 = transpose(%52, axes=[0, 2, 3, 1]) /* C.graph: aten::permute, warning: no trace info 1 */ /* ty=Tensor[(1, 138, 138, 32), float32] */;
(%53, %54, %55, meta[relay.Constant][0] /* ty=Tensor[(19173, 4), float32] */, %56)
}
Is there any timeline for supporting bilinear interpolation with this tvm flow?
@abdulazizm I think that this (69, 69) -> (128, 128) resize could be offloaded to the DPU indeed, however, the tanh and reshape ops in between are prohibiting putting resize2d in the DPU subgraph (we only support one DPU subgraph).
https://github.com/Ma-Dan/yolact/tree/onnx - Ma-Dan version of yolact is onnx exportable (hope its good to JIT trace), tried this with pytorch frontend but getting segmentation fault at
partition_for_vitis_ai(mod, params, dpu=target)
as below (debug logs enabled - can post full log in file if needed)To JIT trace yoloact model:
Please refer: https://discuss.tvm.apache.org/t/frontend-pytorch-compile-yolact-for-xilinx-hardware-zcu104/11909/5?u=abdulazizm