Skip to content

Commit 2517376

Browse files
authored
Update OSS flow to call the right APIs
Differential Revision: D81698817 Pull Request resolved: #13967
1 parent 7e76ba2 commit 2517376

16 files changed

+89
-52
lines changed

backends/cadence/aot/compiler.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,6 @@ def quantize_and_export_to_cadence(
388388
)
389389

390390

391-
# Export the model and lower it to an EdgeProgramManager (in edge IR), and
392-
# apply passes specific to Cadence DSP execution. Return both to print the
393-
# differences.
394391
def export_to_executorch_gen_etrecord(
395392
model: torch.nn.Module,
396393
inputs: tuple[object, ...],
@@ -402,7 +399,33 @@ def export_to_executorch_gen_etrecord(
402399
memory_config: Optional[MemoryConfig] = None,
403400
dump_graphs: bool = False,
404401
) -> ExecutorchProgramManager:
405-
edge_prog_manager = export_to_edge(model, inputs, dump_graphs)
402+
ep = torch.export.export(model, inputs, strict=True)
403+
return _lower_ep_to_cadence_gen_etrecord(
404+
ep,
405+
output_dir=output_dir,
406+
opt_level=opt_level,
407+
mem_algo=mem_algo,
408+
alloc_graph_input=alloc_graph_input,
409+
alloc_graph_output=alloc_graph_output,
410+
memory_config=memory_config,
411+
dump_graphs=dump_graphs,
412+
)
413+
414+
415+
# Export the model and lower it to an EdgeProgramManager (in edge IR), and
416+
# apply passes specific to Cadence DSP execution. Return both to print the
417+
# differences.
418+
def _lower_ep_to_cadence_gen_etrecord(
419+
ep: ExportedProgram,
420+
output_dir: Optional[str] = None,
421+
opt_level: int = 1,
422+
mem_algo: int = 0,
423+
alloc_graph_input: bool = True,
424+
alloc_graph_output: bool = True,
425+
memory_config: Optional[MemoryConfig] = None,
426+
dump_graphs: bool = False,
427+
) -> ExecutorchProgramManager:
428+
edge_prog_manager = _lower_ep_to_edge(ep, dump_graphs)
406429
cadence_prog_manager = apply_exir_ops_passes(opt_level, edge_prog_manager)
407430

408431
# Print some information to terminal

backends/cadence/aot/export_example.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
import logging
1212
import tempfile
1313

14+
import torch
15+
1416
from executorch.backends.cadence.aot.ops_registrations import * # noqa
15-
from typing import Any, Tuple
17+
from typing import Any, Optional, Tuple
1618

1719
from executorch.backends.cadence.aot.compiler import (
20+
_lower_ep_to_cadence_gen_etrecord,
1821
convert_pt2,
19-
export_to_executorch_gen_etrecord,
2022
fuse_pt2,
2123
prepare_pt2,
2224
)
@@ -38,13 +40,12 @@ def export_model(
3840
model: nn.Module,
3941
example_inputs: Tuple[Any, ...],
4042
file_name: str = "CadenceDemoModel",
41-
run_and_compare: bool = True,
42-
eps_error: float = 1e-1,
43-
eps_warn: float = 1e-5,
43+
working_dir: Optional[str] = None,
4444
):
4545
# create work directory for outputs and model binary
46-
working_dir = tempfile.mkdtemp(dir="/tmp")
47-
logging.debug(f"Created work directory {working_dir}")
46+
if working_dir is None:
47+
working_dir = tempfile.mkdtemp(dir="/tmp")
48+
logging.debug(f"Created work directory {working_dir}")
4849

4950
# Instantiate the quantizer
5051
quantizer = CadenceDefaultQuantizer()
@@ -66,9 +67,11 @@ def export_model(
6667
# the one used in prepare_and_convert_pt2)
6768
quantized_model = fuse_pt2(converted_model, quantizer)
6869

70+
ep = torch.export.export(quantized_model, example_inputs, strict=True)
71+
6972
# Get edge program after Cadence specific passes
70-
exec_prog: ExecutorchProgramManager = export_to_executorch_gen_etrecord(
71-
quantized_model, example_inputs, output_dir=working_dir
73+
exec_prog: ExecutorchProgramManager = _lower_ep_to_cadence_gen_etrecord(
74+
ep, output_dir=working_dir
7275
)
7376

7477
logging.info("Final exported graph:\n")
@@ -92,13 +95,24 @@ def export_model(
9295
f"Executorch bundled program buffer saved to {file_name} is {len(buffer)} total bytes"
9396
)
9497

95-
# TODO: move to test infra
96-
if run_and_compare:
97-
runtime.run_and_compare(
98-
executorch_prog=exec_prog,
99-
inputs=example_inputs,
100-
ref_outputs=ref_outputs,
101-
working_dir=working_dir,
102-
eps_error=eps_error,
103-
eps_warn=eps_warn,
104-
)
98+
99+
def export_and_run_model(
100+
model: nn.Module,
101+
example_inputs: Tuple[Any, ...],
102+
file_name: str = "CadenceDemoModel",
103+
eps_error: float = 1e-1,
104+
eps_warn: float = 1e-5,
105+
):
106+
# create work directory for outputs and model binary
107+
working_dir = tempfile.mkdtemp(dir="/tmp")
108+
logging.debug(f"Created work directory {working_dir}")
109+
exec_prog = export_model(model, example_inputs, file_name, working_dir)
110+
ref_outputs = model(*example_inputs)
111+
runtime.run_and_compare(
112+
executorch_prog=exec_prog,
113+
inputs=example_inputs,
114+
ref_outputs=ref_outputs,
115+
working_dir=working_dir,
116+
eps_error=eps_error,
117+
eps_warn=eps_warn,
118+
)

examples/cadence/models/babyllama.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import torch
1414

15-
from executorch.backends.cadence.aot.export_example import export_model
15+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1616

1717
from executorch.examples.models.llama.llama_transformer import ModelArgs, Transformer
1818

@@ -35,7 +35,7 @@ def main() -> None:
3535
model = Transformer(args)
3636
example_inputs = (torch.randint(0, 10, [b, seq], dtype=torch.int64),)
3737

38-
export_model(model, example_inputs)
38+
export_and_run_model(model, example_inputs)
3939

4040

4141
if __name__ == "__main__":

examples/cadence/models/mobilenet_v2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from executorch.backends.cadence.aot.ops_registrations import * # noqa
1414

1515

16-
from executorch.backends.cadence.aot.export_example import export_model
16+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1717
from torchvision.models import mobilenet_v2, MobileNet_V2_Weights
1818

1919

@@ -27,4 +27,4 @@
2727
model.eval()
2828
example_inputs = (torch.randn(1, 3, 64, 64),)
2929

30-
export_model(model, example_inputs)
30+
export_and_run_model(model, example_inputs)

examples/cadence/models/resnet18.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from executorch.backends.cadence.aot.ops_registrations import * # noqa
1414

1515

16-
from executorch.backends.cadence.aot.export_example import export_model
16+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1717
from torchvision.models import resnet18, ResNet18_Weights
1818

1919

@@ -27,4 +27,4 @@
2727
model.eval()
2828
example_inputs = (torch.randn(1, 3, 64, 64),)
2929

30-
export_model(model, example_inputs)
30+
export_and_run_model(model, example_inputs)

examples/cadence/models/resnet50.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from executorch.backends.cadence.aot.ops_registrations import * # noqa
1414

1515

16-
from executorch.backends.cadence.aot.export_example import export_model
16+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1717
from torchvision.models import resnet50, ResNet50_Weights
1818

1919

@@ -27,4 +27,4 @@
2727
model.eval()
2828
example_inputs = (torch.randn(1, 3, 64, 64),)
2929

30-
export_model(model, example_inputs)
30+
export_and_run_model(model, example_inputs)

examples/cadence/models/rnnt_encoder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from typing import List, Optional, Tuple
1616

17-
from executorch.backends.cadence.aot.export_example import export_model
17+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1818
from torchaudio.prototype.models import ConvEmformer
1919

2020

@@ -157,4 +157,4 @@ def infer(
157157
transcriber_lengths,
158158
)
159159

160-
export_model(encoder, example_inputs)
160+
export_and_run_model(encoder, example_inputs)

examples/cadence/models/rnnt_joiner.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from typing import Tuple
1616

17-
from executorch.backends.cadence.aot.export_example import export_model
17+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1818

1919

2020
FORMAT = "[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s"
@@ -62,4 +62,4 @@ def forward(
6262
target_encodings,
6363
)
6464

65-
export_model(model, example_inputs)
65+
export_and_run_model(model, example_inputs)

examples/cadence/models/rnnt_predictor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from typing import Tuple
1616

17-
from executorch.backends.cadence.aot.export_example import export_model
17+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1818

1919

2020
FORMAT = "[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s"
@@ -66,4 +66,4 @@ def forward(
6666
predictor_lengths,
6767
)
6868

69-
export_model(model, example_inputs)
69+
export_and_run_model(model, example_inputs)

examples/cadence/models/vision_transformer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import torch
1414
import torchvision
1515

16-
from executorch.backends.cadence.aot.export_example import export_model
16+
from executorch.backends.cadence.aot.export_example import export_and_run_model
1717

1818

1919
FORMAT = "[%(levelname)s %(asctime)s %(filename)s:%(lineno)s] %(message)s"
@@ -25,4 +25,4 @@
2525
model = torchvision.models.vit_b_16()
2626
example_inputs = (torch.randn(1, 3, 224, 224),)
2727

28-
export_model(model, example_inputs)
28+
export_and_run_model(model, example_inputs)

0 commit comments

Comments
 (0)