Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / NNUE downgraden?
- - By Robert Bauer Date 2021-08-06 17:14
Hallo,

ich habe einen alten CFish Ext. Leider wird dieser nicht mehr - zumindest aktuell - weiterentwickelt.
Ich benutze das Netz "nn-62ef826d1a6d.nnue" mit der Größe 20,05 MB.
Leider funktionieren alle Netze danach nicht mit diesem CFish Ext.
Es kommt zu Abstürzen.
Ich weiß leider auch nicht, welche Architektur das Netz "nn-62ef826d1a6d.nnue" hat.
Aber wäre es möglich, von den neueren Netzen mit 512 oder 1024 einen Downgrade zu machen?
Parent - By Andreas Matthies Date 2021-08-06 18:25
Nein.
Parent - - By Peter Martan Date 2021-08-06 18:40
Hallo Robert!

Bevor ich dir den direkten Link zum Download schicke, den ich von hier habe

http://outskirts.altervista.org/forum/viewtopic.php?p=33130&view=single_post#p33130

lies dir vielleicht (du bist ja im Outskirts auch registriert, soviel ich weiß) den Thread noch durch, der danach weiter geht. ChessMan selbst hat an den späteren Compiles immer wieder gezweifelt, bei mir hat eines danach auch noch funktioniert, aber am 29.7. schrieb er noch

http://outskirts.altervista.org/forum/viewtopic.php?p=33567&view=single_post#p33567

Einen solchen wirst du ohnehin haben, ansonsten findest du im Thread auch Links zu aktuell(er)en CFish Sourcen, falls du selbst ein Compile probieren willst, ich warte auf Weiteres von ChessMan, mit dessen Compiles ich immer zufrieden war.

Wenn du mit Downgrade meinst, die neueren Netze mit älteren CFisch- Versionen, da müsstest du den Unterschied im Code finden, der soll, was die Netzgröße allein angeht, nicht kompliziert sein, aber wie das mit den Patches ist, die die neuen Netze vielleicht sonst so nützen, weiß ich leider auch nicht.
Parent - - By Robert Bauer Date 2021-08-07 08:00
Hallo Peter,

vielen Dank für den Hinweis.
Diesen Thread zu CFish kannte ich schon.
Mein Prozessor benötigt aber den BMI Compile, der "broken" ist.
Das 1024-Netz wird hoffentlich auch bald beim CFish einsetzbar sein.
Hier muss man einfach abwarten bis ein BMI2 Compile und eine 1024-Netz-kompatible Version herauskommt.

Meine Frage war aber nach dem CFish EXT. Romeo ist wohl nicht mehr aktiv, sodass diesbezüglich meine Hoffnungen gering sind, dass es mit der EXT jemals weitergeht.
Da Romeo seinen Code nie veröffentlicht hat - Diskussionen hierzu sind müßig - habe ich auch keinen Ansatz zur Modifikation.

Meine Frage war, ob es nicht ein Tool gäbe, um aus einem 1024-Netz der Größe 45 MB ein Netz der Größe 20 MB zu machen.
Um also quasi aus einem Menschen-Hirn ein Schimpansen-Hirn zu machen. Kann man das so vergleichen? 
Parent - - By Benno Hartwig Date 2021-08-07 08:19

> Meine Frage war, ob es nicht ein Tool gäbe, um aus einem 1024-Netz der Größe 45 MB ein Netz der Größe 20 MB zu machen.



Sage doch mal: Welche Erwartungen hättest du denn eigentlich an solch ein "downgegradetes" Netz? 
Parent - - By Robert Bauer Date 2021-08-07 09:30
Dass es besser ist als "nn-62ef826d1a6d.nnue", da mittlerweile ein halbes Jahr vergangen ist.
Parent - By Benno Hartwig Date 2021-08-07 09:55
Und du meinst, dass dieses "besser" bei einem wie auch immer gearteten "Downgrade" erhalten bleiben könnte???
Ausgesprochen mutiger Optimismus ist das, Robert. Finde ich.
Parent - By Andreas Matthies Date 2021-08-07 08:21 Edited 2021-08-07 08:25 Upvotes 1
Das Featureset hat sich doch zwischen den alten 20MB HalfKP-Netzen und den aktuellen 45MB HalfKAv2 Netzen ziemlich drastisch geändert.
Siehe https://github.com/glinscott/nnue-pytorch/blob/master/docs/nnue.md

