Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Stockfish immer größere Netze
- - By Max Siegfried Date 2021-08-20 10:41
Inzwischen kommen immer größere Netze immer schneller heraus. 256->512->1024.
Sobald mehrere neue grüne Netze vorhanden sind und 1024 ausgereizt ist, kommt 2048 an die Reihe.
Dann 4096->8192->16384.

Wie seht ihr das?
Parent - - By Andreas Matthies Date 2021-08-20 14:00 Upvotes 1
Ist dir aufgefallen, dass die aktuellen Netze (47,0MB Gewichtsdatei) eben nicht größer sind als die der vorangegangenen Architektur (47,7MB), weil die Verdoppelung des ersten Layers auf 1024 mit einer Vereinfachung (Symmetrie durch Spiegelung) des Feature Transformers einher ging?
Parent - - By Robert Bauer Date 2021-08-21 09:26
Wie sieht es bei der Kompatibilität aus?
Aktuell muss immer am Code gefeilt werden, damit Stockfish überhaupt die neuen Netzeigenschaften kann.
Kann ein neuer Stockfish die alten Netze?
Hier ist doch einiges an Programmieraufwand zu betreiben.
Parent - - By Andreas Matthies Date 2021-08-21 10:08
Robert Bauer schrieb:

Wie sieht es bei der Kompatibilität aus?

Wer ein altes Netz spielen will, nimmt einfach einen alten dazu passenden Stockfish.
Wer ein "exotisches" Netz spielen will mit einer Architektur, die sich (noch) nicht in den Master durchgesetzt hat, der muss halt in den sauren Apfel beißen und die dazu passende Stockfish Version selbst kompilieren aus dem entsprechenden Branch, in dem das Netz getestet wurde.
Robert Bauer schrieb:

Kann ein neuer Stockfish die alten Netze?

Ein neuer Stockfish kann die alten Netze nicht spielen. Sobald eine neue Netzarchitektur sich durchsetzt und in den Master geht, fliegt die Unterstützung für die alte Architektur raus. Das kann man mögen oder auch nicht aber der Code wäre sonst vermutlich nicht zu pflegen, da auch in den Low-Level-Routinen immer Optimierungen eingebaut sind, die mit Architektur A funktionieren, mit Architektur B aber nicht.
Robert Bauer schrieb:

Aktuell muss immer am Code gefeilt werden, damit Stockfish überhaupt die neuen Netzeigenschaften kann.
...
Hier ist doch einiges an Programmieraufwand zu betreiben.

Ja. Und genau das machen die Entwickler ja auch. Ich verstehe deinen Einwand nicht.
Ziel der Stockfish Entwicklung ist und war es schon immer, die spielstärkste Engine zu entwickeln und nicht eine Universalengine, die beliebige Netze verdauen kann.
Parent - - By Robert Bauer Date 2021-08-22 12:17
Zitat:
Wer ein altes Netz spielen will, nimmt einfach einen alten dazu passenden Stockfish.


Du kannst mir sicher die Liste der passenden Stockfishe zu einem Netz geben, z.B. den letzten Stockfish, bevor auf ein neues Netz umgestellt wurde, denn dieser ist ja dann der Beste für das jeweilige Netz. :->

Das ist das Problem. Es gibt keine solche Liste. Alles andere ist unnötiger Aufwand, da diese Information vorliegen sollte bzw. gepflegt werden könnte, z.B. einerseits als Spalte bei der bekannten NNUE-Netz-Seite und andrerseits als Spalte bei den Stockfish-Dev-Builds.

Zitat:
...da auch in den Low-Level-Routinen immer Optimierungen eingebaut sind, die mit Architektur A funktionieren, mit Architektur B aber nicht.


Ist dies eine Annahme oder hast Du dies dem Code oder der Aussage eines SF-Programmierers entnommen?
In den Stockfish Sourcen gibt es ein Unterverzeichnis NNUE. Darin müssen alle NNUE-Architektur-Änderungen enthalten sein, ansonsten wäre es ein klarer Bruch gegen Coding Conventionen.
Diese Sourcen sind überschaubar. Zugegebenermaßen fehlt mir z.Zt. das nötige Know How, um dies zu implementieren. Mein Versuch mit CFish, wo die Parameter wahrscheinlich nur in einer Datei nnue.c drinstecken, ist leider gescheitert.

