Skip to content

Commit d1d375f

Browse files
lvliang-intelsys-lpot-val
authored andcommitted
Fix TextRNN and centernet_hg104 tuning issue (#171)
* Fix centernet_hg104 tuning issue Signed-off-by: sys-lpot-val <[email protected]> * Fix TextRNN tuning issue Signed-off-by: sys-lpot-val <[email protected]> Signed-off-by: sys-lpot-val <[email protected]> Signed-off-by: Lv, Liang1 <[email protected]> Co-authored-by: sys-lpot-val <[email protected]> Signed-off-by: yiliu30 <[email protected]>
1 parent e283b27 commit d1d375f

File tree

7 files changed

+64
-37
lines changed

7 files changed

+64
-37
lines changed

examples/tensorflow/oob_models/quantization/ptq/model_detail.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,5 +385,11 @@
385385
'low': -1.0,
386386
'high': 1.0
387387
},
388+
# centernet_hg104
389+
{
390+
'model_name': 'centernet_hg104',
391+
'input': {'input_tensor': generate_data([224, 224, 3]),},
392+
'output': ['Identity'],
393+
},
388394
]
389395

examples/tensorflow/oob_models/quantization/ptq/run_benchmark.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ function set_args {
101101
NeuMF
102102
PRNet
103103
DIEN_Deep-Interest-Evolution-Network
104+
EfficientDet-D2-768x768
105+
EfficientDet-D4-1024x1024
106+
centernet_hg104
104107
--------
105108
)
106109

examples/tensorflow/oob_models/quantization/ptq/run_tuning.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ function set_args {
8383
DIEN_Deep-Interest-Evolution-Network
8484
EfficientDet-D2-768x768
8585
EfficientDet-D4-1024x1024
86+
centernet_hg104
8687
--------
8788
)
8889

neural_compressor/adaptor/tf_utils/graph_rewriter/generic/fuse_pad_with_conv.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def do_transformation(self):
4545
target_nodes = cur_graph.query_fusion_pattern_nodes(
4646
[["Pad"], ["Conv2D", "Conv3D", "DepthwiseConv2dNative"], ('BiasAdd', 'Add', 'AddV2')])
4747

48+
padding_tensor_dict = {}
4849
for node_combination in target_nodes:
4950
conv_name = node_combination[1]
5051

@@ -70,21 +71,26 @@ def do_transformation(self):
7071
continue
7172

