Skip to content

Commit 8ffa797

Browse files
committed
migrate etrecord generation after to_edge_transform_and_lower to new infra
Differential Revision: [D79420502](https://our.internmc.facebook.com/intern/diff/D79420502/) [ghstack-poisoned]
1 parent e4caad5 commit 8ffa797

File tree

6 files changed

+15
-26
lines changed

6 files changed

+15
-26
lines changed

backends/qualcomm/tests/utils.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
# This source code is licensed under the BSD-style license found in the
55
# LICENSE file in the root directory of this source tree.
66
import collections
7-
import copy
87
import os
98
import subprocess
109
import tempfile
@@ -30,7 +29,7 @@
3029
get_soc_to_chipset_map,
3130
to_edge_transform_and_lower_to_qnn,
3231
)
33-
from executorch.devtools import generate_etrecord, Inspector
32+
from executorch.devtools import Inspector
3433
from executorch.devtools.inspector._inspector_utils import TimeScale
3534
from executorch.examples.qualcomm.utils import (
3635
generate_inputs,
@@ -475,11 +474,9 @@ def lower_module_and_test_output(
475474
skip_node_id_set=skip_node_id_set,
476475
skip_node_op_set=skip_node_op_set,
477476
skip_mutable_buffer=skip_mutable_buffer,
477+
generate_etrecord=self.enable_profile,
478478
)
479479

480-
# this is needed for the ETRecord as lowering modifies the graph in-place
481-
edge_copy = copy.deepcopy(delegated_program)
482-
483480
exec_prog = delegated_program.to_executorch(
484481
exir.ExecutorchBackendConfig(
485482
# For shared buffer, user must pass the memory address
@@ -506,7 +503,7 @@ def lower_module_and_test_output(
506503

507504
etrecord_path = "etrecord.bin"
508505
if self.enable_profile:
509-
generate_etrecord(etrecord_path, edge_copy, exec_prog)
506+
exec_prog.get_etrecord().save(etrecord_path)
510507
# Check numerics
511508
if (
512509
assert_output_equal

backends/qualcomm/utils/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ def to_edge_transform_and_lower_to_qnn(
334334
skip_node_id_set: Optional[set] = None,
335335
skip_node_op_set: Optional[set] = None,
336336
skip_mutable_buffer: bool = False,
337+
generate_etrecord: bool = False,
337338
) -> EdgeProgramManager:
338339
"""
339340
Transforms and lowers a given PyTorch module to the QNN backend.
@@ -442,6 +443,7 @@ def ensure_graph_specific_dict(value, graph_names):
442443
partitioner=qnn_partitioners,
443444
constant_methods=constant_methods,
444445
compile_config=qnn_edge_config(),
446+
generate_etrecord=generate_etrecord,
445447
)
446448

447449

examples/apple/coreml/scripts/export.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ def main():
223223
pte_base_name = get_pte_base_name(args)
224224
if args.use_partitioner:
225225
model = model.eval()
226-
assert not args.generate_etrecord, "ETRecord is not supported with partitioner"
227226
ep = torch.export.export(
228227
model,
229228
args=example_args,
@@ -234,9 +233,12 @@ def main():
234233
delegated_program = exir.to_edge_transform_and_lower(
235234
ep,
236235
partitioner=[CoreMLPartitioner(compile_specs=compile_specs)],
236+
generate_etrecord=args.generate_etrecord,
237237
)
238238
exec_program = delegated_program.to_executorch()
239239
save_pte_program(exec_program, pte_base_name)
240+
if args.generate_etrecord:
241+
exec_program.get_etrecord().save(f"{pte_base_name}_coreml_etrecord.bin")
240242
if args.run_with_pybindings:
241243
run_with_pybindings(
242244
executorch_program=exec_program,

examples/qualcomm/scripts/export_example.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# pyre-ignore-all-errors
22
import argparse
3-
import copy
43

54
import torch
65
from executorch.backends.qualcomm.quantizer.quantizer import QnnQuantizer
@@ -10,7 +9,6 @@
109
get_soc_to_chipset_map,
1110
to_edge_transform_and_lower_to_qnn,
1211
)
13-
from executorch.devtools import generate_etrecord
1412
from executorch.examples.models import MODEL_NAME_TO_MODEL
1513
from executorch.examples.models.model_factory import EagerModelFactory
1614
from executorch.exir.capture._config import ExecutorchBackendConfig
@@ -107,19 +105,16 @@ def main() -> None:
107105
backend_options=backend_options,
108106
)
109107
delegated_program = to_edge_transform_and_lower_to_qnn(
110-
m, example_inputs, compile_spec
108+
m, example_inputs, compile_spec, generate_etrecord=args.generate_etrecord
111109
)
112110

113-
# this is needed for the ETRecord as lowering modifies the graph in-place
114-
edge_copy = copy.deepcopy(delegated_program)
115-
116111
executorch_program = delegated_program.to_executorch(
117112
config=ExecutorchBackendConfig(extract_delegate_segments=False)
118113
)
119114

120115
if args.generate_etrecord:
121116
etrecord_path = args.output_folder + "etrecord.bin"
122-
generate_etrecord(etrecord_path, edge_copy, executorch_program)
117+
executorch_program.get_etrecord().save(etrecord_path)
123118

124119
save_pte_program(executorch_program, args.model_name, args.output_folder)
125120

examples/qualcomm/util_scripts/gen_etrecord.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import copy
21
import os
32

43
import torch
@@ -10,7 +9,7 @@
109
QcomChipset,
1110
to_edge_transform_and_lower_to_qnn,
1211
)
13-
from executorch.devtools import generate_etrecord, Inspector
12+
from executorch.devtools import Inspector
1413
from executorch.devtools.inspector._inspector_utils import TimeScale
1514
from executorch.examples.qualcomm.utils import (
1615
make_quantizer,
@@ -46,11 +45,9 @@ def main(args):
4645
module=converted,
4746
inputs=sample_input,
4847
compiler_specs=compiler_specs,
48+
generate_etrecord=True,
4949
)
5050

51-
# for inspector API
52-
edge_copy = copy.deepcopy(edge_prog_mgr)
53-
5451
# store pte file
5552
exec_prog = edge_prog_mgr.to_executorch()
5653
with open(f"{pte_filename}.pte", "wb") as f:
@@ -71,7 +68,7 @@ def main(args):
7168

7269
# pull etdump back and display the statistics
7370
adb.pull_etdump(".")
74-
generate_etrecord("etrecord.bin", edge_copy, exec_prog)
71+
exec_prog.get_etrecord().save("etrecord.bin")
7572
inspector = Inspector(
7673
etdump_path="etdump.etdp",
7774
etrecord="etrecord.bin",

examples/xnnpack/aot_compiler.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@
99
# Example script for exporting simple models to flatbuffer
1010

1111
import argparse
12-
import copy
1312
import logging
1413

1514
import torch
1615
from executorch.backends.xnnpack.partition.xnnpack_partitioner import XnnpackPartitioner
17-
from executorch.devtools import generate_etrecord
1816
from executorch.exir import (
1917
EdgeCompileConfig,
2018
ExecutorchBackendConfig,
@@ -103,18 +101,16 @@
103101
_check_ir_validity=False if args.quantize else True,
104102
_skip_dim_order=True, # TODO(T182187531): enable dim order in xnnpack
105103
),
104+
generate_etrecord=args.etrecord is not None,
106105
)
107106
logging.info(f"Exported and lowered graph:\n{edge.exported_program().graph}")
108107

109-
# this is needed for the ETRecord as lowering modifies the graph in-place
110-
edge_copy = copy.deepcopy(edge)
111-
112108
exec_prog = edge.to_executorch(
113109
config=ExecutorchBackendConfig(extract_delegate_segments=False)
114110
)
115111

116112
if args.etrecord is not None:
117-
generate_etrecord(args.etrecord, edge_copy, exec_prog)
113+
edge.get_etrecord().save(args.etrecord)
118114
logging.info(f"Saved ETRecord to {args.etrecord}")
119115

120116
quant_tag = "q8" if args.quantize else "fp32"

0 commit comments

Comments
 (0)