Zitat:
Ja. Und genau das machen die Entwickler ja auch. Ich verstehe deinen Einwand nicht.
Ziel der Stockfish Entwicklung ist und war es schon immer, die spielstärkste Engine zu entwickeln und nicht eine Universalengine, die beliebige Netze verdauen kann.


Die Entwickler einer Engine sollten und werden universeller denken. Es kommen immer wieder neue Ansätze. Diesmal sind es "größere" Netze. Wie Andreas Matthies korrekt schrieb, ging die Verdopplung mit einer Vereinfachung einher. Ich sehe Potential darin, wenn man die Parameter in der nnue_architecture.h und nnue_feature_transformer.h flexibel gestalten würde, nämlich entweder aus der NNUE auslesen würde oder als Engine Parameter über die Oberfläche steuerbar machen würde, dann wäre nochmal ein Tor zu weiterer Variation und somit weiterem Fortschritt geöffnet.
Parent - - By Andreas Matthies Date 2021-08-22 14:09 Upvotes 2
Robert Bauer schrieb:
Zitat:
Wer ein altes Netz spielen will, nimmt einfach einen alten dazu passenden Stockfish.

Du kannst mir sicher die Liste der passenden Stockfishe zu einem Netz geben, z.B. den letzten Stockfish, bevor auf ein neues Netz umgestellt wurde, denn dieser ist ja dann der Beste für das jeweilige Netz. :->

Mit ein wenig Suchen in den Commits von Stockfish nach "New Architecture" findet man die beiden folgenden Commits:

https://github.com/official-stockfish/Stockfish/commit/e8d64af1230fdac65bb0da246df3e7abe82e0838 (Wechsel von half_kp auf half_ka_v2)
https://github.com/official-stockfish/Stockfish/commit/d61d38586ee35fd4d93445eb547e4af27cc86e6b (Wechsel von halfka_v2 auf half_ka_v2_hm)

Und das sind auch schon alle Architekturwechsel, die es in den Master geschafft haben.

Der letzte/beste Stockfish mit halfka_v2 müsste also der vom 5.8.21 sein: https://github.com/official-stockfish/Stockfish/commit/dabaf2220fe0c77400a5f71a91952f510e6a126b
Der letzte/beste Stockfish mit der Originalarchitektur half_kp ist vom 17.5.21: https://github.com/official-stockfish/Stockfish/commit/f90274d8ce1aad4ad0595aacbceb74b6cbe306a8

Robert Bauer schrieb:

Das ist das Problem. Es gibt keine solche Liste. Alles andere ist unnötiger Aufwand, da diese Information vorliegen sollte bzw. gepflegt werden könnte, z.B. einerseits als Spalte bei der bekannten NNUE-Netz-Seite und andrerseits als Spalte bei den Stockfish-Dev-Builds.

Diese NNUE-Netz-Seite ist ja primär dazu da, dass die Entwickler dort Netze hochladen und innerhalb von Fishtest verwenden können. Aber ich gebe dir Recht, eine Spalte, aus der man auf einen Blick erkennen könnte, was für ein Netz das ist, würde nicht weh tun. Selbst die Dateigröße wäre ja derzeit ausreichend, um daraus die Architektur ableiten zu können.
Ich vermute mal, dass die Entwickler dieses "wilde Testen von Netzen" eher vermeiden wollen, weil es die Supportanfragen erhöht.

Robert Bauer schrieb:
Zitat:
...da auch in den Low-Level-Routinen immer Optimierungen eingebaut sind, die mit Architektur A funktionieren, mit Architektur B aber nicht.

Ist dies eine Annahme oder hast Du dies dem Code oder der Aussage eines SF-Programmierers entnommen?

Das habe ich zum einen daraus geschlossen, dass die Commits mit den Architekturänderungen immer auch viel entsprechenden Code der Art https://github.com/official-stockfish/Stockfish/commit/d61d38586ee35fd4d93445eb547e4af27cc86e6b#diff-da313937d54e9247a2c2c12116ca5fc89998f01ac846f5f9be0b499725286dc1R139 enthalten.
Zum anderen lese ich das auch hier https://github.com/syzygy1/Cfish/issues/204#issue-944790893 heraus, wo der Haupt-NNUE-Entwickler von möglichen Optimierungen in einem dünn besetzten Featurelayer spricht. Wie dünn der besetzt ist, unterscheidet sich aber wiederum von Architektur zu Architektur.

