Releases: jhonnold/berserk
Berserk 13
Details
Berserk 13 is officially available!
LTC vs Berserk 12
Elo | 52.78 +- 3.25 (95%)
Conf | 60.0+0.60s Threads=1 Hash=64MB
Games | N: 20034 W: 6114 L: 3094 D: 10826
Penta | [12, 1122, 4775, 4050, 58]
http://chess.grantnet.us/test/36089/
Thanks
Berserk wouldn't be possible without Andrew Grant (Ethereal + Torch), Finn Eggers (Koivisto + Torch), and Kim KΓ₯hre (Koivisto + Torch). They are excellent developers with an immeasurable amount of knowledge - it is a pleasure to discuss CC concepts with them and have the opportunity to work alongside them on the Torch Chess Engine.
Choosing a binary
Binaries currently require popcnt
. Each binary is labeled with a standard minimum instruction set requirement. x86-64
, sse2
, ssse3
, avx2
and avx512
.
For those labeled with pext
, your system requires bmi2
support. For AMD users, if you're using a Zen or Zen 2 processor, you should avoid the pext
binaries as they will be slow.
If you're unsure which to use or what your processor supports
- Download them all
- Open them and run
go depth 24
- If it crashes, you can't use it.
- Pick the fastest one
I highly recommend you follow the build guide in the readme to compile your own version. This will generate a native build for your machine and should be optimal as a result.
Contacting
I can be reached in the OpenBench discord if you'd like a custom binary for your system and can't compile it yourself.
Berserk 12.1
Note: You can ignore this release if you don't use Berserk with FRC
Details
This release adds a two bugfixs on top of Berserk 12. One is for FRC gameplay, one is for use with Windows Terminals. It was identified that kings starting on C1 or G1 (324 of 960 positions) would result in Berserk thinking it could mate randomly. Thanks to @hadynthepadawan who spotted this problem in #526 and gave perfect examples. Also, thanks to @SzotsGabor who spotted a weird terminal issue in #518 and suggested a fix.
Elo | 22.81 +- 3.13 (95%)
Conf | 10.0+0.10s Threads=1 Hash=8MB
Games | N: 20000 W: 4905 L: 3594 D: 11501
Penta | [143, 1761, 5150, 2534, 412]
http://chess.grantnet.us/test/34383/
Berserk 12
Details
Berserk 12 is officially available!
LTC vs Berserk 11
Elo | 81.33 +- 4.53 (95%)
Conf | 60.0+0.60s Threads=1 Hash=64MB
Games | N: 10000 W: 3390 L: 1091 D: 5519
Penta | [7, 367, 2000, 2572, 54]
http://chess.grantnet.us/test/34166/
LTC DFRC vs Berserk 11
Elo | 63.05 +- 4.15 (95%)
Conf | 60.0+0.60s Threads=1 Hash=64MB
Games | N: 10000 W: 2796 L: 1001 D: 6203
Penta | [25, 423, 2514, 1808, 230]
http://chess.grantnet.us/test/34167/
Thanks
Berserk wouldn't be possible without Andrew Grant (Ethereal + Torch), Finn Eggers (Koivisto + Torch), and Kim KΓ₯hre (Koivisto + Torch). They are excellent developers with an immeasurable amount of knowledge - it is a pleasure to discuss CC concepts with them and have the opportunity to work alongside them on the Torch Chess Engine.
I would also like to give a shout out to the SweBench developers and their engines. That group is motivated, talented, and frankly hilarious. Great to have them all in CC (you're trapped now) and pushing all engines forward.
Choosing a binary
Binaries currently require popcnt
. Each binary is labeled with a standard minimum instruction set requirement. ssse3
, avx2
and avx512
.
For those labeled with pext
, your system requires bmi2
support. For AMD users, if you're using a Zen or Zen 2 processor, you should avoid the pext
binaries as they will be slow.
If you're unsure which to use or what your processor supports
- Download them all
- Open them and run
go depth 24
- If it crashes, you can't use it.
- Pick the fastest one
I highly recommend you follow the build guide in the readme to compile your own version. This will generate a native build for your machine and should be optimal as a result.
Contacting
I can be reached in the OpenBench discord if you'd like a custom binary for your system and can't compile it yourself.
Berserk 11.1
Note: TCs with an increment are mostly un-impacted.
This is a bug fix release to resolve a major issue with TM in cyclical and no-increment TCs. Berserk would use all of it's time until playing completely random moves. Apologies for all testers who potentially wasted their time and CPU hours on a buggy Berserk.
ELO | 22.92 +- 11.14 (95%)
SPRT | 40/40.0+0.00s Threads=1 Hash=64MB
LLR | 2.94 (-2.94, 2.94) [-5.00, 0.00]
GAMES | N: 1928 W: 560 L: 433 D: 935
Berserk 11
Elo Diff
LTC with a balanced book
ELO | 43.92 +- 2.13 (95%)
CONF | 40.0+0.40s Threads=1 Hash=64MB
GAMES | N: 20000 W: 3306 L: 791 D: 15903
FRC LTC
ELO | 68.50 +- 2.85 (95%)
CONF | 40.0+0.40s Threads=1 Hash=64MB
GAMES | N: 20000 W: 5578 L: 1685 D: 12737
What's Changed
- Don't increase reductions for cutnodes when the move is tactical by @jhonnold in #417
- Between search optimizations by @jhonnold in #418
- Disable SE Extensions when clearly winning by @jhonnold in #419
- Fast Range over modulo for TT indexing by @jhonnold in #420
- Setup Pyrrhic submodule by @jhonnold in #421
- Remove depth requirement on eval adjustment by @jhonnold in #422
- Fix recapture extension extending non-captures by @jhonnold in #423
- Introduce negative reductions when hash move is singular by @jhonnold in #424
- Update Github Workflow to force Ubuntu 20.04 by @jhonnold in #425
- Standard LMR + PVS Logic by @jhonnold in #426
- Search Stack by @jhonnold in #428
- Combined Patches by @jhonnold in #430
- Cleanup by @jherrera80 in #429
- MovePicker Refactor by @jhonnold in #433
- Prevent positive score differences from impacting TM by @jhonnold in #435
- 12 Byte TT Entries by @jhonnold in #437
- Accumulator Cleanup by @jhonnold in #438
- QSearch ordering strictly based on Capture History by @jhonnold in #439
- Utilize 128bit multiplication for TT indexing by @jhonnold in #440
- Train with a mix of Berserk and Koivisto data by @jhonnold in #445
- Track bestmove using "Root Moves" by @jhonnold in #446
- Move Type in Continuation History by @jhonnold in #447
- Add simple protections for search explosions due to extensions by @jhonnold in #448
- History values fit within
int16_t
by @jhonnold in #449 - Remove SF Chess960 Cornered Bishop Logic by @jhonnold in #450
- General Cleanups by @jhonnold in #451
- Speedups by @jhonnold in #452
- Optimize Apply Updates by @jhonnold in #453
- Additional continuation histoy for follow-follow up by @jhonnold in #454
- Separate Move Pickers by @jhonnold in #455
- Hold TT Entry by @jhonnold in #456
- Increase hidden layer to 768 neurons by @jhonnold in #458
- No TT eval correction in QSearch by @jhonnold in #459
- Updates by @jhonnold in #460
- Add PV TT Eval correction in QSearch by @jhonnold in #461
- Identify upcoming repetitions by @jhonnold in #462
- Add WDL Output and Normalize CP to 50% at 100cp by @jhonnold in #463
- Utilize LMR Depth when move pruning quiets by @jhonnold in #465
- History Pruning by @jhonnold in #466
- Split Good and Bad captures with history and SEE by @jhonnold in #467
New Contributors
- @jherrera80 made their first contribution in #429
Full Changelog: 10...11
Berserk 10
What's Changed
- Small Endgame Eval Patch by @jhonnold in #387
- QSearch TT Exact Results by @jhonnold in #388
- Disable late move pruning at root + improve ordering by @jhonnold in #390
- Adjust History Formula by @jhonnold in #391
- Corrent singular search results by @jhonnold in #392
- Reverse Futility Pruning Margin Tweak by @jhonnold in #393
- PGO for Update Script by @jhonnold in #394
- Remove History Pruning by @jhonnold in #395
- Remove Counter History Pruning by @jhonnold in #396
- 1024 Hidden Neurons by @jhonnold in #397
- RFP and Razoring Tweak by @jhonnold in #399
- EP square only when viable by @jhonnold in #400
- Return to 512 Hidden Neurons by @jhonnold in #402
- Separate promotions in tactical history on captures by @jhonnold in #403
- Accumulator update via Move by @jhonnold in #404
- Reduce more in NMP when there are no opponent threats by @jhonnold in #405
- Don't reduce more for previous PV moves by @jhonnold in #407
- Improve NNUE auto-vectorization and update logic by @jhonnold in #408
- Simplify NNUE Code by @jhonnold in #409
- 16 King Buckets by @jhonnold in #410
- Improving flag via GrandParent nodes. Adjust LMR to use a new formula + legal moves. by @jhonnold in #413
- Fix hashmove reference in code by @jhonnold in #414
Full Changelog: 9...10
Berserk 9
Details
Another release for Berserk! This patch sees major changes in NNUE and many minor adjustments in search.
This patch introduces a new architecture in Berserk, a horizontally mirrored 8 bucket system. This results in a 6144 -> (512x2) -> 1
final architecture. This network was trained using Koivisto's Trainer using ~8B FENs from Berserk 8.5.1 self play games.
Along the way of working on NNUE, many minor search patches have been added. They were all minor, but lots of small changes add up.
STC on an imbalanced book
ELO | 82.98 +- 5.14 (95%)
CONF | 8.0+0.08s Threads=1 Hash=8MB
GAMES | N: 10000 W: 3985 L: 1641 D: 4374
LTC on a balanced book
ELO | 54.37 +- 2.65 (95%)
CONF | 40.0+0.40s Threads=1 Hash=64MB
GAMES | N: 17000 W: 3605 L: 966 D: 12429
Self play results vs Berserk 8.5.1, self play results do not reflect exactly when playing vs other engines.
Thanks
I'd like to personally thank two community members during this release. First, Finn Eggers (Koivisto Author), for helping getting Berserk setup on the Koivisto Trainer. His CUDA based trainer improved Berserk network training time from a week to four hours per network. This speedup is a large motivator for me to continue developing Berserk and its networks. Moving forward, I will spend my efforts working on the CudAD trainer alongside Finn to improve it for both Berserk and Koivisto.
I would also like to thank Dariusz DomagaΕa. He has used his personal time to create a wonderful page for the Berserk chess engine, and I recommend you visit this page.
Changes
Search
- Razoring
- Static Evaluation values tuned
- Hash move reduction on potential multicut
- History indexing improved
- Threats in main history now utilize entire opponent attack map
- Continuation history in a single table utilizing color indexing
NNUE
- New architecture utilizing a horizontally mirrored 8 bucket system
6144 -> (512x2) -> 1
- Fast refresh logic for ~3.5% speedup
Misc
go nodes
support added- Prevent search from ending early while pondering
- Low piece endgame specific evals
- No increment timeouts fixed
- Removed dynamic contempt
- Prefetch executed prior to updates for ~6% speedup
- Search explosions due to double extensions limited
Choosing a binary
Binaries currently require popcnt
and sse2
.
Binaries with the label avx2
require your processor to support avx2
.
Binaries with the label pext
require your processor to support bmi2
.
If you're unsure which to use or what your processor supports
- Download them all
- Open them and run
go depth 24
- If it crashes, you can't use it.
- Pick the fastest one
I highly recommend you follow the build guide in the readme to compile your own version. This will generate a native build for your machine and should be optimal as a result.
Berserk 8.5.1
Changes
There was a bug in Cyclical Time Controls and Arena analysis, this fixes both.
ELO | 40.20 +- 13.89 (95%)
SPRT | 40/40.0+0.00s Threads=1 Hash=64MB
LLR | 2.97 (-2.94, 2.94) [-1.00, 4.00]
GAMES | N: 1224 W: 380 L: 239 D: 605
Berserk 8.5
I have no changed the network architecture so I'm not ready for a full release, but this is something for testers if they're interested.
It should be noticeably stronger than Berserk 8 already.
Choosing a binary
Binaries currently require popcnt
.
Binaries with the label avx2
require your processor to support avx2
.
Binaries with the label pext
require your processor to support bmi2
.
If you're unsure which to use or what your processor supports
- Download them all
- Open them and run
go depth 24
- If it crashes, you can't use it.
- Pick the fastest one
Berserk 8
Details
Another release with an improved NNUE evaluation and small search patches (same as last time).
The newest network was trained using a custom trainer on 1.2B FENs from Berserk 6 self play games. Most of the improvements for this release come from tweaks in the trainer and not a largely improve architecture or better data. I was hoping to improve the architecture for this release, but all attempts at this time have failed (miserably I may add).
Minor search patches are included in this release as well.
STC
ELO | 68.92 +- 4.47 (95%)
CONF | 8.0+0.08s Threads=1 Hash=8MB
GAMES | N: 10000 W: 3160 L: 1202 D: 5638
LTC
ELO | 47.90 +- 3.68 (95%)
CONF | 40.0+0.40s Threads=1 Hash=64MB
GAMES | N: 10000 W: 2183 L: 813 D: 7004
Self play results vs Berserk 7, this Elo gain may not reflect exactly when playing against other engines
Choosing a binary
Binaries currently require popcnt
.
Binaries with the label avx512
require your processor to support avx512
.
Removed the 512 binaries due to reported issues
Binaries with the label avx2
require your processor to support avx2
.
Binaries with the label pext
require your processor to support bmi2
.
If you're unsure which to use or what your processor supports
- Download them all
- Open them and run
go depth 24
- If it crashes, you can't use it.
- Pick the fastest one
Changes
- NN Trainer improvements
- Tuned hyper parameters
- Tuned Eval vs WDL weighting from training data
- L1 Penalty
- LMR Tweaks
- Cut Node reduction added to captures/promotions in LMR
- Simplified out useless reductions
- RFP Tweaks
- RFP Margin Adjusted
- NMP Tweaks
- Margin adjusted via
improving
flag - Raw null search score returned
- Margin adjusted via
Bugs
- Resolved an issue with Berserk suffered from EG blindness due to NMP
Thanks
- Connor McMonigle (Seer's Author) for continued guidance and advice on NNs
- Andrew Grant (Ethereal's Author) for Open Bench. Development of Berserk would not be possible without this resource
- Noob for his hardware on Open Bench. Tests run quickly and without issue thanks to Noob.
- Kim KΓ₯hre (Koivisto's Author) for rubber duck debugging and theorizing
- Ipmanchess for validating my AVX512 binary works