Ein Konvertierungstool müsste die "neuen Features" ja aus dem Netz entfernen und den Rest zumindest "umrechnen" und ich kann mir beim besten Willen nicht vorstellen, dass das, was da übrig bleibt, auch nur entfernt an die Spielstärke des besten HalfKP Netz herankommt...
Edit: Vermutlich habe ich nicht weit genug gedacht. Für HalfKAv2 existiert wahrscheinlich schon ein Cfish, nur für die neuen Dimensionen noch nicht?
Edit2: Allerdings fragst du ja explizit nach einem Tool für 45MB Netz -> 20MB Netz. Und da bin ich mit meinem Beitrag wieder im Spiel
Parent - - By Peter Martan Date 2021-08-07 08:32
Soviel ich weiß, ist Romeo das frühere Pseudonym von ChessMan, aber jedenfalls hat dieser (fast) alle Parameter der Ext- Versionen offengelegt im Code, um sie weiter im Outskirts veröffentlichen zu können, bei den Versionen der letzten Monate müsstest du immer auch die Sourcen im Download gehabt haben. Neue Ext- Versionen gibt's allerdings schon länger keine mehr, da schrieb ChessMan immer, er werde damit fortsetzen, wenn RdM mit den SF- Patches aufgeholt hätte, man sollte ihn mal im Outskirts wieder fragen, aber momentan kämpft er ja eben offenbar mit CFish selbst, da wird's mit Ext wohl auch nicht klappen.

Das ist die letzte Version, die ich im eigenen CF_Ext- Thread von ChessMan gefunden habe, da sind die Sourcen sehr wohl dabei:

http://outskirts.altervista.org/forum/viewtopic.php?p=24470&view=single_post#p24470

Und anstatt das größere Netz "einzudampfen", müsstest du halt nur das im Engine- Code ändern, was sich auf die Netz-Größe bezieht.
Parent - - By Robert Bauer Date 2021-08-07 09:40
Da hätte ich vielleicht einfach auf meiner Platte gucken sollen, denn diese Version mitsamt Source ist ja gerade die letzte, die ich bereits hatte 

In nnue.c wird man fündig:

enum {
  kHalfDimensions = 256,
  FtInDims = 64 * PS_END, // 64 * 641
};

Ob es dann ausreicht, kHalfDimensions zu ändern auf 1024?

Ich muss mich dann erst mal mit dem selbst kompilieren beschäftigen.
Ich befürchte, dass ich mit dem MSYS2 Compiler ein eher langsames EXE rausbekomme, aber wir werden sehen...
Parent - - By Peter Martan Date 2021-08-07 10:20
Robert Bauer schrieb:

Ob es dann ausreicht, kHalfDimensions zu ändern auf 1024?

Ich muss mich dann erst mal mit dem selbst kompilieren beschäftigen.
Ich befürchte, dass ich mit dem MSYS2 Compiler ein eher langsames EXE rausbekomme, aber wir werden sehen...


Wenn du überhaupt eine lauffähige .exe bekommst, wär' das schon von großem Interesse, weil man dann wüsste, ob's wirklich mit dem Ändern des einen Zahlenwertes getan wäre, das Kompilieren ist ja dann wieder eine Sache für sich.
Und wie Andreas schon schrieb, auf die SF- Patches, die nach Jahresanfang so alle dazu gekommen sind, und die RdM, soviel ich weiß, mittlerweile ja schon großteils eingearbeitet hat, verzichtest du so halt. Aber Sourcen, die die 45Mb- Netze nutzen, gibt's schon auf der Cfish- Site:

https://github.com/syzygy1/Cfish