Robert Bauer schrieb:

In den Stockfish Sourcen gibt es ein Unterverzeichnis NNUE. Darin müssen alle NNUE-Architektur-Änderungen enthalten sein, ansonsten wäre es ein klarer Bruch gegen Coding Conventionen.
Diese Sourcen sind überschaubar. Zugegebenermaßen fehlt mir z.Zt. das nötige Know How, um dies zu implementieren. Mein Versuch mit CFish, wo die Parameter wahrscheinlich nur in einer Datei nnue.c drinstecken, ist leider gescheitert.

Ist ja auch so. Allerdings fliegt der alte Code halt raus, wenn der neue Code kommt, um das ganze übersichtlich zu halten.
Wenn du dir die Commits oben genauer anschaust, ist es eben nicht nur eine schnöde Anpassung der  Netzgröße, die man mit der Anpassung eines Parameters z.B. von 512 auf 1024 erledigen könnte. Insbesondere die Featuresets haben es halt in sich, was die Komplexität angeht. Und solche Änderungen https://github.com/official-stockfish/Stockfish/commit/e8d64af1230fdac65bb0da246df3e7abe82e0838#diff-e5df0d0a5fec73d66bcc2267e22b11a188c09b1b239dbb076633447e4f2b2570L41 parallel zu pflegen, das geht wahrscheinlich früher oder später schief. Immerhin ist einer der Maintainer schon ausgestiegen, weil ihm der aktuelle NNUE-Code schon zu komplex war.

Robert Bauer schrieb:

Die Entwickler einer Engine sollten und werden universeller denken. Es kommen immer wieder neue Ansätze. Diesmal sind es "größere" Netze. Wie Andreas Matthies korrekt schrieb, ging die Verdopplung mit einer Vereinfachung einher. Ich sehe Potential darin, wenn man die Parameter in der nnue_architecture.h und nnue_feature_transformer.h flexibel gestalten würde, nämlich entweder aus der NNUE auslesen würde oder als Engine Parameter über die Oberfläche steuerbar machen würde, dann wäre nochmal ein Tor zu weiterer Variation und somit weiterem Fortschritt geöffnet.

Die Variablen existieren ja auf Ebene der Entwickler. Die müssen aber neben der Anpassung im Stockfish auch immer den Trainer, mit dem die Netze trainiert werden, entsprechend anpassen und dann auch tatsächlich Netze trainieren, die diesen Parametern entsprechen. Das passiert ja in den entsprechenden Branches von Sopel und co. Aber was hast du als Endanwender davon, wenn diese Parameter variabel sind bzw. du beliebige Netze laden könntest? Du kannst doch nur bestehende Netze testen, die a. im Fishtest durchgefallen sind, b. zwar mal gut waren aber inzwischen übertroffen sind oder c. aktuell und so gut sind, dass sie demnächst im Master enthalten sein werden. Da an Fortschritt zu glauben, heisst ja, die Methoden von Fishtest in Zweifel zu ziehen. Und da würde ich widersprechen.

Insgesamt aber endlich mal eine erstaunlich konstruktive Diskussion 
Parent - - By Robert Bauer Date 2021-08-22 17:33
Ich glaube einen Zusammenhang zu erkennen, dass große Netze zur Analyse gut sind, wenn man auf lange Zeiten geht.
Als Fernschach-Spieler ist mir dies sehr wichtig und deshalb sehe ich den aktuellen Trend sehr positiv.

Andrerseits zeigen sich auch "punktuell" andere Ergebnisse: die Plaskett-Stellung https://forum.computerschach.de/cgi-bin/mwf/topic_show.pl?pid=130630#pid130630 konnte ich mit meinem Rechner nur mit Stockfish 030721 mit Net nn-46832cfbead3.nnue lösen in 2:47 auf meiner Kiste. Neuere und ältere Stockfische waren nicht erfolgreich unter 5 Minuten.
Dies bedeutet, dass man einerseits aktuellen Code benötigt aber ein "älteres" Netz.
Ich stelle mir die Situation in einem Jahr vor: Stockfish hat viele Patches, einige ELOs dazugewonnen und ist prinzipiell in der Analyse besser. Aber für eine konkrete Stellung könnte dann nicht das aktuell in einem Jahr verwendete Default-Net optimal sein, sondern ein anderes. Wenn ein Netz anderer Architektur einfach eingesetzt werden könnte, wäre man sehr flexibel.

