Conversation
… worker death
SUT.process_queries (Offline) called LLM.generate(prompt_token_ids=...),
a keyword that newer vLLM releases no longer accept:
TypeError: LLM.generate() got an unexpected keyword argument
'prompt_token_ids'
SUTServer already passes pre-tokenized input as TokensPrompt objects,
which works on both the pinned vllm==0.6.3 and current releases, so the
Offline path now does the same. No change in what is sent to the model.
The TypeError also exposed a second problem: the exception only killed
the worker thread. LoadGen kept waiting for responses that would never
arrive and the run sat idle until the job's wall-clock limit (four hours
in our case) instead of failing. process_queries in both SUTs now wraps
the worker loop, logs the traceback and exits the process, so a broken
SUT fails the run immediately.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
MLCommons CLA bot: |
|
recheck2 |
|
Adjacent finding from running this SUT with a recent vLLM, in case it belongs in this PR.
self.model = LLM(
self.model_path,
dtype=self.dtype,
tensor_parallel_size=self.tensor_parallel_size,
)so it inherits the vLLM default, which is now on: This is not only nominal. A full Offline run on this SUT logged real cross-query reuse:
Prefix caching reuses blocks across queries by design, so a nonzero hit rate means blocks are being reused outside the batch that produced them. Line 459 ("caching of any other queries, query parameters, or intermediate results is prohibited") and line 542 point the same way. Older vLLM defaulted this off, so the reference implementation was compliant when it was written. The default flipped with the V1 engine, and the SUT inherits whatever the installed version does. That makes compliance depend on the vLLM version rather than on the reference code. If it fits the scope here, one line makes it explicit: self.model = LLM(
self.model_path,
dtype=self.dtype,
tensor_parallel_size=self.tensor_parallel_size,
enable_prefix_caching=False,
)
I have not confirmed how the working group reads this for prefix caching specifically; the rule text above is the closest thing I found. Happy to open a separate issue instead if that is the better place. |
Problem
SUT.process_queries(Offline) inlanguage/llama3.1-8b/SUT_VLLM.pycallsprompt_token_ids=was a deprecated keyword that newer vLLM releases no longer accept. On vLLM 0.10.2 (NGCvllm:25.10-py3):SUTServeralready passes pre-tokenized input asTokensPromptobjects, which works on both the pinnedvllm==0.6.3and current releases; only the Offline path was left on the old form.The exception also exposed a second problem: it only killed the worker thread. LoadGen kept waiting for responses that would never arrive and the run sat idle until the job's wall-clock limit — four hours in our case — instead of failing.
Changes
[TokensPrompt(prompt_token_ids=...) for q in qitem]and passes it positionally, exactly asSUTServerdoes. Same tokens reach the model; no behavioural change on 0.6.3.process_queriesin both SUTs now wraps the worker loop: on an unhandled exception it logs the traceback andos._exit(1)s, so a broken SUT fails the run immediately instead of hanging LoadGen. If maintainers would rather keep the harness hands-off here, the first change stands alone.Verification
nvidia/Llama-3.1-8B-Instruct-NVFP4) with the equivalent patch —generate([{"prompt_token_ids": ids}, …]), i.e. the same dictTokensPromptconstructs: performanceVALID, accuracy run completes and passes all five evaluation metrics (ROUGE1/2/L/Lsum and gen_len above the 99% thresholds). The fail-fast wrapper was exercised only by the original TypeError run, where the thread died and LoadGen waited four hours.python -m py_compileandautopep8 -a --max-line-length 79clean. I could not exercisevllm==0.6.3itself, butTokensPrompthas existed since 0.4.x and is whatSUTServeralready uses on that version.Related: #2341 (Server/SingleStream
EngineDeadError) is a different failure in the same file and is not addressed here.🤖 Generated with Claude Code