Better Search, Threads, Analysis Improvements, and More
If you're a new user, don't forget to check out this section for getting started and basic usage!
KataGo is continuing to improve at https://katagotraining.org/ and if you'd like to donate your spare GPU cycles and support it, it could use your help there!
If you don't know which version to choose (OpenCL, CUDA, Eigen, Eigen AVX2), read this: https://github.com/lightvector/KataGo#opencl-vs-cuda-vs-eigen
Also attached here are "bs29" versions of KataGo. These are just for fun, and don't support distributed training but DO support board sizes up to 29x29. KataGo's neural nets will probably be still very strong on large boards, but as usual they are not trained for these sizes, so no complete guarantees. The "bs29" version may also be slower and will use much more memory, even when only playing on 19x19, so you should use them only when you really want to try large boards.
Major Changes and Improvements and New Features
-
Major improvements in KataGo's search algorithm. KataGo might be somewhere around 75 Elo stronger than v1.8.2 with the same latest neural nets. Half of this improvement might also be applicable to older/smaller nets, although not tested. Thanks to @sbbdms and @fuhaoda for extensive help testing these parameters.
-
Major improvements in multithreaded search performance on stronger GPUs, or with multiple GPUs, by implementing close-to-lockless MCTS search. (merging the long-open "highthreads" code branch). In the extreme case, performance on multiple A100s might be more than doubled.
-
New option
avoidRepeatedPatternUtility
to make KataGo prefer to avoid playing a joseki that it already played the same game in a different corner. See config for more details. -
New set of options where you can specify your own SGF files to encourage KataGo to avoid (or play) various lines, or to avoid repeating itself and play a greater variety of moves across a series of games. See config for details.
-
It's surprisingly hard to find a nice tool for summarizing win/loss results for SGFs and computing Elos given a set of test matches between different bots/configs/players. KataGo now has a small python3 library and script that does it, run like
python summarize_sgfs.py /path/to/directory/of/sgfs
, run it with--help
for more info. -
KataGo now leverages symmetry for searching the first few moves of the game if the position is symmetric, and will open as black in the upper right corner by default. Thanks to @fuhaoda for helping implement this.
-
KataGo will now search a much wider variety of moves during analysis by default. (
analysisWideRootNoise
). -
For OpenCL users: somewhat improved the reliability of the OpenCL tuning to find good configurations and not pick bad ones as often, on some GPUs. KataGo v1.9.0 by default will continue to use the same tuning as from earlier versions, but if you want to re-run the tuner on v1.9.0, at any time you can run or rerun it like
./katago.exe tuner -model path/to/the/neuralnetfile.bin.gz -config path/to/your_gtp_config.cfg
. Thanks to @EZonGH for reporting and testing.
Dev-facing Changes (Analysis Engine)
-
Added new
clear_cache
command to analysis engine. -
Analysis engine now also reports the current player to move in the root info.
-
Analysis engine and GTP kata-analyze are now updated to report (
isSymmetryOf
) when a move's stats are symmetric copies of other move's stats, for when KataGo's new symmetry handling,rootSymmetryPruning
enabled. Basically KataGo only searches one of each symmetrically equivalent move, and the stats for the others are set to be copies of the original, (with appropriately rotated PVs).
Bugfixes and Optimizations
-
Mostly mitigated the problem where if there are too many search threads some of those threads are forced to search poor moves (since all the good moves are already taken by other threads), whose poor values then bias the MCTS average values enough to cause KataGo to miss tactics or play very weird moves.
-
Reduce up the lag between moves when using large numbers of playouts (hundreds of thousands or millions) by multithreadedly deallocating the search tree or processing it for tree reuse.
-
Fixed several rare memory access and threading bugs, including one that could rarely cause KataGo to crash outright.
-
Improved the quality of rootInfo for analysis engine (thanks to @sanderland)
-
Some small internal performance optimizations in the board code (thanks to @fuhaoda).
-
Fixed some warnings and CMake issues for compiling with clang (thanks to @TFiFiE).