Fix slow decodes "poisoning" sleep times when using power throttling#464
Open
omnomburp wants to merge 2 commits into
Open
Fix slow decodes "poisoning" sleep times when using power throttling#464omnomburp wants to merge 2 commits into
omnomburp wants to merge 2 commits into
Conversation
…average Replace the decode power-throttle EMA plus warmup/outlier-cap heuristics with the median of the last 16 token times kept in a fixed ring buffer. A decode token can stall for reasons unrelated to steady-state work: scheduler preemption, first-touch page faults, GPU clock ramps after the throttle's own sleeps, or SSD expert streaming when enabled. Such one-off stalls previously inflated the average and the sleeps applied to the fast tokens that follow. The warmup only protected the first tokens of a graph's lifetime, and the 4x cap still let a burst of slow tokens ratchet the average up at every request. The median is unmoved by up to 7 slow samples out of 16, needs no warmup or tunables, and still adopts a genuine sustained slowdown once it fills half the window. The window is a power of two so the ring index is a mask; with an even count the upper middle sample is used, erring toward slightly longer sleeps and staying under the power target.
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.
When using
--power <number>, decode could slow down dramatically after prefill(~0.11 tok/s observed) even though unthrottled decode was normal.
The throttle used the first decode timing samples immediately to seed its EMA and
sleep duration. If those first samples were cold/outliers, the resulting long
sleeps could keep the GPU cold and reinforce the slow decode loop.
This change skips sleeping for the first few decode evals, uses the fastest
warmup sample to seed the decode average, and caps later outlier samples relative
to the current average.