Skip to content

Commit 0521c46

Browse files
authored
Better side-by-side (#306)
* Better side-by-side * fix command lien * last changes * small changes
1 parent e8dcd00 commit 0521c46

File tree

4 files changed

+258
-180
lines changed

4 files changed

+258
-180
lines changed

CHANGELOGS.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Change Logs
44
0.8.3
55
+++++
66

7-
* :pr:`304`: improves side-by-side comparison
7+
* :pr:`304`, :pr:`306`: improves side-by-side comparison
88

99
0.8.2
1010
+++++

_unittests/ut_torch_onnx/test_sbs.py

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
)
1111
from onnx_diagnostic.reference import ExtendedReferenceEvaluator, OnnxruntimeEvaluator
1212
from onnx_diagnostic.torch_export_patches.patch_inputs import use_dyn_not_str
13-
from onnx_diagnostic.torch_onnx.sbs import run_aligned, post_process_run_aligned_obs
13+
from onnx_diagnostic.torch_onnx.sbs import run_aligned, RunAlignedRecord
1414
from onnx_diagnostic.export.api import to_onnx
1515

1616

@@ -21,6 +21,24 @@ def setUpClass(cls):
2121

2222
cls.torch = torch
2323

24+
def test_run_aligned_record(self):
25+
r = RunAlignedRecord(
26+
ep_id_node=-1,
27+
onnx_id_node=-1,
28+
ep_name="A",
29+
onnx_name="B",
30+
ep_target="C",
31+
onnx_op_type="D",
32+
shape_type="E",
33+
err_abs=0.1,
34+
err_rel=0.2,
35+
err_dev=0.3,
36+
err_nan=0.4,
37+
)
38+
sr = str(r)
39+
self.assertIn("RunAlignedRecord(", sr)
40+
self.assertIn("shape_type='E'", sr)
41+
2442
@hide_stdout()
2543
@unittest.skipIf(to_onnx is None, "to_onnx not installed")
2644
@ignore_errors(OSError) # connectivity issues
@@ -48,7 +66,7 @@ def forward(self, x):
4866
run_cls=ExtendedReferenceEvaluator,
4967
atol=1e-5,
5068
rtol=1e-5,
51-
verbose=1,
69+
verbose=10,
5270
),
5371
)
5472
self.assertEqual(len(results), 7)
@@ -83,7 +101,7 @@ def forward(self, x):
83101
run_cls=ExtendedReferenceEvaluator,
84102
atol=1e-5,
85103
rtol=1e-5,
86-
verbose=1,
104+
verbose=10,
87105
),
88106
)
89107
self.assertEqual(len(results), 6)
@@ -115,7 +133,7 @@ def forward(self, x):
115133
run_cls=ExtendedReferenceEvaluator,
116134
atol=1e-5,
117135
rtol=1e-5,
118-
verbose=1,
136+
verbose=10,
119137
),
120138
)
121139
self.assertEqual(len(results), 6)
@@ -182,7 +200,6 @@ def forward(self, x):
182200
),
183201
)
184202
self.assertEqual(len(results), 8)
185-
self.clean_dump()
186203

187204
@hide_stdout()
188205
@ignore_warnings((DeprecationWarning, FutureWarning, UserWarning))
@@ -285,7 +302,10 @@ def forward(self, x):
285302
),
286303
)
287304
self.assertEqual(len(results), 14)
288-
self.assertEqual([r[-1].get("dev", 0) for r in results], [0] * 14)
305+
self.assertEqual(
306+
[r.err_dev for r in results],
307+
[None, None, None, None, None, None, None, None, 0, 0, 0, 0, 0, 0],
308+
)
289309

290310
@hide_stdout()
291311
@ignore_warnings((DeprecationWarning, FutureWarning, UserWarning))
@@ -323,25 +343,32 @@ def forward(self, x):
323343
use_tensor=True,
324344
),
325345
)
326-
df = pandas.DataFrame(list(map(post_process_run_aligned_obs, results)))
346+
df = pandas.DataFrame(list(results))
327347
df.to_excel(self.get_dump_file("test_sbs_model_with_weights_custom.xlsx"))
328348
self.assertEqual(
329349
[
330350
"ep_id_node",
331351
"ep_name",
332352
"ep_target",
353+
"ep_time_run",
333354
"err_abs",
334355
"err_dev",
356+
"err_nan",
335357
"err_rel",
336358
"onnx_id_node",
359+
"onnx_id_output",
337360
"onnx_name",
338361
"onnx_op_type",
362+
"onnx_time_run",
339363
"shape_type",
340364
],
341365
sorted(df.columns),
342366
)
343367
self.assertEqual(len(results), 12)
344-
self.assertEqual([r[-1].get("dev", 0) for r in results], [0] * 12)
368+
self.assertEqual(
369+
[r.err_dev for r in results],
370+
[None, None, None, None, None, None, None, None, None, 0, 0, 0],
371+
)
345372
self.assertEqual(
346373
[-1.0, -1.0, -1.0, -1.0, -10.0, -10.0, -10.0, -10.0, -1.0, 0.0, 1.0, 2.0],
347374
df["onnx_id_node"].fillna(-10).tolist(),
@@ -384,25 +411,32 @@ def forward(self, x):
384411
use_tensor=True,
385412
),
386413
)
387-
df = pandas.DataFrame(list(map(post_process_run_aligned_obs, results)))
414+
df = pandas.DataFrame(list(results))
388415
df.to_excel(self.get_dump_file("test_sbs_model_with_weights_dynamo.xlsx"))
389416
self.assertEqual(
390417
[
391418
"ep_id_node",
392419
"ep_name",
393420
"ep_target",
421+
"ep_time_run",
394422
"err_abs",
395423
"err_dev",
424+
"err_nan",
396425
"err_rel",
397426
"onnx_id_node",
427+
"onnx_id_output",
398428
"onnx_name",
399429
"onnx_op_type",
430+
"onnx_time_run",
400431
"shape_type",
401432
],
402433
sorted(df.columns),
403434
)
404435
self.assertEqual(len(results), 12)
405-
self.assertEqual([r[-1].get("dev", 0) for r in results], [0] * 12)
436+
self.assertEqual(
437+
[r.err_dev for r in results],
438+
[None, None, None, None, None, None, None, None, None, 0, 0, 0],
439+
)
406440
self.assertEqual(
407441
[-1.0, -1.0, -1.0, -1.0, -10.0, -10.0, -10.0, -10.0, -1.0, 0.0, 1.0, 2.0],
408442
df["onnx_id_node"].fillna(-10).tolist(),

onnx_diagnostic/_command_lines_parser.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,10 +1114,20 @@ def get_parser_sbs() -> ArgumentParser:
11141114
the exported onnx model. It assumes some names are common.
11151115
The execution of the exported program and the onnx model
11161116
are done in parallel. The device is the one used to store the
1117-
model and the inputs.s
1117+
model and the inputs.
1118+
Where do discrepancies start? This function tries to answer that question.
1119+
"""
1120+
),
1121+
epilog=textwrap.dedent(
1122+
"""
1123+
The command line expects the following files to be saved with
1124+
the following function. inputs is a dictionary of the input of the model.
1125+
1126+
- torch.export.save(ep: torch.export.ExportedProgram)
1127+
- torch.save(**inputs)
1128+
- onnx.save(...)
11181129
"""
11191130
),
1120-
epilog="Where do discrepancies start? This function tries to answer that question.",
11211131
)
11221132
parser.add_argument(
11231133
"-i",
@@ -1169,9 +1179,9 @@ def get_parser_sbs() -> ArgumentParser:
11691179
parser.add_argument(
11701180
"-r",
11711181
"--ratio",
1172-
default=5,
1182+
default=100,
11731183
required=False,
1174-
help="Saves the result in an excel file every <ratio> node.",
1184+
help="Saves the result in an excel file every <ratio> nodes.",
11751185
)
11761186
return parser
11771187

@@ -1180,7 +1190,7 @@ def _cmd_sbs(argv: List[Any]):
11801190
import pandas
11811191
import torch
11821192
from .helpers import string_type
1183-
from .torch_onnx.sbs import run_aligned, post_process_run_aligned_obs
1193+
from .torch_onnx.sbs import run_aligned
11841194
from .reference import OnnxruntimeEvaluator
11851195

11861196
parser = get_parser_sbs()
@@ -1241,13 +1251,20 @@ def _size(name):
12411251
use_tensor=True,
12421252
exc=False,
12431253
):
1244-
pobs = post_process_run_aligned_obs(obs)
1245-
data.append(pobs)
1246-
if "initializer" not in pobs and "placeholder" not in pobs and len(data) % ratio == 0:
1247-
df = pandas.DataFrame(data)
1254+
data.append(obs)
1255+
if (
1256+
obs.onnx_op_type != "initializer"
1257+
and obs.ep_target != "placeholder"
1258+
and len(data) % ratio == 0
1259+
):
1260+
df = pandas.DataFrame(data).apply(
1261+
lambda col: col.fillna("") if col.dtype == "object" else col
1262+
)
12481263
df.to_excel(args.output)
12491264
print(f"-- final saves into {args.output!r}")
1250-
df = pandas.DataFrame(data)
1265+
df = pandas.DataFrame(data).apply(
1266+
lambda col: col.fillna("") if col.dtype == "object" else col
1267+
)
12511268
df.to_excel(args.output)
12521269
print("-- done")
12531270

0 commit comments

Comments
 (0)