NDIF support: probe, findings, and upstream fix - #2
Open
elliottower wants to merge 1 commit into
Open
elliottower wants to merge 1 commit into
elliottower wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Can the model panel run on NDIF instead of rented GPUs? Short answer: not today, and the reason is worth recording.
scripts/ndif_feasibility/probe_ndif.pyruns eight probes against the live service, each declared as data so the emitted JSON carries its ownrepo_id, input string, hook expression and expected outcome. Results inresults/ndif_feasibility/.What it found
LanguageModel._remoteable_model_keyserializes only{repo_id, revision}, so the server rebuilds every model asAutoModelForCausalLMand no masked LM can be provisioned. Every RNA foundation model is a masked LM.RemoteException: name 'hooked_output' is not defined.Envoy._handle_overloaded_mountsynthesizes a class named<cls>.Preservedper instance — a dot in__name__, never bound in a module, so it cannot be pickled. It fires for any module defining.output, which is every BERT- and ESM-family layer. Decoder-only models never take that path, which is why they work and encoders do not.The control that isolates it: BERT reaches the server through the unmodified path (it registers as
BertLMHeadModel) and fails identically, so the failure is the encoder module tree, not the workaround used to get masked LMs provisioned.Verification
nnsight_repro/test_envoy_overloaded_mount.pyreproduces it offline on two tiny public models in ~14 s, no cluster and no API key.modal_verify_patch.pyinstalls one checkout on Linux and runs identical checks onmainand on a patched branch,mainbeing the negative control.tests/test_tiny.pypasses on bothUpstream
Both fixes are submitted as ndif-team/nnsight#700.
Consequence for the panel
None in the short term — the panel stays on rented GPUs, which is where the
modal_*.pyscripts already run it. Even with remote execution fixed,multimoleculehas to be in the serving image for nine of the models. This is recorded so the question does not get re-litigated from scratch.