Skip to content

Commit a413610

Browse files
mcremon-metafacebook-github-bot
authored andcommitted
Update OSS flow to call the right APIs (#13967)
Summary: Pull Request resolved: #13967 Reorganize the calls so that we don't run into issues calling `eval()` Reviewed By: zonglinpeng Differential Revision: D81698817
1 parent 19d22ab commit a413610

16 files changed

+88
-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: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010

1111
import logging
1212
import tempfile
13+
import torch
1314

1415
from executorch.backends.cadence.aot.ops_registrations import * # noqa
15-
from typing import Any, Tuple
16+
from typing import Any, Optional, Tuple
1617

1718
from executorch.backends.cadence.aot.compiler import (
19+
_lower_ep_to_cadence_gen_etrecord,
1820
convert_pt2,
19-
export_to_executorch_gen_etrecord,
2021
fuse_pt2,
2122
prepare_pt2,
2223
)
@@ -38,13 +39,12 @@ def export_model(
3839
model: nn.Module,
3940
example_inputs: Tuple[Any, ...],
4041
file_name: str = "CadenceDemoModel",
41-
run_and_compare: bool = True,
42-
eps_error: float = 1e-1,
43-
eps_warn: float = 1e-5,
42+
working_dir: Optional[str] = None,
4443
):
4544
# create work directory for outputs and model binary
46-
working_dir = tempfile.mkdtemp(dir="/tmp")
47-
logging.debug(f"Created work directory {working_dir}")
45+
if working_dir is None:
46+
working_dir = tempfile.mkdtemp(dir="/tmp")
47+
logging.debug(f"Created work directory {working_dir}")
4848

4949
# Instantiate the quantizer
5050
quantizer = CadenceDefaultQuantizer()
@@ -66,9 +66,11 @@ def export_model(
6666
# the one used in prepare_and_convert_pt2)
6767
quantized_model = fuse_pt2(converted_model, quantizer)
6868

69+
ep = torch.export.export(quantized_model, example_inputs, strict=True)
70+
6971
# 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
72+
exec_prog: ExecutorchProgramManager = _lower_ep_to_cadence_gen_etrecord(
73+
ep, output_dir=working_dir
7274
)
7375

7476
logging.info("Final exported graph:\n")
@@ -92,13 +94,24 @@ def export_model(
9294
f"Executorch bundled program buffer saved to {file_name} is {len(buffer)} total bytes"
9395
)
9496

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

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)