PoC: dynamic SUTs#1013
Conversation
|
MLCommons CLA bot All contributors have signed the MLCommons CLA ✍️ ✅ |
|
I'd love to see some tests that explain what happens in a few different use cases:
I also have some questions about the way the |
|
@wpietri excellent suggestions.
Test added.
We already have that with a yes-no local sut and a fake sut, which have no external dependencies. Once a dynamic sut can be registered in the sut registry on the fly and instantiated in We don't have tests for benchmark runs with any of the remote suts in the registry, because we'd have to mock those suts functionality, and I don't think it's in the scope of the benchmark runner tests to test those. It may be a good thing to add to a smoke test, however.
These are just bogus suts that can't be registered, so they will fail at that stage, and we have a test for that. |
My goal here isn't just to have a failure, but to have failures that convey the different problems, at least as far as we can detect them. That way the user has a better chance of fixing the mistake. |
bkorycki
left a comment
There was a problem hiding this comment.
This looks great! One thing I'm a little concerned about is the conflation between SUT uids and names.
I think we should either a) go back to when you had a separate argument to pass in dynamic SUT names or b) request dynamic suts at the cli using a structured UID (with hyphens) instead of a name.
I also don't like that typos in SUT uids will be identified as dynamic SUT names and then result in an inaccurate error message (i.e. "couldnt make this dynamic sut" instead of "invalid SUT UID, please use one of the following..")
| return suts | ||
|
|
||
|
|
||
| def register_dynamic_suts(sut_names: List[str]): |
There was a problem hiding this comment.
I think this belongs in modelgauge. That's where we keep SUT-registration code. I would also like to eventually be able to run dynamic suts with the modelgauge CLI (especially run-sut, which is a helpful debugging tool), which would also use this function.
…ity; add guard clause to reject a dynamic sut name if it isn't a huggingface sut name
…d with modelgauge
…fore, to simplify the interface
… UID triggering the display was a test or annotator and not a SUT
As an operator, I want to be able to pass a sensible name for a SUT that isn't registered to modelgauge or modelbench
Modelgauge and modelbench should try to create a new SUT from that name and run the requested job with it
So the code doesn't need to be updated whenever we want to add a new SUT that behaves like known SUTs.
Story
Important
This only works with huggingface proxied inference endpoints and serverless together models for now. The dynamic SUT names must be
<vendor>/<model>:<provider>:hfrelay:<date>UID spec
e.g.
google/gemma-3-27b-it:nebius:hfrelay:20250507How To Test Huggingface Proxied Inference Providers
deepseek-ai/DeepSeek-V3is available on several providers (replicate, together, etc).You can test by requesting any one of those:
How To Test Together
Additional Information
SUT IDs And Names Behave The Same Way
You can pass a dynamic SUT name the same way you can pass a known SUT ID.
If you pass in a dynamic SUT name that translates to a known SUT, that's fine, it'll work.
How Do I Find Models With Serverless Providers?
Alternate Providers
If you change
find_alternativetoTrueinhuggingface_sut_maker. HuggingFaceChatCompletionServerlessSUTFactory.findthen the program will automatically look for the same model on a different serverless provider, if the provider you requested isn't available.Dedicated Endpoints
Those are TBD. The code only turns one on if it already exists and is asleep. It will not create a new one. That's easy to add.