mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-22 12:47:08 +00:00
Failed VVLTC non-regression https://tests.stockfishchess.org/tests/view/69d562b84088e069540a2288 LLR: -2.96 (-2.94,2.94) <-1.75,0.25> Total: 386998 W: 99181 L: 99760 D: 188057 Ptnml(0-2): 35, 35792, 122429, 35203, 40 Failed STC non-regression https://tests.stockfishchess.org/tests/view/69f3c6601e5788938e86a99e LLR: -2.93 (-2.94,2.94) <-1.75,0.25> Total: 33696 W: 8492 L: 8795 D: 16409 Ptnml(0-2): 124, 4209, 8504, 3868, 143 Many thanks to Dubslow, Torom, ces42, Shawn, vondele, Disservin and others for discussion. ## Summary The venerable small net has been around for quite some time now, and while the big net architecture has substantially advanced with TI, the small net has stayed with plain HalfKA. It therefore presents a few burdens: multiple net architectures to maintain, multiple nets to train, and a whole lot of templates to deal with the variable L1 size. Locally I measure a slowdown of -2.5% in NPS with this branch – and it's probably more on non-AVX512 architectures – but a pure slowdown of that magnitude would lead to more dramatic losses (even at VVLTC) than exhibited in the above tests, suggesting that the small net's lower eval quality is deleterious. Bonus: Shawn found this interesting PGN among the VVLTC games: https://lichess.org/study/hvo8jflc/OeTOityv `master` seems to misevaluate the fortress because all positions go to small net (the material difference is larger than the threshold). closes https://github.com/official-stockfish/Stockfish/pull/6796 Bench: 2877007
79 lines
2.1 KiB
Bash
Executable File
79 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# download commands with a 5min time-out to ensure things fail if the server stalls
|
|
wget_or_curl=$( (command -v wget >/dev/null 2>&1 && echo "wget -qO- --timeout=300 --tries=1") ||
|
|
(command -v curl >/dev/null 2>&1 && echo "curl -skL --max-time 300"))
|
|
|
|
sha256sum=$( (command -v shasum >/dev/null 2>&1 && echo "shasum -a 256") ||
|
|
(command -v sha256sum >/dev/null 2>&1 && echo "sha256sum"))
|
|
|
|
if [ -z "$sha256sum" ]; then
|
|
>&2 echo "sha256sum not found, NNUE files will be assumed valid."
|
|
fi
|
|
|
|
get_nnue_filename() {
|
|
grep "$1" evaluate.h | grep "#define" | sed "s/.*\(nn-[a-z0-9]\{12\}.nnue\).*/\1/"
|
|
}
|
|
|
|
validate_network() {
|
|
# If no sha256sum command is available, assume the file is always valid.
|
|
if [ -n "$sha256sum" ] && [ -f "$1" ]; then
|
|
if [ "$1" != "nn-$($sha256sum "$1" | cut -c 1-12).nnue" ]; then
|
|
rm -f "$1"
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
fetch_network() {
|
|
_filename="$(get_nnue_filename "$1")"
|
|
|
|
if [ -z "$_filename" ]; then
|
|
>&2 echo "NNUE file name not found for: $1"
|
|
return 1
|
|
fi
|
|
|
|
if [ -f "$_filename" ]; then
|
|
if validate_network "$_filename"; then
|
|
echo "Existing $_filename validated, skipping download"
|
|
return
|
|
else
|
|
echo "Removing invalid NNUE file: $_filename"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$wget_or_curl" ]; then
|
|
>&2 printf "%s\n" "Neither wget or curl is installed." \
|
|
"Install one of these tools to download NNUE files automatically."
|
|
exit 1
|
|
fi
|
|
|
|
for url in \
|
|
"https://tests.stockfishchess.org/api/nn/$_filename" \
|
|
"https://github.com/official-stockfish/networks/raw/master/$_filename"; do
|
|
echo "Downloading from $url ..."
|
|
if $wget_or_curl "$url" >"$_filename"; then
|
|
if validate_network "$_filename"; then
|
|
echo "Successfully validated $_filename"
|
|
else
|
|
rm -f $_filename
|
|
echo "Downloaded $_filename is invalid, and has been removed."
|
|
continue
|
|
fi
|
|
else
|
|
rm -f $_filename
|
|
echo "Failed to download from $url"
|
|
fi
|
|
if [ -f "$_filename" ]; then
|
|
return
|
|
fi
|
|
done
|
|
|
|
# Download was not successful in the loop, return false.
|
|
>&2 echo "Failed to download $_filename"
|
|
return 1
|
|
}
|
|
|
|
fetch_network EvalFileDefaultName
|
|
|