7273
padding_tensor = None
73-
pad_node = graph_info[node_combination[0]].node
74-
if graph_info[pad_node.input[1]].node.op != 'Const':
75-
input_node = graph_info[pad_node.input[1]].node
76-
if input_node.op == 'DataFormatVecPermute':
77-
parent_input_node = graph_info[input_node.input[0]].node
78-
if parent_input_node.op == 'Const':
79-
padding_tensor = tensor_util.MakeNdarray( \
80-
parent_input_node.attr["value"].tensor).flatten()
74+
pad_node = None
75+
if node_combination[0] not in padding_tensor_dict:
76+
pad_node = graph_info[node_combination[0]].node
77+
if graph_info[pad_node.input[1]].node.op != 'Const':
78+
input_node = graph_info[pad_node.input[1]].node
79+
if input_node.op == 'DataFormatVecPermute':
80+
parent_input_node = graph_info[input_node.input[0]].node
81+
if parent_input_node.op == 'Const':
82+
padding_tensor = tensor_util.MakeNdarray( \
83+
parent_input_node.attr["value"].tensor).flatten()
84+
else:
85+
continue
8186
else:
8287
continue
8388
else:
84-
continue
89+
padding_tensor = tensor_util.MakeNdarray(
90+
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
91+
padding_tensor_dict[node_combination[0]] = padding_tensor
8592
else:
86-
padding_tensor = tensor_util.MakeNdarray(
87-
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
93+
padding_tensor = padding_tensor_dict[node_combination[0]]
8894

8995
if self.itex_qdq_mode:
9096
enabled_pad_conv2d = bool(tf.version.VERSION == '1.15.0-up3' or \
@@ -95,12 +101,13 @@ def do_transformation(self):
95101
if any(padding_tensor) and not enabled_pad_conv2d: # pragma: no cover
96102
continue
97103

98-
if graph_info[pad_node.input[1]].node.op != 'Const':
99-
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
100-
cur_graph.remove_node_with_single_input_output(pad_node.name)
101-
else:
102-
cur_graph.remove_node_with_single_input_output(pad_node.name)
103-
cur_graph.remove_node(pad_node.input[1])
104+
if pad_node:
105+
if graph_info[pad_node.input[1]].node.op != 'Const':
106+
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
107+
cur_graph.remove_node_with_single_input_output(pad_node.name)
108+
else:
109+
cur_graph.remove_node_with_single_input_output(pad_node.name)
110+
cur_graph.remove_node(pad_node.input[1])
104111
conv_node = graph_info[node_combination[1]].node
105112
if self.itex_qdq_mode:
106113
if any(padding_tensor) and enabled_pad_conv2d: # pragma: no cover

neural_compressor/adaptor/tf_utils/graph_rewriter/generic/fuse_pad_with_fp32_conv.py

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def do_transformation(self):
4646
target_nodes = cur_graph.query_fusion_pattern_nodes(
4747
[["Pad"], ["Conv2D", "DepthwiseConv2dNative"], ('BiasAdd', 'Add', 'AddV2')])
4848

49+
padding_tensor_dict = {}
4950
for node_combination in target_nodes:
5051
conv_name = node_combination[1]
5152

@@ -71,21 +72,26 @@ def do_transformation(self):
7172
continue
7273

7374
padding_tensor = None
74-
pad_node = graph_info[node_combination[0]].node
75-
if graph_info[pad_node.input[1]].node.op != 'Const':
76-
input_node = graph_info[pad_node.input[1]].node
77-
if input_node.op == 'DataFormatVecPermute':
78-
parent_input_node = graph_info[input_node.input[0]].node
79-
if parent_input_node.op == 'Const':
80-
padding_tensor = tensor_util.MakeNdarray( \
81-
parent_input_node.attr["value"].tensor).flatten()
75+
pad_node = None
76+
if node_combination[0] not in padding_tensor_dict:
77+
pad_node = graph_info[node_combination[0]].node
78+
if graph_info[pad_node.input[1]].node.op != 'Const':
79+
input_node = graph_info[pad_node.input[1]].node
80+
if input_node.op == 'DataFormatVecPermute':
81+
parent_input_node = graph_info[input_node.input[0]].node
82+
if parent_input_node.op == 'Const':
83+
padding_tensor = tensor_util.MakeNdarray( \
84+
parent_input_node.attr["value"].tensor).flatten()
85+
else:
86+
continue
8287
else:
8388
continue
8489
else:
85-
continue
90+
padding_tensor = tensor_util.MakeNdarray(
91+
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
92+
padding_tensor_dict[node_combination[0]] = padding_tensor
8693
else:
87-
padding_tensor = tensor_util.MakeNdarray(
88-
graph_info[pad_node.input[1]].node.attr["value"].tensor).flatten()
94+
padding_tensor = padding_tensor_dict[node_combination[0]]
8995

9096
if self.itex_qdq_mode:
9197
enabled_pad_conv2d = bool(tf.version.VERSION == '1.15.0-up3' or \
@@ -95,12 +101,14 @@ def do_transformation(self):
95101

96102
if any(padding_tensor) and not enabled_pad_conv2d: # pragma: no cover
97103
continue
98-
if graph_info[pad_node.input[1]].node.op != 'Const':
99-
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
100-
cur_graph.remove_node_with_single_input_output(pad_node.name)
101-
else:
102-
cur_graph.remove_node_with_single_input_output(pad_node.name)
103-
cur_graph.remove_node(pad_node.input[1])
104+
105+
if pad_node:
106+
if graph_info[pad_node.input[1]].node.op != 'Const':
107+
cur_graph.node_name_details[pad_node.name].node.input.remove(pad_node.input[1])
108+
cur_graph.remove_node_with_single_input_output(pad_node.name)
109+
else:
110+
cur_graph.remove_node_with_single_input_output(pad_node.name)
111+
cur_graph.remove_node(pad_node.input[1])
104112
conv_node = graph_info[node_combination[1]].node
105113
# Helper.set_attr_int_list(conv_node, "padding_list", padding_tensor)
106114
# only when padding attr is explicit, the explicit_paddings is not empty

neural_compressor/adaptor/tf_utils/graph_rewriter/qdq/insert_qdq_pattern.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ def _check_op_list(self, node_type):
182182
"MaxPool", "MaxPool3D", "FusedBatchNormV3", "Requantize", "RequantizePerChannel", "AvgPool", "Pad",
183183
"CropAndResize", "Dequantize", "Mean", "MatMul", "BatchMatMul", "BatchMatMulV2",
184184
"FakeQuantWithMinMaxVars", "_MklFusedInstanceNorm",
185-
"Conv2DBackpropInput", "Conv3DBackpropInputV2")
185+
"Conv2DBackpropInput", "Conv3DBackpropInputV2", "Sigmoid", "BiasAdd")
186186
return any([node_type.find(i) != -1 for i in op_list])
187187

188188
def _find_relu_node(self, node):
@@ -198,7 +198,7 @@ def _find_relu_node(self, node):
198198
or len(self.node_name_mapping \
199199
[Helper.node_name_from_input(node.input[0])].output) > 1):
200200
return True
201-
elif 'T' in node.attr and node.attr['T'].type in (dtypes.quint8, dtypes.uint8):
201+
elif 'T' in node.attr and dtypes.DType(node.attr['T'].type) in (dtypes.quint8, dtypes.uint8):
202202
return True
203203
elif (node.op.find("QuantizedConv") != -1
204204
or node.op.find("QuantizedDepthwiseConv") != -1 or

neural_compressor/adaptor/tf_utils/graph_util.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -918,11 +918,13 @@ def gen_per_iter(data):
918918
if i.startswith(first_line):
919919
iterations += 1
920920

921-
step = len(valid_data) / iterations
921+
step = int(len(valid_data) / iterations)
922922
final_res = []
923923

924924
for i in range(iterations):
925925
final_res.extend(gen_per_iter(valid_data[int(i*step): int(step*( i+ 1))]))
926+
if i + 1 == iterations and int(step*( i+ 1)) < len(valid_data):
927+
final_res.extend(gen_per_iter(valid_data[int(step*( i+ 1)): len(valid_data)]))
926928

927929
return final_res
928930

0 commit comments

Comments
 (0)