Ein anderes Indiz spricht mir auch noch dagegen, dass "je größer je besser" nicht gelten könnte. Diese einfache Regel gilt nämlich auch nicht bei Lc0. Auch bei Lc0 sind große (zu große) Netze zwar "interessant" aber bringen selten etwas.

Zurück zur erstaunlich konstruktiven Diskussion:

Ich war so frei und habe auf github einen Issue eingestellt und auch schon einen fundierten Kommentar von Sopel97 erhalten:

https://github.com/official-stockfish/Stockfish/issues/3670
Parent - - By Andreas Kuntze Date 2021-08-22 18:13
Zur Plaskett-Stellung: Der aktuelle Stockfish von heute mit dem aktuellen Netz nn-517c4f68b5df.nnue knackt diese Stellung bei mir (6 Kerne) in wirklich annehmbarer Zeit:

[+3.23]  d=31  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Kc6 Ba3 6.Qd1 Kxg3 7.Qe1 Kf4 8.Qf1 Kg3 9.Qxa6 Nf3 10.Kd5 Nd4 11.Bd3 Bb4 12.Qxh6 Kf2 13.Qf4(0:01:53) 454424kN
[+3.11]  d=31  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Kc6 Ba3 6.Qd1 Kxg3 7.Qe1 Kf4 8.Qf1 Kg3 9.Qxa6 Nf3 10.Kd5 Nd4 11.Bd3 Bb4 12.Qxh6 Kf2 13.Qf4 Ke1(0:01:51) 449497kN
[+3.02]  d=31  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Kc6 Ba3 6.Qd1 Kxg3 7.Qe1 Kf4 8.Qf1 Kg3 9.Qxa6 Nf3 10.Kd5 Nd4 11.Bd3 Bb4 12.Qxh6 Kf2 13.Qf4 Ke1 14.Qxe3(0:01:46) 433504kN
[+2.94]  d=30  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Kc6 Ba3 6.Qd1 Kxg3 7.Qe1 Kf4 8.Qf1 Kg3 9.Qxa6 Nf3 10.Kd5 Nd4 11.Bd3 Bb4 12.Qxh6 Kf2 13.Qf4 Ke1 14.Qxe3 Kd1(0:01:44) 424471kN
[+2.05]  d=30  1.Nf6(0:01:44) 423950kN
[+0.55]  d=30  1.Nf6(0:01:42) 418255kN

Aber prinzipiell hast Du natürlich recht. Gerade in der Fernschachanalyse möchte ich mich gern darauf verlassen können, dass in solchen Stellungen mit einer klaren Lösung der stärkste Zug auch tatsächlich gefunden wird. Stockfish ist für so etwas aber eher ungeeignet, weil diese Engine "gnadenlos" auf große Suchtiefen in kürzester Zeit optimiert wird. Das geht nur, wenn man im Suchbaum frühzeitig stark selektiert. Und dabei bleiben eben zwangsläufig diverse Möglichkeiten auf der Strecke.

Und da man ja nie weiß, welche alte Stockfish-Version mit welchem alten Netz für die konkrete Stellung gerade am besten ist, müsste man eine größere Anzahl von solchen älteren Engine-Netz-Kombinationen durchprobieren. Das mag in einer einzelnen Stellung mal gehen, ist aber sicher nicht der praktikabelste Ansatz für die tägliche Fernschachanalyse.

Für mich habe ich dieses Problem dadurch gelöst, dass ich immer mehrere unterschiedliche Engines auf die Stellungen loslasse. Mit dabei ist immer auch eine taktische Engine wie Crystal. Hier mal zum Vergleich:

