ms_output = MeasureResult(costs=(1.91224744e-05,), error_no=0, all_cost=-1, timestamp=-1)
ltf_records.append((ms_input, ms_output))
- ltf_keys = []
- ltf_arg = [tvm.placeholder((1, 4, 8, 8, 4), dtype=dtype), "NCHW4c", "NCHW8c"]
- ltf_arg = autotvm.task.topi_integration.serialize_args(ltf_arg)
- ltf_wkl = ('layout_transform',) + autotvm.task.args_to_workload(ltf_arg)
- ltf_keys.append(ltf_wkl)
- ltf_arg = [tvm.placeholder((1, 1, 8, 8, 32), dtype=dtype), "NCHW32c", "NCHW4c"]
- ltf_arg = autotvm.task.topi_integration.serialize_args(ltf_arg)
- ltf_wkl = ('layout_transform',) + autotvm.task.args_to_workload(ltf_arg)
- ltf_keys.append(ltf_wkl)
- ltf_arg = [tvm.placeholder((1, 4, 8, 8, 8), dtype=dtype), "NCHW8c", "NCHW32c"]
+ executor = DPTuner(net, {"data": dshape}, records, target_ops, target)
+ executor.benchmark_layout_transform(layout_records=ltf_records, infer_layout=True)
+ executor.run()
+ out = [record[0].config for record in executor.get_optimal_records()]
+ expected_out = [records[3][0].config, records[1][0].config, records[2][0].config]
+ assert expected_out == out, "Output mismatch: expecting %s but got %s" \
+ % (str(expected_out), str(out))
+
+ executor = PBQPTuner(net, {"data": dshape}, records, target_ops, target)
+ executor.benchmark_layout_transform(layout_records=ltf_records, infer_layout=True)
+ executor.run()
+ out = [record[0].config for record in executor.get_optimal_records()]
+ expected_out = [records[3][0].config, records[1][0].config, records[2][0].config]
+ assert expected_out == out, "Output mismatch: expecting %s but got %s" \
+ % (str(expected_out), str(out))
+
+
+def test_tuple():
+ target = "llvm"
+ dtype = "float32"
+ dshape = (1, 5, 32, 32)
+ layout = "NCHW"
+ target_ops = [relay.nn.conv2d]
+
+ data = relay.var("data", shape=dshape, dtype=dtype)
+ w0 = relay.var("w0_weight")
+ conv0 = relay.nn.conv2d(data, w0, channels=2, kernel_size=(3, 3), padding=(1, 1))
+ w1 = relay.var("w1_weight")
+ conv1 = relay.nn.conv2d(data, w1, channels=3, kernel_size=(3, 3), padding=(1, 1))
+ out = relay.concatenate([conv0, conv1], axis=1)
+ net = relay.Function(relay.analysis.free_vars(out), out)
+ net, params = relay.testing.create_workload(net)
+
+ tasks = autotvm.task.extract_from_program(net["main"],
+ target=target,
+ params=params,
+ ops=(relay.op.nn.conv2d,))
+ wkl_list = [
+ create_workload((1, 5, 32, 32), (2, 5, 3, 3), (1, 1), (1, 1), (1, 1), layout, layout, dtype, dtype),
+ create_workload((1, 5, 32, 32), (3, 5, 3, 3), (1, 1), (1, 1), (1, 1), layout, layout, dtype, dtype),
+ ]
+ costs = [0.01, 0.012, 0.03, 0.04]
+ config_list = []
+ cfg_dict = {"i": -1,
+ "c": None,
+ "e": [["tile_ic", "sp", [1, 5]],
+ ["tile_oc", "sp", [1, 2]],
+ ["tile_ow", "sp", [4, 8]],
+ ["unroll_kw", "ot", True]],
+ "t": ""}
+ config_list.append(ConfigEntity.from_json_dict(cfg_dict))
+ cfg_dict = {"i": -1,
+ "c": None,
+ "e": [["tile_ic", "sp", [1, 5]],
+ ["tile_oc", "sp", [1, 3]],
+ ["tile_ow", "sp", [2, 16]],
+ ["unroll_kw", "ot", False]],
+ "t": ""}
+ config_list.append(ConfigEntity.from_json_dict(cfg_dict))
+ cfg_dict = {"i": -1,
+ "c": None,
+ "e": [["tile_ic", "sp", [1, 5]],
+ ["tile_oc", "sp", [2, 1]],
+ ["tile_ow", "sp", [4, 8]],
+ ["unroll_kw", "ot", True]],
+ "t": ""}
+ config_list.append(ConfigEntity.from_json_dict(cfg_dict))
+ cfg_dict = {"i": -1,
+ "c": None,
+ "e": [["tile_ic", "sp", [1, 5]],
+ ["tile_oc", "sp", [3, 1]],
+ ["tile_ow", "sp", [2, 16]],
+ ["unroll_kw", "ot", False]],
+ "t": ""}
+ config_list.append(ConfigEntity.from_json_dict(cfg_dict))
+
+ records = []
+
+ wkl_list = wkl_list + wkl_list
+ tasks = tasks + tasks
+ for wkl, cost, config, task in zip(wkl_list, costs, config_list, tasks):
+ task.workload = wkl
+ ms_input = MeasureInput(target=target, task=task, config=config)
+ ms_output = MeasureResult(costs=(cost,), error_no=0, all_cost=-1, timestamp=-1)
+ records.append((ms_input, ms_output))
+
+ ltf_records = []
+ ltf_arg = [tvm.placeholder((1, 64, 16, 16, 8), dtype=dtype), "NCHW8c", "NCHW512c"]
ltf_arg = autotvm.task.topi_integration.serialize_args(ltf_arg)
ltf_wkl = ('layout_transform',) + autotvm.task.args_to_workload(ltf_arg)
- ltf_keys.append(ltf_wkl)
+ ltf_task = copy.deepcopy(tasks[0])
+ ltf_task.workload = ltf_wkl
+ ms_input = MeasureInput(target=target, task=ltf_task, config=None)
+ ms_output = MeasureResult(costs=(1.91224744e-05,), error_no=0, all_cost=-1, timestamp=-1)
+ ltf_records.append((ms_input, ms_output))
executor = DPTuner(net, {"data": dshape}, records, target_ops, target)
executor.benchmark_layout_transform(layout_records=ltf_records, infer_layout=True)
executor.run()
out = [record[0].config for record in executor.get_optimal_records()]
- expected_out = [records[3][0].config, records[1][0].config, records[2][0].config]
+ expected_out = [records[2][0].config, records[1][0].config]
assert expected_out == out, "Output mismatch: expecting %s but got %s" \
% (str(expected_out), str(out))
executor.benchmark_layout_transform(layout_records=ltf_records, infer_layout=True)
executor.run()
out = [record[0].config for record in executor.get_optimal_records()]
- expected_out = [records[3][0].config, records[1][0].config, records[2][0].config]
+ expected_out = [records[2][0].config, records[1][0].config]
assert expected_out == out, "Output mismatch: expecting %s but got %s" \
% (str(expected_out), str(out))
test_DPTuner_run()
test_PBQPTuner_run()
test_many_sub_graphs()
+ test_tuple()