|
14 | 14 | import numpy as np |
15 | 15 | import platform |
16 | 16 | import base64 |
17 | | -from graph_net_bench.torch.backend.graph_compiler_backend import GraphCompilerBackend |
18 | | -from graph_net_bench.torch.backend.tvm_backend import TvmBackend |
19 | | -from graph_net_bench.torch.backend.flagtree_backend import FlagtreeBackend |
20 | | -from graph_net_bench.torch.backend.xla_backend import XlaBackend |
21 | | -from graph_net_bench.torch.backend.inductor_backend import InductorBackend |
22 | | -from graph_net_bench.torch.backend.tensorrt_backend import TensorRTBackend |
23 | | -from graph_net_bench.torch.backend.blade_disc_backend import BladeDISCBackend |
24 | | -from graph_net_bench.torch.backend.nope_backend import NopeBackend |
25 | | -from graph_net_bench.torch.backend.pass_mgr_backend import PassMgrBackend |
26 | | -from graph_net_bench.torch.backend.unstable_to_stable_backend import ( |
27 | | - UnstableToStableBackend, |
28 | | -) |
29 | | -from graph_net_bench.torch.backend.range_decomposer_validator_backend import ( |
30 | | - RangeDecomposerValidatorBackend, |
31 | | -) |
32 | | -from graph_net_bench.torch.backend.graph_variable_renamer_validator_backend import ( |
33 | | - GraphVariableRenamerValidatorBackend, |
34 | | -) |
35 | | -from graph_net_bench.torch.backend.tilelang_backend import TilelangBackend |
36 | 17 | from graph_net_bench import test_compiler_util |
37 | 18 | from graph_net_bench import path_utils |
38 | 19 |
|
39 | 20 |
|
40 | | -compiler_backend_name2class = { |
41 | | - "tvm": TvmBackend, |
42 | | - "flagtree": FlagtreeBackend, |
43 | | - "xla": XlaBackend, |
44 | | - "inductor": InductorBackend, |
45 | | - "tensorrt": TensorRTBackend, |
46 | | - "bladedisc": BladeDISCBackend, |
47 | | - "nope": NopeBackend, |
48 | | - "pass_mgr": PassMgrBackend, |
49 | | - "unstable_to_stable": UnstableToStableBackend, |
50 | | - "range_decomposer_validator": RangeDecomposerValidatorBackend, |
51 | | - "graph_variable_renamer_validator": GraphVariableRenamerValidatorBackend, |
52 | | - "tilelang": TilelangBackend, |
53 | | -} |
| 21 | +def _get_backend_class(name): |
| 22 | + from graph_net_bench.torch.backend.tvm_backend import TvmBackend |
| 23 | + from graph_net_bench.torch.backend.flagtree_backend import FlagtreeBackend |
| 24 | + from graph_net_bench.torch.backend.xla_backend import XlaBackend |
| 25 | + from graph_net_bench.torch.backend.inductor_backend import InductorBackend |
| 26 | + from graph_net_bench.torch.backend.tensorrt_backend import TensorRTBackend |
| 27 | + from graph_net_bench.torch.backend.blade_disc_backend import BladeDISCBackend |
| 28 | + from graph_net_bench.torch.backend.nope_backend import NopeBackend |
| 29 | + from graph_net_bench.torch.backend.pass_mgr_backend import PassMgrBackend |
| 30 | + from graph_net_bench.torch.backend.unstable_to_stable_backend import ( |
| 31 | + UnstableToStableBackend, |
| 32 | + ) |
| 33 | + from graph_net_bench.torch.backend.range_decomposer_validator_backend import ( |
| 34 | + RangeDecomposerValidatorBackend, |
| 35 | + ) |
| 36 | + from graph_net_bench.torch.backend.graph_variable_renamer_validator_backend import ( |
| 37 | + GraphVariableRenamerValidatorBackend, |
| 38 | + ) |
| 39 | + from graph_net_bench.torch.backend.tilelang_backend import TilelangBackend |
| 40 | + |
| 41 | + compiler_backend_name2class = { |
| 42 | + "tvm": TvmBackend, |
| 43 | + "flagtree": FlagtreeBackend, |
| 44 | + "xla": XlaBackend, |
| 45 | + "inductor": InductorBackend, |
| 46 | + "tensorrt": TensorRTBackend, |
| 47 | + "bladedisc": BladeDISCBackend, |
| 48 | + "nope": NopeBackend, |
| 49 | + "pass_mgr": PassMgrBackend, |
| 50 | + "unstable_to_stable": UnstableToStableBackend, |
| 51 | + "range_decomposer_validator": RangeDecomposerValidatorBackend, |
| 52 | + "graph_variable_renamer_validator": GraphVariableRenamerValidatorBackend, |
| 53 | + "tilelang": TilelangBackend, |
| 54 | + } |
| 55 | + assert name in compiler_backend_name2class, f"Unknown compiler: {name}" |
| 56 | + return compiler_backend_name2class[name] |
54 | 57 |
|
55 | 58 |
|
56 | 59 | def set_seed(random_seed): |
@@ -111,11 +114,8 @@ def convert_to_dict(config_str): |
111 | 114 | return config |
112 | 115 |
|
113 | 116 |
|
114 | | -def get_compiler_backend(args) -> GraphCompilerBackend: |
115 | | - assert ( |
116 | | - args.compiler in compiler_backend_name2class |
117 | | - ), f"Unknown compiler: {args.compiler}" |
118 | | - backend_class = compiler_backend_name2class[args.compiler] |
| 117 | +def get_compiler_backend(args): |
| 118 | + backend_class = _get_backend_class(args.compiler) |
119 | 119 | config = convert_to_dict(args.config) if args.config is not None else {} |
120 | 120 | return backend_class(config) |
121 | 121 |
|
@@ -167,18 +167,16 @@ def measure_performance(model_call, args, compiler): |
167 | 167 | gpu_times = [] |
168 | 168 |
|
169 | 169 | for i in range(args.trials): |
| 170 | + # GPU-only timing (CUDA Events) |
| 171 | + start_event = torch.cuda.Event(enable_timing=True) |
| 172 | + end_event = torch.cuda.Event(enable_timing=True) |
| 173 | + |
170 | 174 | # End-to-end timing (naive_timer) |
171 | 175 | duration_box = test_compiler_util.DurationBox(-1) |
172 | 176 | with test_compiler_util.naive_timer(duration_box, compiler.synchronize): |
173 | | - # GPU-only timing (CUDA Events) |
174 | | - start_event = torch.cuda.Event(enable_timing=True) |
175 | | - end_event = torch.cuda.Event(enable_timing=True) |
176 | 177 | start_event.record() |
177 | | - |
178 | 178 | model_call() |
179 | | - |
180 | 179 | end_event.record() |
181 | | - compiler.synchronize() |
182 | 180 |
|
183 | 181 | gpu_time_ms = start_event.elapsed_time(end_event) |
184 | 182 | e2e_times.append(duration_box.value) |
|
0 commit comments