[+2.43]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Nf3 10.Qg2 Ke1 11.Qxf3 e2 12.Qe3 Kf1 13.Qf4 Kg1 14.Be4 e1N 15.Kd7 c2(0:00:10) 34223kN
[+2.42]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2(0:00:09) 31732kN
[+2.29]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2 Kg1(0:00:08) 28297kN
[+2.21]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2 Kg1 13.Qxe3(0:00:07) 26446kN
[+2.14]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2 Kg1 13.Qxe3 Kg2(0:00:07) 25502kN
[+2.10]  d=17  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2 Kg1 13.Qxe3 Kg2 14.Qe2(0:00:06) 23258kN
[+2.06]  d=16  1.Nf6 Kg7 2.Nh5 Kg6 3.Bc2 Kxh5 4.d8Q Kg4 5.Qf6 Kxg3 6.Qe5 Kf2 7.Qh2 Ke1 8.Qg1 Ke2 9.Qg4 Ke1 10.Ke5 Kf2 11.Bd1 Nc7 12.Qe2 Kg1 13.Qxe3 Kg2 14.Qe2 Kg3(0:00:06) 22280kN
[+2.10]  d=16  1.Nf6(0:00:06) 21321kN

Crystal ist also schon nach 6 Sekunden auf der richtigen Spur, während Stockfish eben fast 2 Minuten benötigte...
Parent - - By Robert Bauer Date 2021-08-22 19:07
Crystal kenne ich, da es eine relativ gute Festung-Detektion hat, z.B. kann Crystal bei der Abschätzung helfen, ob bei Endspielen mit Dame gegen Turm und einigen Bauern die Turm-Partei tatsächlich eine Festung errichten kann. Doch welche Funktion ist hier in Crystal, die Stockfisch nicht hat?

Die stärkere Selektion bei Stockfish würde ich hier nicht als Grund anerkennen. Hier muss es eher umgekehrt sein, dass Crystal "verrückten" Zügen selektiver nachgeht, ansonsten könnte ich mir 6 Sekunden Lösungszeit nicht plausibilisieren.
Parent - By Andreas Kuntze Date 2021-08-22 19:35
Ja, das mag vielleicht sein. Vielleicht sind es gerade die berühmten forcing moves, die Crystal prinzipiell verfolgt. Da ich selbst Programmierer bin, könnte ich mir den Quelltext mal genauer anschauen. Aber eigentlich mag ich nach den täglichen 8 Stunden Arbeit nicht auch noch in meiner Freizeit über Quelltexten hängen.

Ist aber auch egal. Mit geht es um die prinzipielle Verwendung unterschiedlicher Engines für dieselbe Stellung. Neben Crystal habe ich z.B. auch noch CorChess und Sugar AI ICCF regelmäßig im Einsatz, die immer wieder von Stockfish abweichende (positionelle) Pfade beschreiten wollen. Und selbst das von Frank Q. geliebte Wasp darf immer wieder seinen Senf dazu geben. Auf diese Weise ist die Wahrscheinlichkeit zumindest stark verringert, etwas Grundlegendes zu verpassen.
Parent - - By Michael Bechmann Date 2021-08-22 14:43 Edited 2021-08-22 15:17
Was ist ein grünes Netz?

Ohne davon etwas zu verstehen will ich die Folge mit 32768 und 65536 ergänzen. 

---
Das wäre eine Quizfrage wert:

Wo findet man ein grünes Netz?

a) beim Schach
b) im Supermarkt
c) auf einem Tennisplatz
d) auf einem Fischerboot ?


Prognose, wenn 100 durchschnittliche Nutzer abstimmen müssen:   A) 0%   B) 20 %  C) 50%  D) 30%
Parent - By Benno Hartwig Date 2021-08-22 15:11
Ich denke, mit "grünes Netz" sind einfach die grün hinterlegten Netze auf
https://tests.stockfishchess.org/nns
gemeint.
Also:
"Nets colored green in the table have passed fishtest testing and achieved the status of default net during the development of Stockfish."
Parent - - By Benno Hartwig Date 2021-08-22 16:41 Edited 2021-08-22 16:46
BTW:
Das Grüne Netz
oder auch
Grünes Netz
oder auch
Grünes Netz
oder auch
Das Grüne Netz
oder...
Parent - By Max Siegfried Date 2021-08-23 17:03
Die neue Architektur mit dem neuesten Netz schafft es 6 Teststellungen mehr (von den 238 Teststellungen) zu lösen.
Ich bin zufrieden.
Wobei es noch ganz schön lange dauern wird bis alle gelöst sind.
Hoffentlich kommen die Entwickler genauso schnell voran wie bisher.
Denn die Software ist für den Elo Zuwachs wichtiger als die Hardware.
Up Topic Hauptforen / CSS-Forum / Stockfish immer größere Netze

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill