Skip to content

Zenith v3.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 30 Oct 22:46

Zenith 3.0.0: a UCI chess engine (C17, king-bucketed NNUE), built and tested at commit 5de886b9c456bd6004dbd7bf043e22f8150b0f4a
by run #41139760808.

  • Windows (x86-64): zenith-v3.0.0-windows-x86-64-v2.zip and -x86-64-v3-pext.zip; zenith.exe in each
    is Authenticode-signed (Jonathan Reckless).
  • macOS (Apple silicon): zenith-v3.0.0-macos-arm64.zip; the engine is signed with a Developer ID and
    notarised by Apple.
  • Linux (x86-64): zenith-v3.0.0-linux-x86-64-v2.tar.gz and -x86-64-v3-pext.tar.gz.

x86-64-v2 runs on essentially any modern x86-64 (magic bitboards); x86-64-v3-pext needs AVX2 and BMI2
(Intel Haswell+, AMD Zen 3+) and uses faster PEXT sliding attacks. Each archive holds the engine, README.md,
LICENSE and THIRD-PARTY-NOTICES.md; verify downloads against zenith-v3.0.0-SHA256SUMS.txt. The search is bit-identical on
every platform (the bench node signature, checked on each).

New evaluation network

This release ships reckless-lc0-runf-sb870.nnue, trained entirely on Leela Chess Zero self-play data.
It replaces zenith-cap2, which was trained on 2.15 billion positions from data generated by PlentyChess
(Yoshie2000) — as was every network Zenith had previously
released. That data is no longer used: zenith-cap1.nnue and zenith-cap2.nnue are removed from the tree,
every earlier release has been withdrawn, and the credit for those networks is kept permanently in
NNUE_TRAINING.md, because they
were measurably stronger for that data and the record should show where they came from.

Measured against zenith-cap2 in single-threaded self-play at 8+0.08 over 4,000 games: about +10 Elo,
95% interval roughly +1 to +18. The interval allows for the opening set being only 306 positions, so each
opening is replayed about 6.5 times; that correlation was measured rather than assumed. So removing the
PlentyChess data cost Zenith nothing — it gained a little.

The network is the shared Reckless NNUE network, produced by the shared training pipeline. Zenith's own
datagen and trainer/ exist but did not produce these weights. The major version marks the network
provenance change and the new network format, not a search rewrite.

Training-data attribution

The network was trained on positions from the Leela Chess Zero self-play training data
(https://storage.lczero.org/files/training_data/), runs test91 and test60, published under the
Open Database License 1.0 (http://opendatacommons.org/licenses/odbl/1.0/) with its contents under the
Database Contents License 1.0 (http://opendatacommons.org/licenses/dbcl/1.0/):

Position data from the Leela Chess Zero self-play training data
(https://storage.lczero.org/files/training_data/), run test91, used under the Open Database License 1.0
(http://opendatacommons.org/licenses/odbl/1.0/).

Position data from the Leela Chess Zero self-play training data
(https://storage.lczero.org/files/training_data/), run test60, used under the Open Database License 1.0
(http://opendatacommons.org/licenses/odbl/1.0/).

A trained network is an ODbL Produced Work, so distributing it obliges that notice. ODbL does not require
the network itself to be ODbL-licensed, and does not make it GPL merely because this project's code trained
it. Every archive here carries
THIRD-PARTY-NOTICES.md,
and the engine prints the notice itself: zenith license, or license inside the UCI loop.

What's Changed

  • Open 1.d4 about a fifth of the time: ship zenith-book-r5 by @jonny-reckless in #56
  • Run CI and the release on GitHub-hosted runners by @jonny-reckless in #57
  • Remove the external dataset's name, author and URL from the tree by @jonny-reckless in #58
  • Move Zenith's NNUE onto the shared RNNUE1 net container by @jonny-reckless in #59
  • Say on both streams which net is playing when EvalFile is refused by @jonny-reckless in #61
  • The documented training command would build a net the engine refuses by @jonny-reckless in #62
  • Ship a net trained on Leela Chess Zero data, and credit PlentyChess for the earlier ones by @jonny-reckless in #63
  • Describe the net honestly in the README, and pin Threads in the SPRT harness by @jonny-reckless in #64
  • Attribute the ODbL training data the shipped network was trained on by @jonny-reckless in #65

Full Changelog: v2.1.0...v3.0.0