Da müsstest du halt Vergleiche zu dem ziehen, was du hast und willst.
Viel Erfolg jedenfalls, wünscht
Parent - - By Robert Bauer Date 2021-08-07 16:41 Edited 2021-08-07 16:47
Nun, ich kann den CFish Ext von 040121 kompilieren.
Das ist doch schon mal was.
Die BMI2 Exe funktioniert auch.

Der Code unter https://github.com/syzygy1/Cfish ist aber bzgl. der Sourcen, die nnue betreffen, quasi identisch.
Die marginalen Änderungen haben keinen Einfluss.
Dort ist auch der Wert auf 256.

Wenn ich den Wert auf 1024 ändere, bekomme ich beim Kompilieren:

Step 1 läuft durch.

Step 2/4. Running benchmark for pgo-build ...
./cfish bench 16 1 15 default depth nnue > /dev/null
make: *** [Makefile:857: profile-build] Error 139

Edit: ich werde es mit den Änderungen von Sopel mergen:

https://github.com/Sopel97/Cfish/tree/update

Sopel ist ja auch derjenige, der ein gutes 1024 Netz veröffentlicht hat.
Parent - - By Robert Bauer Date 2021-08-07 17:04
Ich kann https://github.com/Sopel97/Cfish/tree/update zwar kompilieren und bekomme eine CFish BMI2 exe,
aber auch damit läuft kein 1024 Netz.

nn-56a5f1c4173a.nnue läuft.
nn-796849a37a9e.nnue läuft nicht.
Parent - - By Peter Martan Date 2021-08-07 18:24
Robert, dass ein 1024- Netz läuft, hätte ich auch nicht angenommen, da gibt's vom SF dev. erst die eine oder andere Version, die das kann.
Cfish war gerade erst auf den Stand gekommen, die 45Mb- Netze statt der 20Mb zu nutzen, darauf hatte ich (vielleicht missverständlich, sorry) hingewiesen mit dem github- Link.
Steht denn jetzt schon überhaupt fest, dass sich 1024 im Framework durchsetzen wird?
Entschuldige, aber ich habe mir einfach abgewöhnt, immer bei den Ersten sein zu müssen, die etwas testen, das neu herauskommt.
Man ärgert sich rum, bis es läuft, weil's noch keine allgemeinen Routinen gibt und dann stellt sich heraus, dass es doch nicht das Gelbe vom Ei ist und man hätte sich die Mühe sparen können.
Parent - - By Robert Bauer Date 2021-08-07 18:39 Edited 2021-08-07 18:42 Upvotes 2
Nun, ich habe schon das Compile von Stockfish mit dem neuen 1024er Net ausprobiert.
Dies überzeugte mich einfach beim Analysieren meiner Partien.
Natürlich wurde dadurch der Wunsch nach einem entsprechenden CFish geweckt.
Als Fernschachler kann man Monate des Engine-Tunings aussetzen, aber man darf nicht neueste Minirevolutionen verpassen.

Ich hatte auch zunächst nicht angenommen, dass das 1024er mit CFish läuft.
Aber wenn man dann einerseits sieht, dass "Sobel" ein 1024er NNUE rausgebracht hat und andrerseits ein CFish-Update auf Github gestellt hat, dann lag der Schluss nahe, dass es gehen könnte,
Leider Pustekuchen.

Du hast es aber geschafft, dass ich nun CFish kompilieren kann.
Heureka! Das war heute ein Erlebnis!
Parent - - By Max Siegfried Date 2021-08-07 22:31
CFish macht doch nur Sinn wenn dieser auf dem aktuellen Stand von Stockfish ist.
Erst dann macht sich der Geschwindigkeitsvorteil / Elo minimal bemerkbar.
Ansonsten haben beide die gleiche Elo oder CFish ist sogar schwächer, je nach dem wieviele Monate CFish zurückliegt.
Der Entwickler müsste sich einmal die Mühe machen CFish wieder ganz aktuell zu machen, sonst macht das alles keinen Sinn.
Parent - - By Robert Bauer Date 2021-08-08 10:40 Edited 2021-08-08 10:45
Jeder hat da seine Meinung.

