helexa-bench should measure only quiet neurons — and stamp every sample with the contention it saw #298
Open
opened 2026-08-26 14:12:46 +00:00 by grenade
·
0 comments
No Branch/Tag Specified
main
feat/397-replicas
feat/385-acestep-memory
fix/376-models-unhealthy-node
feat/music-surprise-genres
feat/web-decisions-route
fix/cold-load-serialise
fix/music-hide-stale-on-compose
feat/audio-disk-guard
feat/music-studio-ux
fix/cortex-glibc-floor
feat/music-history-sidebar
feat/audio-flac-mp3
feat/393-heartmula-serving
feat/391-heartmula-port
feat/387-acestep-rollout
feat/383-acestep-engine
feat/390-heartmula-fixtures
feat/381-acestep-fixtures
feat/402-music-ui
feat/386-audio-rates
feat/382-audio-job-api
feat/356-systemone-playground
fix/bench-skip-decision-models
feat/341-laya-residency
feat/341-laya-rollout
feat/337-laya-perf
feat/338-neuron-systemone
feat/335-laya-prompt-builder
feat/336-laya-engine
feat/339-laya-lang-detect
feat/338-systemone-surface
feat/334-laya-reference-fixtures
feat/96-mtp-probe
fix/324-qsa-visible-set
feat/310-ple-random-advice
feat/neuron-phase-timing
fix/qwen4-ple-conv-launch-bound
feat/318-per-layer-activation-hop
fix/318-release-host-memory
feat/318-per-model-max-in-flight
fix/318-logits-last-position
fix/318-cached-experts-residency
feat/318-host-source-tensors
feat/318-host-resident-experts
fix/322-cache-telemetry
feat/322-isq-cache
test/323-parity-long-prompt
fix/323-layer-type-alias
fix/323-qsa-scores-in-f32
feat/310-mmap-ngram-table
fix/quant-fallback-match-llamacpp
fix/qwen4-exp-expert-row-width
fix/qwen4-exp-load-reporting-and-pool-trim
fix/320-isq-reachable-and-log-levels
feat/qwen4-exp-quantised-experts
feat/qwen4-exp-expert-bank
feat/qwen4-exp-mtp-head
docs/mtp-wiring-settled
feat/qwen4-exp-snapshot
feat/rustingface-always
feat/qwen4-exp-harness
feat/qwen4-exp-qsa-oracle
feat/qwen4-exp-model
feat/qwen4-exp-decoder
feat/qwen4-exp-linear-attn
feat/qwen4-exp-moe
feat/qwen4-exp-full-attn
feat/qwen4-exp-qsa-indexer
feat/qwen4-exp-config
feat/qwen4-exp-qsa-selection
feat/qwen4-exp-ple-consumption
fix/seed-cutlass-anonymously
feat/qwen4-exp-ple-hashing
fix/seed-cutlass-in-cuda-ci
feat/hf-endpoint-env
feat/qwen4-exp-hyper-connections
feat/qwen4-exp-norm-primitives
fix/alias-test-temp-catalogue-collision
chore/retire-vestigial-reasoning-ladder
fix/context-limit-honours-kv-budget
feat/server-advertised-reasoning-ladder
feat/web-chat-collapsible-working
fix/router-sync-restarts-only-on-settings-change
feat/ci-owns-the-router-config
fix/infra-setup-ships-ratelimit-to-gateway
fix/nginx-preflight-checks-every-grant
fix/restore-max-in-flight-8
fix/retire-qwen36-27b
fix/nginx-sync-must-not-block-cortex-deploy
feat/nginx-search-alias-and-sync
fix/wire-surface-in-neuron-spans
fix/295-ignore-tiny-prefill-samples
fix/300-anthropic-streaming-thinking
fix/300-return-the-models-reasoning
feat/operator-repetition-knobs
fix/292-prefix-cache-budget
feat/stamp-preserve-thinking-state
fix/296-one-step-one-assistant-turn
feat/preserve-thinking-ab-gate
fix/client-capability-misattributions
fix/291-max-in-flight-and-config-only-ci
feat/290-reasoning-rungs-from-the-model
fix/284-gdn-state-f32
feat/bench-measurement-regimes
feat/285-nonstreaming-through-engine
fix/288-bench-authenticates
feat/283-operator-sampling-override
fix/286-clippy-all-targets
fix/replay-only-the-latest-reasoning
fix/developer-role-maps-to-system
fix/223-reasoning-effort-off
fix/fetch-the-models-own-prompt-format
fix/278-advertise-the-real-limits
fix/277-responses-reasoning-roundtrip
fix/272-sampling-gaps
fix/clippy-1.98-result-large-err
feat/sampling-defaults
fix/streaming-completion-log
fix/prometheus-histogram-buckets
fix/responses-reasoning-events
fix/stream-reasoning-content
fix/cortex-stream-read-timeout
fix/sse-keepalive-during-prefill
fix/anonymous-yields-to-authenticated
fix/upstream-test-fixture-collisions
fix/docs-directory-index
feat/angels-internal-vhost
v0.1.16
v0.1.15
v0.1.14
v0.1.12
v0.1.11
v0.1.10
v0.1.9
v0.1.8
v0.1.7
v0.1.6
v0.1.5
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Labels
Clear labels
out-of-scope
p1-now
p2-next
p3-later
Outside helexa's constraining principles: near-frontier models on consumer hardware, served transparently and predictably
Active pain or unblocking work — pick up first
Engine levers — start once P1 baselines exist
Dependent on earlier work, or demand-driven
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: helexa/helexa#298
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Today a bench sweep and a live agentic session ran against beast at the
same time. Both were damaged: the session's decode was slowed, and bench
recorded 9.8 tok/s for
concurrency:8against 168.8 measured on aquiet host — then wrote that into the trend series as if it were fleet
performance.
Nothing in the pipeline noticed, and nothing in the stored row says the
number is unusable.
Why it happened, and why it will keep happening
The sweep is version-aware: a new build SHA unsatisfies every cell and
triggers a full pass. That means bench starts measuring the instant a
deploy lands — precisely when the fleet is cold-loading and whoever
did the deploy is testing it. The trigger is correlated with the busiest
moment, by construction.
What is already available
/healthpublishes everything a gate needs, per model:and bench already polls
/version+/modelscheaply each tick, soadding
/healthcosts nothing.Three traps a naive "skip when busy" would walk into
1. beast may never be idle. Its 27B co-serves a continuous CCTV
motion-triage workload at ~6 requests/min. A strict idle gate could mean
the host we care most about silently accumulates no data. That is
worse than contaminated data: a wrong number eventually contradicts
something, while an empty series just looks like nobody got round to it.
Any gate needs a starvation guard.
2. Instantaneous idle is not idle. At 6 req/min the gaps between
CCTV requests are seconds long, so a single poll reading
in_flight: 0lands in a gap and proves nothing. Either sample across a window, or —
better — have neuron publish how long it has been quiet.
3. Gating alone would not have caught today. Bench's own traffic
makes
in_flight > 0the moment it starts, andconcurrency:8deliberately creates load. The thing that matters is foreign arrivals
during a measurement, which a pre-flight check cannot see.
Proposal
1.
idle_secson neuron/health. Seconds since the last requestfinished for this model (0 while any are in flight). One poll then
answers "has this been quiet for 60 s?" reliably, and the bench side
stops being a heuristic over sampled polls.
2. Defer, don't skip. A cell whose target is not quiet is
rescheduled with backoff, not dropped. The sweep revisits.
3. Starvation guard — the part not to omit. After N deferrals,
measure anyway and mark the row, and log it loudly. A target that can
never be measured cleanly is itself a finding (it is true of beast, and
we should be able to see that stated rather than infer it from a gap in
a chart). Deferring forever in silence is the failure mode this
introduces, so it needs designing in from the start.
4. Stamp every sample with the contention it observed. Record
in_flight/queue_depthat start and end, and the peak during therun. Bench knows its own concurrency, so anything above that is foreign
traffic.
This is the highest-value part and worth doing even if the rest waits:
it is what makes a clean row provably clean and a dirty row
filterable, instead of both looking identical in the database. Stamping
alone would have caught today's contamination with no gating at all.
Gating only reduces how much work gets thrown away.
5. Settle delay after a SHA change. Wait for the fleet to be
serving normally before starting the post-deploy sweep, rather than
racing the cold-load.
UI
bench/src/pages/Trends.tsxshould flag or filter contaminated pointsrather than plotting them silently. Same instinct as
regime.rs— anumber whose meaning is compromised should say so on the chart, not in
someone's memory.
Retrospective note
Today's beast rows for
d3341cbare contaminated in both directions andshould not be trusted. Worth deciding whether to mark or drop them once
there is a mechanism to mark with.
Related
#288 (bench identity — the last time bench measured something other
than what it thought), the
regime.rsmeasurement-boundary precedent,#137 (
max_in_flight/ load surface), #291.