-
Notifications
You must be signed in to change notification settings - Fork 9
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
582 Add ability to model load values used by LB strategies #897
Conversation
I think the key thing I want to push through with this is a relatively straighforward way for application code to interpose a different model, so that we can do as much experimentation as possible without crossing the streams of modifying and recompiling both vt and application code. |
A couple models that it may make sense to bake into vt as generic facilities are |
Codecov Report
@@ Coverage Diff @@
## develop #897 +/- ##
===========================================
+ Coverage 82.79% 82.90% +0.10%
===========================================
Files 356 361 +5
Lines 11232 11333 +101
===========================================
+ Hits 9300 9396 +96
- Misses 1932 1937 +5
|
2eb887a
to
491026e
Compare
I've overhauled the API to I think rationalize responsibilities between user code and the runtime system, and leave models and strategies relatively testable in isolation, without crazy inter-dependencies. One thing that's niggling at me is the local vs collective nature of the models. I think we need to define them collectively, and possible ensure that at least some calls to them are made similarly. |
On the hypothesis that we may want to implement models that communicate to set up their predictions (e.g. to compute global covariance or other such statistics), I have the updating step in a separate global epoch before LBManager calls the strategy that may depend on the model's output. |
One thing that's not really considered in the present design is composition across multiple collections, and collections coming from multiple parts of an application. In some respects, load modeling is a global concern that should be configured at the whole-application/job level. In others, part of the expected benefit of load modeling is being able to import knowledge specific to individual collections into the otherwise oblivious LB system. I don't have a clear idea of how to resolve that tension yet. One possibility that I've been turning over in my head is whether load models should not be one-off, but rather more of a compositional design. For instance, de-noising might consider some history, and provide an adjusted retrospective load, which would then make a more solid base for a prediction. |
Per discussion, possibly replace |
I should write up some test cases for the various models provided. |
afda0ed
to
17c9c6b
Compare
Overall, this looks like a good direction to me. There is some missing documentation on what these actually do. Also, I'm not sure how the user can control them. Does this solve the problem of multiple collections with different models? |
Users can control them by constructing their own instances, either of a provided type or one they've defined, and passing it to
I just started implementing a |
Have a look at the commented out bits in |
b7241e8
to
7f086ed
Compare
@PhilMiller Take a look at the test I just finished A few things:
auto model = theLBManager()->getLoadModel();
for (auto&& obj : *model) { }
|
…meant for conversions
dc4b3f9
to
24f93c7
Compare
Here is an overview of what got changed by this pull request: Clones added
============
- src/vt/vrt/collection/balance/proc_stats.cc 2
- src/vt/vrt/collection/balance/model/per_collection.h 1
- src/vt/vrt/collection/balance/model/composed_model.h 1
See the complete overview on Codacy |
Fixes: #582