[GPU] Fix LCM notebook failure issue for int8 model. (#20944)

Fix to use partial_shape in dynamic case. Not get_dims().

Signed-off-by: hyunback <hyunback.kim@intel.com>
This commit is contained in:
hyunback kim
2023-11-13 20:39:02 +09:00
committed by GitHub
parent 5a04359200
commit 03e48f3c17
2 changed files with 32 additions and 2 deletions
@@ -530,6 +530,10 @@ void prepare_quantization::prepare_asymmetric_quantization(program &p, convoluti
in1.get_output_layout().data_type != data_types::i8)
return;
const size_t feature_idx = 1;
if (asymmetric_data && in0.get_output_layout().get_partial_shape()[feature_idx].is_dynamic())
return;
auto old_conv_prim = convolution_node.get_primitive();
primitive_id input = old_conv_prim->input[0].pid;
@@ -546,7 +550,7 @@ void prepare_quantization::prepare_asymmetric_quantization(program &p, convoluti
wl = wl.convert_to_weights_layout(convolution_node.typed_desc()->grouped_weights_shape);
}
int ofm = wl.group() * wl.ofm();
int ifm = in0.get_output_layout().feature();
int ifm = in0.get_output_layout().get_partial_shape()[feature_idx].get_length();
int ofm_aligned = align_to(ofm, 32);
int ifm_aligned = align_to(ifm, 32);
@@ -44,4 +44,30 @@ TEST(prepare_quantization, program_replace_check_num_of_nodes) {
program_wrapper::apply_opt_pass<prepare_quantization>(*prog);
ASSERT_TRUE(prog->get_node("quantize").get_dependencies().size() == 9);
}
}
TEST(prepare_quantization, dynamic_conv_asymmetric_data_weight_no_failure) {
auto& engine = get_test_engine();
ov::Shape in_shape = { 1, 15, 4, 5 };
auto in_layout = layout{ ov::PartialShape::dynamic(in_shape.size()), data_types::u8, format::bfyx };
auto input_ptr = engine.allocate_memory({ data_types::u8, format::bfyx, { 1, 15, 4, 5 } });
auto w_mem_ptr = engine.allocate_memory({ ov::PartialShape{ 30, 15, 3, 3 }, data_types::i8, format::bfyx });
auto zp_mem_ptr = engine.allocate_memory({ in_shape, data_types::u8, format::bfyx });
topology topology;
topology.add(input_layout("input", in_layout));
topology.add(data("weights", w_mem_ptr));
topology.add(data("a_zp", zp_mem_ptr));
topology.add(eltwise("a_sub", { input_info("input"), input_info("a_zp") }, eltwise_mode::sub, data_types::f32));
topology.add(convolution("conv_prim", input_info("a_sub"), "weights", "", 1, {1, 1}, {1, 1}, {0, 0}, {0, 0}, false));
ExecutionConfig config = get_test_default_config(engine);
config.set_property(ov::intel_gpu::allow_new_shape_infer(true));
config.set_property(ov::intel_gpu::optimize_data(true));
network network(engine, topology, config);
network.set_input_data("input", input_ptr);
EXPECT_NO_THROW(network.execute());
}