Wenn ich sehe, dass CFish auf meinem Rechner 40 MN/s macht und Stockfish 25 MN/s, dann wären mir manche Fixes egal, die 15 ELO bringen gegenüber einem 1024 Netz, welches interessante Ergebnisse bei der Langzeitanalyse bietet - so denn es mal einen CFish-Code gibt, der das 1024 Netz unterstützt.
Früher war Stockfish auch mal bei deutlich höheren MN/s. Jetzt nicht mehr. Mit jeder Code-Änderung wird Stockfish langsamer. Einerseits gewinnt man eine verlässlichere Evaluierung bei immer mehr (Ausnahme!?)-Stellungen, andrerseits verliert man Tiefe. Dies muss jeder selbst abwägen.
Parent - - By Benno Hartwig Date 2021-08-08 11:01 Edited 2021-08-08 11:08
40 zu 25
ist das Geschwindigkeitsverhältnis von CFish zu Stockfish???
Du siehst mich überrascht. Das wäre sehr, sehr viel!

Aber, gibt es dazu wirklich belastbare Tests (vergleichbare Einstellungen, gleiche Stellungen, gleiches Netz, etliche Durchgänge, verschiedene Prozessoren...) im Netz, die dann von solch einer großen Diskrepanz sprechen?
Parent - By Max Siegfried Date 2021-08-08 11:31
Benno Hartwig schrieb:

40 zu 25
ist das Geschwindigkeitsverhältnis von CFish zu Stockfish???
Du siehst mich überrascht. Das wäre sehr, sehr viel!

Aber, gibt es dazu wirklich belastbare Tests (vergleichbare Einstellungen, gleiche Stellungen, gleiches Netz, etliche Durchgänge, verschiedene Prozessoren...) im Netz, die dann von solch einer großen Diskrepanz sprechen?


Das wundert mich auch.
Bei nur 25 sollte im Vergleich der CFish nur +33% schneller sein.
= 33,25.
Parent - - By Thomas Plaschke Date 2021-08-08 15:39
Nicht vergessen: Cfish arbeitet noch das "kleine" Netz ab. Ist SFdev nicht inzwischen sogar 2 "Netzdefinitionen" weiter? Für die 1. Variante, die Cfish als nächstes bevorsteht, gab es einen deutlich nps-Einbruch (die Spielstärke nahm dennoch zu). Die aktuelle Entwicklungsversion scheint wieder schneller geworden zu sein. Für Vergleiche der nps würde ich Use NNUE abschalten. Vergleiche ich meine Compiles identischer Entwicklungsstände von Cfish und SFdev, liegt Cfish um kaum 10 % bei den nps vorn.

In Übrigen ist der Vergleich von nps bekanntermaßen ein Vergleich von Äpfeln mit Birnen, wenn nicht gleiche Entwicklungsstände verglichen werden.

Viele Grüße
Th. Plaschke
Parent - - By Benno Hartwig Date 2021-08-08 15:56

> In Übrigen ist der Vergleich von nps bekanntermaßen ein Vergleich von Äpfeln mit Birnen, wenn nicht gleiche Entwicklungsstände verglichen werden.


Das ist richtig.
Und wenn wirklich die Netze so unterschiedlich groß sind, ist ein nps-Vergleich ganz besonders unsinnig.

Wenn einen die eigentlichen Spielstärken interessieren, ist wohl der beste wenn auch sehr zeitaufwändige Weg, einfach sehr viele Partien spielen zu lassen.
Ruhig auch bei recht kurzen Zeitvorgaben.
(Die Aussagen von Stellungstests würden mir hingegen nicht genügen)
Parent - - By Thomas Plaschke Date 2021-08-08 17:56

> ... einfach sehr viele Partien spielen ...


Sehe ich auch so. Aber es hat auch eine witzige Facette: Die einen sehen die Vorteile für die Spielstärke in hohen nps (= schnelle Durchforstung des Spielbaums = schneller in die relevanten Tiefen, wo die besten Varianten auf ihre Entdeckung warten). Andere sehen in der intensiveren Untersuchung der Knoten den Schlüssel zur richtigen Verbesserung der Programme und ihrer Spielweise (= niedrige nps werden zum Qualitätsmerkmal. Ziel: Programme sollen planvoll spielen). Die Lösung: Zumindest für Letztere könnte die Lösung in langsameren PCs zu finden sein. Die Programme spielen umso planvoller, je langsamer der PC, weil die nps niedriger sind. Heute gibt es schlicht nicht mehr die richtige Hardware!

