Skip to content

Pawnstar 2.0.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 19:58

Pawnstar 2.0.0: the Pawnstar UCI chess engine (C++, NNUE), built and tested at commit 2ec763798cbfb6b398dd7987f2209733ef3289eb
by run #41118913326.

  • Windows (x86-64, AVX2): pawnstar-2.0.0-windows-x86_64.exe, Authenticode-signed (Jonathan Reckless).
  • macOS (Apple silicon): the binary in pawnstar-2.0.0-macos-arm64.zip, signed with a
    Developer ID and notarised by Apple.
  • Linux (x86-64, AVX2): pawnstar-2.0.0-linux-x86_64; chmod +x it.

New evaluation network

This release ships v20, an evaluation network trained entirely on Leela Chess Zero self-play data.
It replaces v12, which was trained on data generated by PlentyChess
(Yoshie2000). That data is no longer used in any Reckless chess
engine network, and no network trained on it is distributed any longer: v12 and its predecessors are removed
from the source tree and every release that shipped them has been deleted. The credit for those earlier
networks is kept permanently in nnue/README.md,
because they were measurably stronger for that data and the record should show where they came from.

Measured against v12 in single-threaded self-play: +10 Elo at 8+0.08 over 8,000 games, and level at
12+0.12
over 12,000 games. A gain at fast time controls, neither a gain nor a loss at slower ones.

The network architecture changes with it: 8 horizontally mirrored king buckets and 8 material output heads,
replacing v12's unmirrored single head. 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. The engine prints this notice itself: send license over UCI. Full notices are in
THIRD-PARTY-NOTICES.md.

No source archive

This release publishes binaries and documentation only. For the source, clone or fork the repository.

What's Changed

  • Run CI and releases on GitHub-hosted runners by @jonny-reckless in #21
  • UCI test: wait for the first currmove line rather than a fixed movetime by @jonny-reckless in #22
  • Add a CI aggregate job as the branch ruleset's single required check by @jonny-reckless in #23
  • Restore the self-play data generator and calibrate it, with an opening set of our own by @jonny-reckless in #24
  • Make self-play data diversity survive a real campaign by @jonny-reckless in #25
  • Move the pinned bullet trainer to da426a49 and force the checkout by @jonny-reckless in #26
  • Close the two holes a campaign across machines would have fallen into by @jonny-reckless in #27
  • Extract the CC0 Lichess open database into training shards by @jonny-reckless in #28
  • Convert Lc0's v6 self-play training data into training shards by @jonny-reckless in #29
  • Make the documents true about the suites, the tools and the data sources by @jonny-reckless in #31
  • Make the trainer's usage header list and describe what it reads by @jonny-reckless in #32
  • Stop nnue/README.md telling a reader to fetch the retired dataset by @jonny-reckless in #33
  • Fail the build when kKingBucketMap overruns kNumKingBuckets by @jonny-reckless in #34
  • Derive kNumKingBuckets from kKingBucketMap instead of asserting it by @jonny-reckless in #35
  • Move pawnstar's nets into the shared RNNUE1 container, with CRC-64/XZ by @jonny-reckless in #36
  • Make a refused net fatal, not a silent fall back to the embedded one by @jonny-reckless in #37
  • The shared NNUE shape behind a build knob: king mirroring and 8 output heads by @jonny-reckless in #38
  • Pin the advertised Hash default, which bench cannot see by @jonny-reckless in #39
  • Build and gate the new NNUE shape in CI, which nothing exercised by @jonny-reckless in #40
  • Read lc0's v7 training records, which only append to the v6 layout by @jonny-reckless in #42
  • Document a real RNNUE1 header, and who should write it by @jonny-reckless in #41
  • Say which net is still playing when EvalFile is refused by @jonny-reckless in #43
  • Say which net loaded as an info string on stdout, where a GUI reads it by @jonny-reckless in #44
  • Restore bullet's MIT attribution on the two trainer files adapted from it by @jonny-reckless in #45
  • Read an RNNUE1 header with one tested tool (print_net_header) by @jonny-reckless in #46
  • Bring the SPRT match harness into the tree, where a decoder gets reviewed by @jonny-reckless in #47
  • Pool match chunks with a tested tool, and stop a shape note reading as a refusal by @jonny-reckless in #48
  • Count Actions workers by process name, not by mentions of them by @jonny-reckless in #49
  • Check what the engine does with a net's weights, which nothing did by @jonny-reckless in #50
  • Say the symmetry invariant the way the test asserts it by @jonny-reckless in #51
  • Refuse a learning-rate schedule whose last drop never applies by @jonny-reckless in #52
  • Take the trainer's resume support from the single source by @jonny-reckless in #53
  • Ship the v20 net, trained entirely on Leela Chess Zero self-play data by @jonny-reckless in #54
  • Record what the int8 bound measures, and correct two accounts of the flip by @jonny-reckless in #55

Full Changelog: v1.2.0...v2.0.0