未验证 提交 96e7d903 编写于 作者: W Wilber 提交者: GitHub

update infer trt ut. (#35261)

上级 a2afcace
...@@ -3,15 +3,29 @@ string(REPLACE ".py" "" TEST_INFERENCE_IR_PASSES "${TEST_INFERENCE_IR_PASSES}") ...@@ -3,15 +3,29 @@ string(REPLACE ".py" "" TEST_INFERENCE_IR_PASSES "${TEST_INFERENCE_IR_PASSES}")
file(GLOB TEST_TRT_IR_PASSES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "test_trt_*.py") file(GLOB TEST_TRT_IR_PASSES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "test_trt_*.py")
string(REPLACE ".py" "" TEST_TRT_IR_PASSES "${TEST_TRT_IR_PASSES}") string(REPLACE ".py" "" TEST_TRT_IR_PASSES "${TEST_TRT_IR_PASSES}")
file(GLOB TEST_TRT_CONVERTER RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "test_trt_convert_*.py")
string(REPLACE ".py" "" TEST_TRT_CONVERTER "${TEST_TRT_CONVERTER}")
foreach(TEST_INFERENCE_IR_PASS ${TEST_TRT_IR_PASSES}) foreach(TEST_INFERENCE_IR_PASS ${TEST_TRT_IR_PASSES})
list(REMOVE_ITEM TEST_INFERENCE_IR_PASSES ${TEST_INFERENCE_IR_PASS}) list(REMOVE_ITEM TEST_INFERENCE_IR_PASSES ${TEST_INFERENCE_IR_PASS})
endforeach() endforeach()
if(WITH_GPU AND TENSORRT_FOUND) if(WITH_GPU AND TENSORRT_FOUND)
list(REMOVE_ITEM TEST_TRT_IR_PASSES test_trt_multiclass_nms_op) list(REMOVE_ITEM TEST_TRT_IR_PASSES test_trt_multiclass_nms_op)
foreach(TRT_CONVERT ${TEST_TRT_CONVERTER})
list(REMOVE_ITEM TEST_TRT_IR_PASSES ${TRT_CONVERT})
endforeach()
foreach(target ${TEST_TRT_IR_PASSES}) foreach(target ${TEST_TRT_IR_PASSES})
py_test_modules(${target} MODULES ${target}) py_test_modules(${target} MODULES ${target})
endforeach() endforeach()
foreach(target ${TEST_TRT_CONVERTER})
py_test_modules(${target} MODULES ${target})
set_tests_properties(${target} PROPERTIES TIMEOUT 100)
endforeach()
endif() endif()
file(GLOB TEST_MKLDNN_IR_PASSES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "test_mkldnn_*.py") file(GLOB TEST_MKLDNN_IR_PASSES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "test_mkldnn_*.py")
...@@ -38,7 +52,6 @@ set_tests_properties(test_trt_dynamic_shape PROPERTIES TIMEOUT 120) ...@@ -38,7 +52,6 @@ set_tests_properties(test_trt_dynamic_shape PROPERTIES TIMEOUT 120)
set_tests_properties(test_trt_pool_op PROPERTIES ENVIRONMENT FLAGS_fraction_of_gpu_memory_to_use=0.1 TIMEOUT 45) set_tests_properties(test_trt_pool_op PROPERTIES ENVIRONMENT FLAGS_fraction_of_gpu_memory_to_use=0.1 TIMEOUT 45)
set_tests_properties(test_trt_reduce_mean_op PROPERTIES TIMEOUT 60) set_tests_properties(test_trt_reduce_mean_op PROPERTIES TIMEOUT 60)
set_tests_properties(test_trt_tile_op PROPERTIES TIMEOUT 60) set_tests_properties(test_trt_tile_op PROPERTIES TIMEOUT 60)
set_tests_properties(test_trt_convert_conv2d PROPERTIES TIMEOUT 100)
set_tests_properties(test_trt_fc_fuse_quant_dequant_pass PROPERTIES TIMEOUT 100) set_tests_properties(test_trt_fc_fuse_quant_dequant_pass PROPERTIES TIMEOUT 100)
set_tests_properties(test_trt_conv_quant_dequant_pass PROPERTIES TIMEOUT 100) set_tests_properties(test_trt_conv_quant_dequant_pass PROPERTIES TIMEOUT 100)
set_tests_properties(test_trt_matmul_quant_dequant PROPERTIES TIMEOUT 100) set_tests_properties(test_trt_matmul_quant_dequant PROPERTIES TIMEOUT 100)
......
...@@ -16,6 +16,7 @@ import numpy as np ...@@ -16,6 +16,7 @@ import numpy as np
import unittest import unittest
import abc import abc
import os import os
import logging
import paddle import paddle
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.initializer import NumpyArrayInitializer from paddle.fluid.initializer import NumpyArrayInitializer
...@@ -25,6 +26,8 @@ import paddle.inference as paddle_infer ...@@ -25,6 +26,8 @@ import paddle.inference as paddle_infer
from typing import Optional, List, Callable, Dict, Any, Set from typing import Optional, List, Callable, Dict, Any, Set
from program_config import TensorConfig, OpConfig, ProgramConfig, create_fake_model, create_quant_model from program_config import TensorConfig, OpConfig, ProgramConfig, create_fake_model, create_quant_model
logging.basicConfig(level=logging.INFO, format="%(message)s")
class AutoScanTest(unittest.TestCase): class AutoScanTest(unittest.TestCase):
def __init__(self, methodName='runTest'): def __init__(self, methodName='runTest'):
...@@ -53,7 +56,9 @@ class AutoScanTest(unittest.TestCase): ...@@ -53,7 +56,9 @@ class AutoScanTest(unittest.TestCase):
for name, _ in prog_config.inputs.items(): for name, _ in prog_config.inputs.items():
input_tensor = predictor.get_input_handle(name) input_tensor = predictor.get_input_handle(name)
input_tensor.copy_from_cpu(feed_data[name]) input_tensor.copy_from_cpu(feed_data[name]['shape'])
if feed_data[name]['lod'] is not None:
input_tensor.set_lod(feed_data[name]['lod'])
predictor.run() predictor.run()
result = {} result = {}
for out_name, o_name in zip(prog_config.outputs, for out_name, o_name in zip(prog_config.outputs,
...@@ -97,22 +102,38 @@ class AutoScanTest(unittest.TestCase): ...@@ -97,22 +102,38 @@ class AutoScanTest(unittest.TestCase):
trt_engine_num: int, trt_engine_num: int,
paddle_op_num: int, paddle_op_num: int,
threshold=1e-5, threshold=1e-5,
quant=False): quant=False,
error_msg=None):
for prog_config in self.sample_program_configs(): for prog_config in self.sample_program_configs():
model, params = create_fake_model(prog_config) model, params = create_fake_model(prog_config)
if quant: if quant:
model, params = create_quant_model(model, params) model, params = create_quant_model(model, params)
for batch_size in self.batch_size_set: for batch_size in self.batch_size_set:
feed_data = {} feed_data = {}
log_str = ' -- Input tensor info: '
for name, tensor_config in prog_config.inputs.items(): for name, tensor_config in prog_config.inputs.items():
tensor_shape = tensor_config.shape.copy() tensor_shape = tensor_config.shape.copy()
tensor_shape[0] = batch_size tensor_shape[0] = batch_size
feed_data[name] = np.random.random(tensor_shape).astype( feed_data[name] = {
tensor_config.dtype) 'shape': np.random.random(tensor_shape).astype(
tensor_config.dtype),
'lod': tensor_config.lod
}
log_str += str({
name: {
'shape': tensor_shape,
'lod': tensor_config.lod
}
})
logging.info(log_str)
results: List[Dict[str, Tensor]] = [] results: List[Dict[str, Tensor]] = []
for pred_config in self.sample_predictor_configs(): for pred_config in self.sample_predictor_configs():
results.append( results.append(
self.run_test_config(model, params, prog_config, self.run_test_config(model, params, prog_config,
pred_config, feed_data)) pred_config, feed_data))
self.assert_tensors_near(threshold=threshold, tensors=results) try:
self.assert_op_size(trt_engine_num, paddle_op_num) self.assert_tensors_near(
threshold=threshold, tensors=results)
self.assert_op_size(trt_engine_num, paddle_op_num)
except:
logging.info('ERROR OCCURED: ' + error_msg)
...@@ -37,7 +37,8 @@ class TensorConfig: ...@@ -37,7 +37,8 @@ class TensorConfig:
def __init__(self, def __init__(self,
shape: [List[int]], shape: [List[int]],
dtype: [str]="float32", dtype: [str]="float32",
data: Optional[np.array]=None): data: Optional[np.array]=None,
lod: [List[List[int]]]=None):
''' '''
shape: The shape of the tensor. shape: The shape of the tensor.
dtype: The data type of the tensor. dtype: The data type of the tensor.
...@@ -46,6 +47,7 @@ class TensorConfig: ...@@ -46,6 +47,7 @@ class TensorConfig:
self.shape = shape self.shape = shape
self.dtype = dtype self.dtype = dtype
self.data = data self.data = data
self.lod = lod
class OpConfig: class OpConfig:
...@@ -186,13 +188,6 @@ def create_quant_model(model, ...@@ -186,13 +188,6 @@ def create_quant_model(model,
params_filename=params) params_filename=params)
graph = IrGraph(core.Graph(inference_program.desc), for_test=True) graph = IrGraph(core.Graph(inference_program.desc), for_test=True)
transform_pass = QuantizationTransformPass(
scope=scope,
place=place,
activation_quantize_type=activation_quantize_type,
weight_quantize_type=weight_quantize_type)
transform_pass.apply(graph)
out_scale_op_list = [ out_scale_op_list = [
"conv2d", "conv2d",
"depthwise_conv2d", "depthwise_conv2d",
...@@ -299,6 +294,13 @@ def create_quant_model(model, ...@@ -299,6 +294,13 @@ def create_quant_model(model,
var_names.append(var_name) var_names.append(var_name)
return var_names return var_names
transform_pass = QuantizationTransformPass(
scope=scope,
place=place,
activation_quantize_type=activation_quantize_type,
weight_quantize_type=weight_quantize_type)
transform_pass.apply(graph)
op_nodes = graph.all_op_nodes() op_nodes = graph.all_op_nodes()
for op_node in op_nodes: for op_node in op_nodes:
if op_node.name() in out_scale_op_list: if op_node.name() in out_scale_op_list:
......
...@@ -61,12 +61,12 @@ class TrtConvertConv2dTest(TrtLayerAutoScanTest): ...@@ -61,12 +61,12 @@ class TrtConvertConv2dTest(TrtLayerAutoScanTest):
self.program_outputs = ["relu_output_data"] self.program_outputs = ["relu_output_data"]
def test_check_fp32_output(self): def test_check_fp32_output(self):
self.trt_param.precision == paddle_infer.PrecisionType.Float32 self.trt_param.precision = paddle_infer.PrecisionType.Float32
# the fused tensorrt engine num is 1, and paddle op num is 2(feed and fetch). # the fused tensorrt engine num is 1, and paddle op num is 2(feed and fetch).
self.run_test(trt_engine_num=1, paddle_op_num=2, threshold=1e-5) self.run_test(trt_engine_num=1, paddle_op_num=2, threshold=1e-5)
def test_check_fp16_output(self): def test_check_fp16_output(self):
self.trt_param.precision == paddle_infer.PrecisionType.Half self.trt_param.precision = paddle_infer.PrecisionType.Half
self.run_test(trt_engine_num=1, paddle_op_num=2, threshold=1e-2) self.run_test(trt_engine_num=1, paddle_op_num=2, threshold=1e-2)
def test_dynamic_shape_fp32_check_output(self): def test_dynamic_shape_fp32_check_output(self):
......
...@@ -27,8 +27,7 @@ from typing import * ...@@ -27,8 +27,7 @@ from typing import *
from program_config import TensorConfig, OpConfig, ProgramConfig from program_config import TensorConfig, OpConfig, ProgramConfig
from auto_scan_test import AutoScanTest from auto_scan_test import AutoScanTest
logging.basicConfig( logging.basicConfig(level=logging.INFO, format="%(message)s")
level=logging.INFO, format="%(asctime)s - %(filename)s - %(message)s")
class TrtLayerAutoScanTest(AutoScanTest): class TrtLayerAutoScanTest(AutoScanTest):
...@@ -85,11 +84,19 @@ class TrtLayerAutoScanTest(AutoScanTest): ...@@ -85,11 +84,19 @@ class TrtLayerAutoScanTest(AutoScanTest):
op_attr_list = [] op_attr_list = []
index = 0 index = 0
ops = [] ops = []
for op_config in self.ops_config: log_str = 'TEST_CASE: '
for i in range(len(self.ops_config)):
op_config = self.ops_config[i]
op_attr = dict( op_attr = dict(
zip( zip(
list(op_config["op_attrs"].keys()), attrs_sample[ list(op_config["op_attrs"].keys()), attrs_sample[
index:index + len(op_config["op_attrs"])])) index:index + len(op_config["op_attrs"])]))
if i != len(self.ops_config) - 1:
log_str += op_config['op_type'] + str(op_attr) + ' + '
else:
log_str += op_config['op_type'] + str(op_attr)
op_attr_list.append(op_attr) op_attr_list.append(op_attr)
index = index + len(op_config["op_attrs"]) index = index + len(op_config["op_attrs"])
ops.append( ops.append(
...@@ -99,6 +106,7 @@ class TrtLayerAutoScanTest(AutoScanTest): ...@@ -99,6 +106,7 @@ class TrtLayerAutoScanTest(AutoScanTest):
outputs=op_config["op_outputs"], outputs=op_config["op_outputs"],
attrs=op_attr)) attrs=op_attr))
logging.info(log_str)
self.update_program_input_and_weight_with_attr(op_attr_list) self.update_program_input_and_weight_with_attr(op_attr_list)
# if no weight need to save, we create a place_holder to help seriazlie params. # if no weight need to save, we create a place_holder to help seriazlie params.
if not self.program_weights: if not self.program_weights:
...@@ -117,6 +125,7 @@ class TrtLayerAutoScanTest(AutoScanTest): ...@@ -117,6 +125,7 @@ class TrtLayerAutoScanTest(AutoScanTest):
self, use_trt=True, self, use_trt=True,
precision_mode=paddle_infer.PrecisionType.Float32): precision_mode=paddle_infer.PrecisionType.Float32):
config = paddle_infer.Config() config = paddle_infer.Config()
config.disable_glog_info()
config.enable_use_gpu(100, 0) config.enable_use_gpu(100, 0)
if use_trt: if use_trt:
config.switch_ir_debug() config.switch_ir_debug()
...@@ -141,8 +150,30 @@ class TrtLayerAutoScanTest(AutoScanTest): ...@@ -141,8 +150,30 @@ class TrtLayerAutoScanTest(AutoScanTest):
@abc.abstractmethod @abc.abstractmethod
def sample_predictor_configs(self): def sample_predictor_configs(self):
logging.info('--------- gpu inference ---------') def precision_to_str(p):
if p == paddle_infer.PrecisionType.Float32:
return 'float32'
elif p == paddle_infer.PrecisionType.Half:
return 'half'
elif p == paddle_infer.PrecisionType.Int8:
return 'int8'
else:
raise NotImplementedError('not supported type.')
trt_log_str = ''
if len(self.dynamic_shape.min_input_shape
) != 0 and self.dynamic_shape.min_input_shape.keys(
) == self.dynamic_shape.max_input_shape.keys(
) and self.dynamic_shape.min_input_shape.keys(
) == self.dynamic_shape.opt_input_shape.keys():
trt_log_str += 'dynamic_shape '
else:
trt_log_str += 'static_shape '
trt_log_str += precision_to_str(self.trt_param.precision)
logging.info(' --------- gpu inference ---------')
yield self.create_program_config(use_trt=False) yield self.create_program_config(use_trt=False)
logging.info('--------- trt inference ---------') logging.info(' --------- trt ' + trt_log_str +
' inference ---------')
yield self.create_program_config( yield self.create_program_config(
use_trt=True, precision_mode=self.trt_param.precision) use_trt=True, precision_mode=self.trt_param.precision)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册