Viele Grüße
Th. Plaschke
Parent - - By Benno Hartwig Date 2021-08-08 18:37

> Die Programme spielen umso planvoller, je langsamer der PC...


Na, das ist aber mal eine interessante These.
Ich stimme zu: ein langsames Programm, welches nicht so in die Tiefe kommt, muss sich früher auf seine Stellungsbewertungen verlassen.
Wenn man dies denn als "Plan" (mangels taktisch starkem Erkennen) ansehen will...
Parent - By Thomas Plaschke Date 2021-08-08 18:59

> Wenn man dies denn als "Plan" (mangels taktisch starkem Erkennen) ansehen will...


Natürlich nicht.
Selbst M3 oder CSTal fassen keine Pläne. Aber wir müssen das nicht vertiefen (Opa erzählt vom Krieg: Geschichten aus der Computerschachsteinzeit.)

Viele Grüße
Th. Plaschke
Parent - - By Max Siegfried Date 2021-08-08 11:27
Robert Bauer schrieb:

Jeder hat da seine Meinung.

Wenn ich sehe, dass CFish auf meinem Rechner 40 MN/s macht und Stockfish 25 MN/s, dann wären mir manche Fixes egal, die 15 ELO bringen gegenüber einem 1024 Netz, welches interessante Ergebnisse bei der Langzeitanalyse bietet - so denn es mal einen CFish-Code gibt, der das 1024 Netz unterstützt.
Früher war Stockfish auch mal bei deutlich höheren MN/s. Jetzt nicht mehr. Mit jeder Code-Änderung wird Stockfish langsamer. Einerseits gewinnt man eine verlässlichere Evaluierung bei immer mehr (Ausnahme!?)-Stellungen, andrerseits verliert man Tiefe. Dies muss jeder selbst abwägen.


Gerade die Hardware Entwicklung hilft einem dabei die gewünschten kN/s beizubehalten oder sogar zu steigern.
Durch die doppelte Netzgröße auf 1024 haben wir 1/3 Geschwindigkeit verloren.
Anstatt 3/3 also nur 2/3.
Wenn man jetzt aber seine 32 Kerne CPU verkauft und eine 64 Kerne CPU kauft, dann wir aus der 2 eine 4 bzw. die doppelte Geschwindigkeit.
Parent - By Robert Bauer Date 2021-08-09 06:25
Wieso hat man 1/3 Geschwindigkeit verloren?
Parent - - By Robert Bauer Date 2021-08-13 21:56
Ich habe mir die letzte Version runtergeladen mit der Bezeichnung CF-120821_x64.7z und selber zusammengebaut, da die Sourcen enthalten waren.
Allerdings bin ich etwas verwirrt, da seit 10 Monaten anscheinend nicht mehr am Master weiterentwickelt wird, sondern nur noch an Branches, z.B. an diesen:

https://github.com/Sopel97/Cfish/tree/sf_2021-07-23: letzter Commit 24 days ago
https://github.com/Sopel97/Cfish/tree/update: letzter Commit 24 days ago
https://github.com/Sopel97/Cfish/tree/persistent_tt: letzter Commit 29 days ago

Ich habe keine Ahnung, was der Unterschied der 3 Versionen ist. Anscheinend wird z.Zt. wild gepatched.   
Parent - - By Peter Martan Date 2021-08-13 21:59 Edited 2021-08-13 22:07
Also willst du jetzt, dass die SF- Patches auch übernommen werden, oder nicht?

