Nachdem wir im letzten Monat bereits Stockfish NNUE unter die Lupe genommen haben, wurde die dort neu angewandte Suchtechnik erfolgreich in Stockfish 12 übernommen.
Stockfish NNUE warf zunächst viele Fragezeichen auf. Allgemein wurde angenommen, dass es eine Mischung aus Leela Zero-Bewertungstechnik und der in Stockfish angewandten Alpha-Beta-Suche (PVS) sei. Oberflächlich betrachtet, kann man dieser Aussage zustimmen, aber es erklärt nicht, wie genau Stockfish 12 seine Varianten berechnet und warum Stockfish 12 so viel stärker spielt, als Stockfish 11.
Ich möchte kurz auf die Funktionsweise eingehen. Genauso wie Leela Zero, verwendet Stockfish 12 sogenannte Bewertungstabellen, in welchen Stellungsmuster gespeichert sind mit entsprechender Bewertung. Bei dieser Bewertung handelt es sich um eine statistische Angabe, ob ein Stellungsmuster tendenziell für eine Seite gewonnen oder Remis ist. Lassen wir Stockfish 12 eine Stellung analysieren, greift die Engine zunächst auf diese Bewertungstabellen zu und gleicht die zu analysierende Stellung mit Stellungsmustern der Tabelle ab. Bei diesem Abgleich prüft Stockfish 12 zudem auch, welche Stellungsmuster aus der Ist-Stellung entstehen können.
Dieser Vorgang ebnet den Weg, welchen Stockfish 12 einschlagen wird und erst wenn dieser Prozess durchgelaufen ist, greift Stockfish 12 mit den zuvor gesammelten Bewertungen auf seine bekannte Alpha-Beta-Suche (PVS) zu. Ein Vorteil ist hierbei, dass schlechte Varianten bereits vorher abgeschnitten werden und sich die Alpha-Beta-Suche (PVS) mit aller Kraft auf die erfolgsversprechenden Varianten konzentrieren kann.
Dieser Prozess findet in Millisekunden statt und wiederholt sich während der Analyse ständig.
Das Beste aus Leela Zero gepaart mit der Rechenpower von Stockfish
Der Otto-Normalschachspieler fragt sich nun, warum bei Leela Zero für die Bewertung von Stellungen GPUs eingesetzt werden müssen, während bei Stockfish 12 CPUs reichen. Bei Leela Zero ist der Aufbau des Bewertungs-Algorithmus auf die einfachen und gegenüber CPUs schnelleren Rechenprozesse von GPUs optimiert. Die Bewertungsprozesse von Stockfish 12 (vor der Alpha-Beta-Suche) sind anders aufgebaut und die Menge der abzuarbeitenden Daten ist geringer, weshalb für eine schnelle Abarbeitung der Daten keine GPUs notwendig sind.
Jetzt stellt sich natürlich noch die Frage, wie diese Bewertungstabellen von Stockfish 12 entstehen. Hier hat das Stockfish-Team keine Mühen gescheut und durch Schach-Experten verschiedene Konzepte (menschliche Bewertung von Stellungen) in diese Bewertungstabellen per Hand eingepflegt. Dieses „Wissen“ ist die Basis für den den sog. FishTest-Algorithmus, um Bewertungstabellen zu generieren.
Das Generieren von Bewertungstabellen benötigt Unmengen an Rechenpower, aber davon bekommt der Anwender nichts mit. Wenn wir Stockfish 12 herunterladen und installieren, ist diese Bewertungstabelle bereits enthalten. Will man mit Stockfish 12 immer up to date sein, reicht es vollkommen aus, die jeweils aktuelle Bewertungstabelle (Datei) herunterzuladen und in Stockfish 12 einzubinden.
Jeder kann Stockfish stärker machen!
Stockfish ist ein Open Source Projekt, bei welchem eine Vielzahl von Spitzenprogrammierern in der Freizeit ihr Fachwissen in den Programmcode einbringen. Ab sofort können nun auch Nicht-Programmierer zum Erfolg von Stockfish beitragen, indem sie die Rechenkraft ihres heimischen PCs zur Verfügung stellen. Unter folgendem Link kann man sich das Fishtest-Worker Programm herunterladen, welches mit der Basis der Bewertungs-Algorithmen Partien spielt aus deren Ergebnisse/Bewertungen zukünftige Bewertungstabellen entstehen:
https://stockfishchess.org/get-involved/
Stockfish 12 in der Analyse
In meinen Tests konnte der neue Stockfish auf ganzer Linie überzeugen. Ich habe hierzu einige meiner vor gut 10 Jahren gespielten Partien analysiert, welche ich bereits mit den damals gängigen Engines unter die Lupe genommen habe. Ich war überrascht, welche positionellen Resourcen Stockfish 12 in diesen Partien fand, die mir bis heute nicht bekannt waren. Gerade zu Analysieren ist Stockfish 12 ein echter Schatz!
In einigen veröffentlichten Statements zu Stockfish 12 wird darauf hingewiesen, dass sich die Anzahl der berechneten Stellungen pro Sekunde nahezu halbiert haben. Ich möchte diese Aussage etwas relativieren. Anders als in vorherigen Stockfish-Versionen, werden bei Stockfish 12 schon vor der Alpha-Beta-Suche schlechte Fortsetzungen abgeschnitten. Dies bedeutet, dass viel Rechenzeit eingespart wird. Dieser Selektierungsprozess benötigt natürlich auch Rechenkraft, welche der Alpha-Beta-Suche abgezwackt wird. Das Stockfish-Team hat hier meiner Meinung nach die richtige Mischung gefunden. Was nützen einem 8 Millionen Stellungsberechnungen pro Sekunde, wenn davon 6 Millionen auf den Holzpfad führen? Wenn es bei Stockfish 12 nun 4 Millionen Berechnungen pro Sekunde sind, aber dafür ausschließlich sinnvolle Fortsetzungen, dann ist die Effizienz dieser neuen Technik augenscheinlich.
Mein Fazit:
Stockfish 12 hat gegenüber den Vorversionen einen riesen Spielstärke-Sprung gemacht. Die eingesetzte Mischung aus Bewertungstabelle und Alpha-Beta-Suche befindet sich erst am Anfang und bietet einen Blumenstrauß an Möglichkeiten zur weiteren Optimierung. Für mich ist diese Engine wieder die Nummer 1 zum Analysieren.
Stockfish 12 kann unter folgendem Link heruntergeladen werden:
https://stockfishchess.org/download/
Bis bald
Euer Benny
Hallo Benny,
wann gibt es ein update der „60 Schachprogramme“mit u.a. Stockfish12 u. LcO für den DGT Pi?
Hallo Hainz,
Die aktuellen Images haben über 80 Engines und auch die Anzahl der Eröffnungsbücher wurde erweitert. Stockfish 12 ist auch enthalten. Ich lade die neuen Images in den nächsten Tagen auf die Server hoch.
Gruß
Benny
Hallo Benny,
sind die neuen Images schon verfügbar u. wie bzw. wann bekomme ich den Download-Link zum Herunterladen (siehe meine email-Adresse)?
Hallo Erich,
es kamen noch ein paar Engine-Updates dazu. Das Image wird gerade auf den Server geladen. Download-Link folgt in Kürze 😉
Gruß
Benny
Hallo Benny,
habe Stockfish 12 unter chessbase 14 als UCI eingebunden.
Wie kann ich
1.nachträglich die Parameter ändern
2.wo kann ich die aktuellste .nnue finden ?
So wie ich es mache werden die Änderungen nicht gespeichert.
Gruß Joachim
Hallo Joachim,
Chessbase ist da etwas eigen. Um die Parameter dauerhaft als Standardeinstellung zu speichern, muss man die Engine zunächst aus Chessbase entfernen und anschließend Chessbase mit Admin-Rechten starten und die Engine einbinden. Bevor man die Einbindung bestätigt, geht man in die Parameter und stellt die Paramater ein. Anschließend bestätigt man die Einbindung und die Engine wird fortan immer mit diesen neuen Parametern gestartet.
Gruß
Benny
Hallo Benny,
vielen Dank. Gruß Joachim
Hallo Joachim,
Ergänzung zu der zweiten Frage:
Die aktuellsten nnue-Netze findet man unter:
https://tests.stockfishchess.org/nns
Die grün markierten Netze haben die erforderlichen Tests bestanden und zum jeweiligen Zeitpunkt den Status „default net“ erhalten.
Faustregel:
– Neueste grün markierte nnue downloaden
– Falls die aktuell installierte Stockfish-Version diese (noch) nicht unterstützen sollte, kann man notfalls noch eine aktuelle Entwickler-Version kompilieren. (Mehr dazu in meiner Antwort an Heinz.)
Viele Grüße
Beeco76
Hallo Benny,
ich habe noch ein Frage zu Stockfish 12.
Im Feld EvalFile steht der Text „nn-82215d0fd0df.nnue“, ich habe mir aber die Datei „20200914-1520.bin“ runter geladen. Wie weiß ich ob diese bin Datei der nnue Datei entspricht bzw. was muß ich tun um die bin Datei in eine nnue Datei umzuwandeln ?
mfg
Heinz
Hallo Heinz,
Einfach in dem Feld EvalFile den Pfad zur BIN Datei eingeben. Du musst da nichts umwandeln. Stockfish 12 kann auch mit BIN-Dateien arbeiten. Die Endung .nneu ist nicht notwendig.
Gruß
Benny
Hallo Benny,
ich habe jetzt SF12 erfolgreich auf meine i9 im Einsatz, er stürzt aber am AMD Ryzen TR-3990X ab und zwar sowohl mit der BMI2 als auch mit der avx2 Version. Hast Du eine Ahnung warum und welche Version funktionieren könnte. Der Ryzen emuliert doch zumindest BMI2 wenn er es schon nicht selber unterstützt.
mfg
Heinz
Hallo Heinz,
Die Ursache des Problems kann vielfältiger Natur sein. Ich schlage vor, dass Du mich einfach mal am WE anrufst und wir Schritt für Schritt die Einrichtung zusammen per Teamviewer durchführen.
Gruß
Benny
Hallo Heinz,
eine maßgeschneiderte Lösung für technikaffine Bastler wäre, sich eine angepasste Stockfish 12-Version selbst zu kompilieren, die voll auf die eingesetzte CPU optimiert ist.
Auf https://github.com/glinscott/fishtest/wiki/Building-stockfish-on-Windows gibt es ein Buildskript, das die optimalen Compiler-Flags für Windows wählt. Man muss sich aber zunächst eine Buildumgebung installieren. Wie das geht, steht am Anfang der Seite.
Bei einer ersten groben Durchsicht ist mir folgendes aufgefallen:
1. bmi2 ist zurzeit gar nicht die „beste“ Architektur. Die beste Architektur ist zurzeit „x86-64-vnni256“, sofern die CPU bestimmte Compiler-Flags unterstützt.
2. Beim Ermitteln der optimalen Kompiler-Einstellungen wird in folgender Passage die Threadripper-Architektur ausgeschlossen:
[[ „${gcc_enabled}“ =~ „-mbmi2 “ && ! „${gcc_arch}“ =~ „znver1“ && ! „${gcc_arch}“ =~ „znver2″ ]] ; then
arch_cpu=“x86-64-bmi2“
Merkwürdigerweise wird die Grund-Architektur eine Zeile weiter unten bei unterstütztem avx2 doch wieder auf bmi2 gesetzt. (Womöglich sind einzelne Flags aber im letztendlichen Kompiliervorgang dann doch anders.
Für die normalen Ryzen steht hier mehr zur Architektur:
https://wiki.gentoo.org/wiki/Ryzen
(Zu Threadripper habe ich leider auf die Schnelle nichts gefunden.)
Im Zweifel würde ich an Deiner Stelle aber zunächst mit Benny durchsprechen, ob sich der Aufwand lohnt. Vielleicht gibt es ja eine einfachere Lösung.
Viele Grüße
Beeco76
Pingback: Fat Fritz 2 - Ein unmoralisches Angebot - Schachcomputer Topschach.de