Skip to content

v1.0.54

Latest

Choose a tag to compare

@github-actions github-actions released this 25 Aug 17:11
· 2 commits to main since this release

Corrected 512-wide NNUE — +22 ±6 Elo over the immediate pre-release engine

Measured directly: 3000 games, 10s+0.1s, 1 thread, paired colours from the 8moves_v3 opening book. The new network scored +987 −793 =1220, 1597/3000 (53.2%). Zero unfinished games.

This release also carries the search and lifecycle work merged since v1.0.53. Their measurements are reported separately below; Elo estimates from different experiments are deliberately not added together.

The new network

The NNUE hidden layer doubles from 256 to 512 neurons per perspective while retaining eight material-count output buckets. It was trained for 600 superbatches over the full Stockfish depth-9 corpus after every shard was validated and its white-relative WDL field corrected. Representative score/result coherence moved from roughly 4.5% to 95.5%.

This is the architecture retest made necessary by v1.0.53. The earlier 512-wide experiment scored −22.5 ±10.3 Elo, but that network was trained while the result and score components of the objective fought each other. On corrected labels, the same broad architecture direction is now +22 ±6 Elo despite its computational cost.

The cost of the wider network

Against the 256-wide engine at deterministic depth 12:

256-wide 512-wide change
nodes 2,626,054 3,027,236 +15.3%
NPS 2.031M 1.845M −9.2%
wall time 1,293ms 1,641ms +26.9%

The network wins the fixed-time match in spite of searching fewer nodes per second and inducing a larger tree. This is an evaluation-quality gain, not a speed gain.

Search changes since v1.0.53

  • Root PVS. Later root moves are searched with a scout window and re-searched only when they raise alpha. The combined candidate measured +21 ±9 Elo over official v1.0.53 across 1500 games (+459 −368 =673). The isolated razor-depth control was −22 ±9, showing that the result depends on the interaction; it is not valid to add this estimate to the NNUE result.
  • Safer razoring depth. Razoring is restricted to depth 1, and a sacrifice-first mate regression pins the reason. This mitigates the known unsoundness tracked separately; it does not claim razoring is fully solved.
  • Learned tables now survive between moves. History, capture history, countermoves, follow-up history and correction history were previously discarded whenever a search thread joined. Thread 0 now moves those tables back into the master state. This is a lifecycle correction, measured neutral at +5 ±9 Elo over 1500 games rather than claimed as a strength gain.
  • SEE no longer recursively copies full positions. The legality-aware exchange semantics and search topology are identical. Alternating AVX2 trials measured 0.92% faster at depth 12 and 1.86% faster at depth 13.

Diagnostics and safeguards

  • bench now reports cutoff sources and positions, main-search versus quiescence nodes, TT effectiveness and contention, scout/re-search rates, and searched width. Its state is reset per position so repeated runs in one process are deterministic.
  • CI checks the live chess-compete SPSA LMP defaults for cross-repository drift.
  • NNUE layout documentation is consistently STM-first and width-correct.
  • NNUE output scaling now widens to i64 before multiplying by the centipawn scale. A synthetic boundary regression would overflow the old i32 expression.
  • Golden evaluations are pinned for the exact NET-1095 network, and material-sign checks still guard against a transposed perspective layout.

Experiments rejected along the way

  • A conventional pin-agnostic swap-list SEE improved raw NPS by 12–15%, but expanded the deterministic tree by 46.3% and made the benchmark 30.6% slower. It was rejected in favour of the topology-identical legality-aware refactor.
  • The original 512-wide NNUE result is superseded, not hidden: it was −22.5 ±10.3 Elo on the internally contradictory training objective. Correcting the labels changed the conclusion.

Known limitations

Previous network files remain incompatible with this build. They were trained against the inverted-label/perspective cancellation fixed in v1.0.53 and can evaluate backwards while passing structural loading checks. Network width is also compile-time: this 512-wide build deliberately rejects 256-wide files rather than guessing a format.

The wider net is materially slower. The fixed-time Elo match says the quality gain is worth that cost at 10s+0.1s, but the trade-off may vary by hardware and time control.

Testing

  • Full release suite: 171 passed, 0 failed, 3 ignored across 21 suites.
  • Formatting, repository-standard Clippy, CI, and CodeRabbit review passed.
  • Deterministic 512-wide depth-12 signature: 3,027,236 nodes.
  • Production pre-push hook built the release binary and verified that it reports version 1.0.54.