Wo sich die Versionen unterscheiden, musst du im Code nachlesen, es sei denn du meinst die Unterschiede zwischen den vielen verschiedenen Versionen in den Download- Links, die unterscheiden sich in den Compiler- Flags für verschiedene Hardware und eventuell auch im Compiler selbst, das sparse hingegen ist, glaube ich, wieder ein Unterschied im Source- Code.
Und hier noch von ChessMan das für bmi2, das du, wie ich mich erinnere, haben wolltest:

http://outskirts.altervista.org/forum/viewtopic.php?p=33911&view=single_post#p33911
Parent - - By Robert Bauer Date 2021-08-13 22:31
Eigentlich sollte es doch einen Master geben, an dem entwickelt wird und nicht viele Branches, die dann sowieso im Nirvana enden, d.h. nicht weiterentwickelt werden.
Aber vielleicht brauchen die Entwickler gerade eine Spielwiese, weil anscheinend einige Probleme existieren.
Selbstverständlich sollten irgendwann alle SF-Patches auch in den CFish-Master überführt werden.
Dazu gehört zukünftig auch das 1024-Netz oder noch besser erlaubt man ein beliebiges Netz. Dies wäre jedenfalls machbar, soviel lässt sich definitiv sagen.

Zu deinem Link ist der ChessMan Kommentar zu ergänzen: "Also i made PEXT build (BMI2 without AVX2 code)."

Ich habe mir jedenfalls selbst ein Compile mit der CommandLine "make profile-build ARCH=x86-64-bmi2" gemacht, wonach diese Flags gesetzt waren (also BMI2 und AVX2 aktiv sein sollten):

debug: 'no'
sanitize: 'no'
optimize: 'yes'
arch: 'x86_64'
bits: '64'
kernel: 'MSYS_NT-10.0-19041'
os: 'Windows_NT'
prefetch: 'yes'
popcnt: 'yes'
pext: 'yes'
sse: 'yes'
mmx: 'no'
sse2: 'yes'
ssse3: 'yes'
sse41: 'yes'
avx: 'no'
avx2: 'yes'
avx512: 'no'
vnni: 'no'
neon: 'no'
native: 'no'
embed: 'no'

Flags:
CC: gcc
CFLAGS: -Wall -std=c11  -pedantic -Wextra -Wshadow -m64 -Wno-pedantic-ms-format -DNDEBUG -O3 -DIS_64BIT -msse3 -mpopcnt -DUSE_POPCNT -DUSE_PEXT -msse4 -mbmi2 -DUSE_AVX2 -mavx2 -DUSE_SSE41 -msse4.1 -DUSE_SSSE3 -mssse3 -DUSE_SSE2 -msse2 -msse -DUSE_SSE -DNUMA -DNNUE
LDFLAGS:  -lm -m64 -Wl,--no-as-needed -lpthread

Zu Sparse:

Siehe: https://github.com/syzygy1/Cfish
Compiling Cfish
make target [ARCH=arch] [COMP=compiler] [COMPCC=gcc-4.8] [further options]

Further options:
sparse=yes/no  Enable/disable NNUE sparse multiplication

Dies ist also eine Compiler Option.

The sparse option selects between two different NNUE implementations. The option sparse=yes is likely superior (i.e. higher nps) for ARM-based CPUs, for Intel CPUs that do not support AVX2, and for AMD CPUs before Zen 3 (i.e. Ryzen 5000).

=> für meinen Intel Prozessor, welcher AVX2 unterstützt, also irrelevant.
Parent - By Thomas Plaschke Date 2021-08-13 23:42

> Dies ist also eine Compiler Option.


Nein, im makefile wird ggf. mit -DNNUE_SPARSE vom Programmautoren ein Makro definiert, das zur Steuerung der Codierung genutzt wird. Eine Compileroption wird vom Compilerbauer eingerichtet. Das wären bspw. -O3 oder -mtune=native.

Im Übrigen teilen ich Deinen Eindruck zu den verschiedenen Cfish-Versionen. Es wurde anscheinend auch die Nutzbarkeit der größeren Netze implementiert. Aber die Synchronizität mit Stockfish ist dabei verloren gegangen.

Viele Grüße
Th. Plaschke
Up Topic Hauptforen / CSS-Forum / NNUE downgraden?

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill