Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / LeelaFish für Anfänger
- - By Stefan Pohl Date 2019-02-26 17:54 Upvotes 6
Horst S. hat mich um eine Starthilfe für Leelafish gebeten. Da das evt. auch andere Leute interessiert, hier also als Posting.

https://github.com/killerducky/lc0/wiki/LeelaFish

Zunächst mal vorab: LeelaFish ist noch sehr unausgereift. Ich beziehe mich im Folgenden auf CUDA-Version von LeelaFish v0.3 (v0.4 ist völlig verbuggt und v0.5 kann ich noch nicht einschätzen. v0.3 läuft halbwegs stabil, zumindest mit einigen Engines) und die Nutzung in Fritz16 (LittleBlitzerGUI geht auch, soweit ich das bisher überblicke, aber in der LBG läuft ja eigentlich alles).

Als AuxEngine funktionieren - soweit momentan bekannt - Stockfish und Houdini 6. Komodo geht nur ohne pondern (FritzGUI). Ethereal geht bei mir unter Fritz16 nicht im Dauerbetrieb. Andere Engines hab ich noch nicht probiert. Ich persönlich finde auch Houdini am interessantesten. Aber wer Erfahrungswerte mit anderen Engines hat, bitte gerne hier posten.

Man braucht nun zunächst mal einen Ordner, in den man das LeelaFish v0.3 .exe - File (heißt lc0.exe) (entzipt, versteht sich) hineinpackt, sowie die AuxEngine, die man nutzen will und die CUDA-Dateien, die man im Download von LeelaFish NICHT findet, dazu muß man sich die aktuelle Version von lc0 v0.21.0 CUDA herunterladen und die CUDA-Files von dort nehmen. Auch gibt es mittlerweile wieder ein Update für die Grafiktreiber von NVIDIA (CUDA 10.1), also sollte man seinen Grafiktreiber aktualisieren und den PC dann frisch booten.

Dann erzeugt man LeelaFish als UCI-Engine in Fritz (Priority below normal). Wenn das passiert ist, geht man in die erweiterten Engineeinstellungen. Dort findet man die Aux-Parameter:

AuxEnginePath : hier gibt man nur den Namen des .exe-files der AuxEngine ein (das reicht, da sich die Auxengine ja im gleichen Ordner befindet wie LeelaFish (s.o.))
AuxEngineOptions: hier kann man UCI-Parameter an die AuxEngine übergeben. Das ist etwas tricky: Man darf nämlich keine Leerzeichen zwischen den Parametern haben, nur ein Semikolon. Und auch keine Anführungsstriche, was wohl manche gemacht haben, weil dort STRING als Format steht. Also was z.B. bei Houdini 6 als Parameter korrekt wäre, wenn man auch den Tactical Mode nutzen will:
AuxEngineOptions:Hash=1024;Threads=1;Tactical Mode=1
AuxEngineThreshold: Legt fest, wann die AuxEngine konsultiert wird. Default ist 100, also, wenn Lc0 eine Stellung 100x in der MCTS-Suche "besucht", dann wird die AuxEngine hinzugezogen. Hier müßte man noch viel experimentieren. Bei schnellen RTX-Karten und in meinem long thinking-time Turnier scheint der Wert 100 ganz gut zu funktionieren. Bei kurzen Bedenkzeiten und/oder langsamen GPUs, sollte man den Wert sicher heruntersetzen. Ich nutze jetzt mal 20 in meinem 3'+1'' Testrun, der gerade läuft. Das läßt sich auch ganz gut an bisher.
AuxEngineDepth: Legt die Suchtiefe der AuxEngine fest. Hier muß man Bedenkzeit und CPU-Geschwindigkeit berücksichtigen. Und auch, daß z.B. Stockfish höhere Suchtiefen anzeigt, als z.B. Houdini. Hier würde ich im Daueranalysemodus der FritzGUI mal rumprobieren, bis LeelaFish praktisch verzögerungsfrei Hauptvarianten auswirft, wenn man einen Zug auf dem Brett ausführt. Für Houdini im singlecore-Modus ist je nach Bedenkzeit 14 oder 16 angebracht. Bei Stockfish könnten es wohl auch 16-18 sein. Auch hier gilt: Es muß noch viel herumprobiert werden! Ich hoffe aber, daß der Autor hier noch umstellt von fixer Suchtiefe (was ich für Schwachsinn halte, weil im Endspiel diese Tiefe ja viel schneller erreicht wird als im Mittelspiel) auf fixe Suchzeit (go movestime).
AuxEngineBoost: Legt fest, wie stark die "Meinung" der AuxEngine in die "Bewertung" von lc0 einfließt. Auch hier kann ich noch überhaupt nicht sagen, welcher Wert wirklich gut ist. Ganz schlecht scheint die default-Einstellung von 50 aber nicht zu sein. Ein zu hoher Wert würde die Spielweise von lc0 zunichte machen, ein zu niedriger Wert würde die Wirkung der AuxEngine zunichte machen...
AuxEngineFollowPVDepth: Legt fest wieviele Halbzüge der Hauptvariante der AuxEngine berücksichtigt werden. Default ist 3 (in neueren Versionen wohl 4). Auch hier gilt: Schwer zu sagen, was gut ist. Zuviel macht die Qualität wackelig. Zuwenig bringt dann nix... Auch hier ist 3 auf jeden Fall kein ganz schlechter Wert. Aber auch hier müßte noch viel probiert werden.

Hat man alles nach Wunsch eingestellt, startet man LeelaFish mal probeweise im Daueranalysemodus. Nun nicht erschrecken: Es poppt ein schwarzes, leeres Fenster auf, das ist die Aux-Engine, bzw. ihr Windows-Task. Dieses Fenster auf gar keinen Fall wegklicken. Sondern Fritz16 einfach wieder in den Vordergrund klicken. Sonst schließt man die AuxEngine! Das Fenster muß immer da bleiben!

Das sollte es eigentlich gewesen sein...
Parent - - By Horst Sikorsky Date 2019-02-26 23:33
Vielen Dank Stefan!
es läuft, und jetzt kann ich probieren 
Parent - - By Stefan Pohl Date 2019-02-27 08:26 Upvotes 2
Schön, wenn ich helfen konnte. Als kleines Update: der Autor hat mir auf talkchess gerade zugesichert, die Steuerung der AuxEngine von einer vorgegeben Suchtiefe auf eine vorgegebene Zeit umzustellen. Das ist sehr begrüßenswert, weil man dann unabhängig von den jeweiligen Suchtiefen der Engines, der benutzten Hardware und der Zahl der Cores einen guten Wert festlegen kann, der sich dann primär an der genutzten Bedenkzeitstufe der eigenen Tests/Turniere orientiert. Das wäre viel besser.
Insofern macht es keinen Sinn, jetzt am Parameter der Suchtiefe für die Auxengine herumzuprobieren, da das bald obsolet sein wird.
Parent - - By Horst Sikorsky Date 2019-02-27 13:58 Edited 2019-02-27 14:06
Stefan Pohl schrieb:

Schön, wenn ich helfen konnte. Als kleines Update: der Autor hat mir auf talkchess gerade zugesichert, die Steuerung der AuxEngine von einer vorgegeben Suchtiefe auf eine vorgegebene Zeit umzustellen. Das ist sehr begrüßenswert, weil man dann unabhängig von den jeweiligen Suchtiefen der Engines, der benutzten Hardware und der Zahl der Cores einen guten Wert festlegen kann, der sich dann primär an der genutzten Bedenkzeitstufe der eigenen Tests/Turniere orientiert. Das wäre viel besser.
Insofern macht es keinen Sinn, jetzt am Parameter der Suchtiefe für die Auxengine herumzuprobieren, da das bald obsolet sein wird.

Frage: ich habe für die Auxengine Suchtiefe 20 eingestellt, hilft die Engine dann nur bis Suchtiefe 20?
Grüße Horst
Parent - By Stefan Pohl Date 2019-02-27 15:11 Edited 2019-02-27 15:20 Upvotes 1
Nein. Die Auxengine rechnet so tief ab der Stellung, wo sie von lc0 aufgerufen wird, egal bei welcher Tiefe lc0 auf diese Stellung gestossen ist.
Ob die AuxEngine von lc0 in einer Stellung konsultiert wird, hängt nur vom Parameter AuxEngineThreshold ab. Dieser hat nichts mit der Tiefe zu tun, sondern nur mit der Häufigkeit, mit der die Stellung in der MCTS Suche von lc0 vorkam.

Zur Klarstellung: die beiden Parameter AuxEngineOptions und AuxEngineDepth sind reine Steuerungsparameter für die AuxEngine, die nur innerhalb der AuxEngine genutzt werden, wann immer diese von lc0 gestartet wird. Für bzw. In Lc0 sind diese beiden Parameter bedeutungs- und wirkungslos. Genau umgekehrt ist es bei den Parametern AuxEngineThreshold und AuxEngineBoost und AuxEnginePVDepth. Diese sind innerhalb der AuxEngine bedeutungs- und wirkungslos und dienen nur dazu, festzulegen, wann lc0 die AuxEngine startet und wie stark die Ergebnisse in die lc0-Suche eingespeist werden.
Parent - By Lothar Jung Date 2019-02-27 07:54
Danke,
aller erste Sahne!
Parent - - By Dieter Kraft Date 2019-02-28 17:48 Edited 2019-02-28 18:34
Hallo Stefan
Stefan Pohl schrieb:

Dann erzeugt man LeelaFish als UCI-Engine in Fritz (Priority below normal). Wenn das passiert ist, geht man in die erweiterten Engineeinstellungen.

Bis hierhin bin ich gekommen, und in C:\Users\dk\Documents\ChessBase\lc0-v0.21.0-fish-v0.5-windows-cuda
residieren jetzt folgende files: cudart64_100.dll, cudann_7.dll, lc0.exe und stockfish_19022713_x64.exe (benötgt man da kein weights file?).
Die Nvidia GeForce Treiber sind auf 419.17-desktop upgegradet.
Aber weder unter Fritz14 noch unter CB15 kann ich eine lc0_irgendetwas.uci erstellen. Es ercheint kein Name, das Feld ist leer.
Gruß, Dieter
Parent - - By Stefan Pohl Date 2019-02-28 21:05 Edited 2019-02-28 21:10 Upvotes 3
Na, dann mal ganz von vorne und step-by-step (ich erweitere dafür mal meine lc0 step-by-step Anleitung, das geht schneller.):

1) Leeren Ordner auf dem PC anlegen, wo LeelaFish rein soll.
2) Auf https://github.com/LeelaChessZero/lc0/releases die aktuelle CUDA-Version von Leela herunterladen. Dies ist ein sehr großes (249 MB) geziptes Verzeichenis (eben weil die CUDA-10 Dateien schon dabei sind)
3) Den Inhalt des gezipten Verzeichnisses in den leeren Ziel-Ordner (siehe 1) reinentpacken. Der Ordner muß nun 9 Dateien enthalten: 4 Textdateien, 3 Cuda-Dateien und die lc0.exe und die client.exe
4) auf der Netzwerkseite http://testserver.lczero.org/networks das gewünschte Netzwerkfile herunterladen
5) Es soll wohl auch direkt funktionieren, aber ich entpacke das File (siehe 4) mit dem 7z-Packer (http://www.7-zip.de) immer (ein sehr nützliches Tool, dessen Installation sowieso lohnt!). Dies ergibt einen Ordner, der eine Datei mit der Endung .pb enthält. Das ist das NeuralNetz. Diese Datei in den Ziel-Ordner (1) hineinkopieren. Damit muß dieser Ordner nun 10 Dateien enthalten: 4 Textdateien, 3 Cuda-Dateien, die lc0.exe, client.exe (braucht man nur, wenn man Rechnerzeit für das NeuralNetz-Lernen stiften will) und das NeuralNetz (Datei mit Endung .pb)
6) Nun auf https://www.nvidia.de/Download/index.aspx?lang=de den passenden Treiber für die eigene GPU auswählen, herunterladen und die Installation starten. Dabei keine Angst: Lädt man den falschen Treiber, so erkennt das das Installationprogramm und installiert diesen nicht, es kann also nix kaputt gehen!
7) Wenn die Installation (6) abgeschlossen ist, den Rechner neu starten.
8) Auf https://github.com/killerducky/lc0/releases die neueste CUDA-Version von LeelaFish runterladen und entpacken. Das ergibt eine einzige Datei: lc0.exe. Dieses File in den Ordner kopieren und somit das ursprüngliche lc0.exe File überschreiben.
9) Das .exe-File der gewünschten AuxEngine auch noch in den Ordner kopieren.
10) nun in der GUI das lc0.exe File als UCI-Engine erzeugen.
11) in den Engine-Einstellungen die AuxEngine unter AuxEnginePath (oder in neueren Versionen wohl AuxEngineFile) spezifizieren. Und die gewünschten UCI-Parameter der AuxEngine (Hash, Threads etc.) - wie schon beschrieben - mit Semikolon getrennt und ohne Leerzeichen - über den Parameter AuxEngineOptions an die AuxEngine übergeben. Und dann noch die restlichen Aux-Parameter wie gewünscht setzen.
Parent - By Dieter Kraft Date 2019-02-28 22:35 Edited 2019-02-28 22:38
Man muss tatsächlich ALLE files in den Zielordner hineinkopieren,
auch die txt files und das COPYING, nur dann funktioniert es, danke.
Gruß, Dieter
Parent - By Thomas Plaschke Date 2019-03-02 13:05
Auch von mir vielen Dank für die Hinweise.
Ich habe auch gleichmal versucht, die "Wirksamkeit" der Kombination mit einer Engine fürs "taktisch Grobe" zu testen.
Als A/B-Engine habe ich mich für CorChess 3.0 entschieden, weil sie mE einen etwas besseren taktischen Blick hat als Stockfish (ähnlich bspw. McCain X oder Matefinder). Als Engine-Parameter verwendete ich Threads=2;Hash=1024;Contempt=0. AuxEngineDepth hatte ich auf 13 gesetzt (CorChess "rast" nicht so schnell in die Tiefe wie Stockfish). Die Pfade zu 6-Steiner Syzygy-TBS waren gesetzt. Die übrigen Leelafish-Parameter habe ich von der Empfehlung übernommen oder sie blieben auf default.
Im Spießrutenlauf spielte LeelaFish bei einer Bedenkzeit von 1'+3" je 70 Partien gegen CorChess 3.0 und LC0 mit dem gleichen NN-11248. CorChess-3.0 spielte mit 3 Threads, damit liegt auf meinem PC die Leela-Ratio um 1.
Code:
1 LeelaFish-id11248 [CorChess-3]: 3011  140 (+ 23,=103,- 14), 53.2 %
CorChess-3.0                  :  70 (+ 11,= 51,-  8), 52.1 %
LC0-id11248                   :  70 (+ 12,= 52,-  6), 54.3 %

2 CorChess-3.0                  : 2996   70 (+  8,= 51,- 11), 47.9 %
LeelaFish-id11248 [CorChess-3]:  70 (+  8,= 51,- 11), 47.9 %

3 LC0-id11248                   : 2981   70 (+  6,= 52,- 12), 45.7 %
LeelaFish-id11248 [CorChess-3]:  70 (+  6,= 52,- 12), 45.7 %

Die Remisquote ist nur etwas kleiner als 75 % und die Errorbar relativ hoch, aber ich glaube, man kann sagen, dass der Ansatz von LeelaFish nicht ohne Wirkung ist: Es ist anscheinend stärker/mindestens so stark wie seine Komponenten.

Viele Grüße
Th. Plaschke
Parent - - By Stefan Pohl Date 2019-03-04 14:55 Edited 2019-03-04 15:07
Auf meiner Website sind nun Testergebnisse von Leelafish online (v0.3, mit Net 32930 (TCEC Superfinal 14 Net), Houdini 6 als AuxEngine)

Ein 3'+1“ Testrun mit 1200 Partien:
https://www.sp-cc.de

Und gute 300 Partien im long thinking-time Turnier:
https://www.sp-cc.de/long-thinkingtime.htm

Auffallend ist die sehr hohe Remisquote. Sowohl mit dem HERT-Set als Vorgabe und kurzer Bedenkzeit, als auch mit Drawkiller als Vorgabe mit langer Bedenkzeit, ist die Remisquote auffallend hoch - also signifikant höher als bei anderen Runs. Obwohl ich Houdini als AuxEngine mit dem default-Contempt habe laufen lassen. Merkwürdig.

Die Eloleistung ist dafür aber auch beträchtlich höher, als wenn Leela alleine spielen mußte: +100 Elo im 3'+1“ Testrun und +60 Elo im long thinking-time Turnier. Das ist natürlich ganz ordentlich.

Ich habe übrigens ein paar Schnelltests mit einigen AuxParametern gemacht:
Den Threshold zwischen 20-100 zu variieren (je nach Bedenkzeit) macht nicht viel aus. Unter 20 wirds aber deutlich schlechter.
Der Boost ist mit dem default-Wert (50) am besten. Sowohl 25 als auch 100 waren deutlich schwächer.
Nur so als allgemeine Hilfestellung für eigene Tests/Turniere...
Parent - By Lothar Jung Date 2019-03-04 19:37
Beim Testrun 3‘+1‘ ist Houdini alleine stärker als in der Kombi mit Leela.
Vielleicht schneidet die Kombi mit Netz 41306 besser ab.
Bei meinem laufenden Test macht das Netz gegen SF10 einen guten Eindruck.
- - By Karsten Liesmann Date 2019-02-27 20:36 Edited 2019-02-27 20:40 Upvotes 1
Wirklich sehr interessant. Ich habe dies mal an der nachfolgenden Stellung getestet, die bislang noch kein LC0-Network bei mir lösten konnte:



6r1/3nkp2/p3p3/q5P1/bp1NPQ2/7R/P2RBPK1/2r5 w - - 0 27

Ich habe zunächst die oben beschriebenen Default-Einstellungen benutzt mit einer Suchtiefe der AuxEngine (Stockfish 10) von 16. Nach 2 Minuten schlug die Engine immer noch 27.Sf3 vor. Das Erhöhen der Suchtiefe von 16 auf 25 ergab nach 40 Sekunden den Lösungszug 27.Sb5!
Parent - - By Ernest Bonnem Date 2019-02-28 03:12 Edited 2019-02-28 03:15
Karsten Liesmann schrieb:

6r1/3nkp2/p3p3/q5P1/bp1NPQ2/7R/P2RBPK1/2r5 w - - 0 27

Ich habe zunächst die oben beschriebenen Default-Einstellungen benutzt mit einer Suchtiefe der AuxEngine (Stockfish 10) von 16. Nach 2 Minuten schlug die Engine immer noch 27.Sf3 vor. Das Erhöhen der Suchtiefe von 16 auf 25 ergab nach 40 Sekunden den Lösungszug 27.Sb5!

Komisch !
Tord Romstads uralte Stockfish für iPad (iOS) findet in 10 Sek. 27.Sb5, zwar auf Tiefe 20.
Parent - - By Peter Martan Date 2019-02-28 10:04
Was ist daran komisch, Ernest?
Parent - - By Ernest Bonnem Date 2019-02-28 12:13
Naja, komisch ist vielleicht nicht das beste Wort...

Ich bin nur erstaunt, dass Stockfish10 da 40 Sek. braucht ! 
Parent - By Peter Martan Date 2019-02-28 12:27
So wie ich das verstanden habe (aber ich verstehe davon überhaupt sehr wenig bis nix ) wird SF als AuxEngine von LC0 im LeelaFish- Modus erst zugezogen, wenn die, der, das anfängt zu zweifeln, dass sie, es, er die Aufgabe allein schon richtig gelöst hat.

Eine prinzipielle Unklarheit für mich an der Sache sowieso, dass es sicher Stellungen gibt, die SF besser löst und wahrscheinlich schon auch einige, die LC0 (alleine) besser löst, halt mehr die positionellen in Eröffnung und frühem Mittelspiel vermutlich, und dass dann auch bestimmte Stellungen von LeelaFish (wie auch immer man den dann konfiguiert in seinen vielen Settings) schneller gelöst werden werden, als von SF oder von Leela allein, das sieht man ja auch an diesem Beispiel, was Leela allein angeht (ohne das auch selbst probiert zu haben, nur nach dem, was Karsten dazu schreibt.

Ich würde halt beim Analysieren auf jeden Fall immer beide Engines (eventuell gleichzeitig?) allein rechnen lassen, dann wüsste ich, welcher Zug von welcher Engine in welcher Zeit und Tiefe kommt und könnte im Zweifelsfall, welcher wirklich von verschiedenen Zügen besser wäre, beide wechselseitig Forward- Backward probieren lassen.

Im automatischen Spiel kommt's darauf vielleicht weniger an, Hauptsache, es gibt Punkte für die Partie, aber woher welcher Zug kam, würde mich, wenn ich mir die Partien überhaupt anschaue, doch auch immer wieder mal interessieren.

Just my 2 Cents.

P.S. Entschuldige mein eigenartiges Deutsch, Ernest, aber du kennst mich ja. Google Translator macht daraus auf Französisch erst recht Lustiges, hab's grad probiert.
Parent - - By Karsten Liesmann Date 2019-02-28 17:40
Stockfish "alleine" braucht bei mir 2 Sekunden.
Parent - - By Ernest Bonnem Date 2019-03-01 00:20
Also, warum 40 Sekunden (!) für LeelaFish ?
(auch mit Deiner Erklärung, Peter...)
Parent - By Peter Martan Date 2019-03-01 00:44 Edited 2019-03-01 01:06
Vielleicht so, Ernest, ich glaube, der Name ist falsch, es sollte FishLeela heißen, sonst wär's ja mehr ein Fisch als eine Leela, und das ist es eben nicht.

Ich persönlich glaube, es würde umgekehrt auch besser funktionieren, obwohl wahrscheinlich nicht im automatischen engine- engine game playing, weil's dabei auf die Eröffnung 3x so viel ankommt, wie auf's Mittel-(spezielle Stärke x2) und auf's Endspiel (1x).

Aber ich war halt immer mehr interessiert an der Analyse.

http://talkchess.com/forum3/viewtopic.php?p=791628#p791628

Edit: Der Link war zuerst falsch, hab' ihn ausgebessert.
Up Topic Hauptforen / CSS-Forum / LeelaFish für Anfänger

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill