-
Notifications
You must be signed in to change notification settings - Fork 73
Revise SVR dataset scope and address uncaught errors #208
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
80ec38e
0ce10ea
1e7ae9e
bcf452a
9f1742e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -65,22 +65,31 @@ def enrich_metrics( | |||||
| """Transforms raw performance and other results into aggregated metrics""" | ||||||
| # time metrics | ||||||
| res = bench_result.copy() | ||||||
| mean, std = box_filter(res["time[ms]"]) | ||||||
| if include_performance_stability_metrics: | ||||||
| if isinstance(res["time[ms]"], list): | ||||||
| mean, std = box_filter(res["time[ms]"]) | ||||||
| if include_performance_stability_metrics: | ||||||
| res.update( | ||||||
| { | ||||||
| "1st run time[ms]": res["time[ms]"][0], | ||||||
| "1st-mean run ratio": res["time[ms]"][0] / mean, | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is it possible to have mean == 0 here?
Suggested change
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If the mean runtime is 0 then we have larger problems than a divide by zero. But I did not update the logic here (see main branch), the diff only shows because I added an additional condition ( |
||||||
| } | ||||||
| ) | ||||||
| res.update( | ||||||
| { | ||||||
| "1st run time[ms]": res["time[ms]"][0], | ||||||
| "1st-mean run ratio": res["time[ms]"][0] / mean, | ||||||
| "time[ms]": mean, | ||||||
| "time CV": std / mean, # Coefficient of Variation | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's very confusing to have a measurement called "time CV" reflecting the coefficient of variation when we also have procedures doing cross validation there. Also note that this is not actually the coefficient of variation due to the "boxed" methodology. Perhaps could output just the standard deviation and name it 'std[ms]'. Or otherwise maybe could name it "std to mean (ratio)".
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't disagree with you, in fact for the large-scale branch that we have for multi-gpu we use std instead of CV. But I suggest revising this in a different PR as I did not change the logic here - the only reason the diff shows is because there was a condition added. Scope of this PR is resolving slowdowns/errors/failures and improving stability of CI jobs. |
||||||
| } | ||||||
| ) | ||||||
| res.update( | ||||||
| { | ||||||
| "time[ms]": mean, | ||||||
| "time CV": std / mean, # Coefficient of Variation | ||||||
| } | ||||||
| ) | ||||||
| else: | ||||||
| # already aggregated (e.g. from a baseline file) | ||||||
| mean = res["time[ms]"] | ||||||
| std = res.get("time std[ms]", 0.0) | ||||||
| if mean != 0: | ||||||
| res["time CV"] = std / mean | ||||||
| else: | ||||||
| res["time CV"] = 0.0 | ||||||
| cost = res.get("cost[microdollar]", None) | ||||||
| if cost: | ||||||
| if cost and isinstance(cost, list): | ||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What happens if cost is not a list? |
||||||
| res["cost[microdollar]"] = box_filter(res["cost[microdollar]"])[0] | ||||||
| batch_size = res.get("batch_size", None) | ||||||
| if batch_size: | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For which cases do we need this? Should we show a warning in case we can't convert to dense?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this was necessary in the case where x was already dense (ie no longer a sparse array) and thus did not have a todense() attribute function. But I can take a closer look.