Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Nets schnell testen mit cutechess-cli
- - By Stefan Pohl Date 2019-07-21 09:40 Edited 2019-07-21 09:46
Wirklich schnelle Tests von lc0-Nets sind selbst mit der LittleBlitzerGUI kaum möglich, da diese unterhalb von 200ms Inkrement auch an ihre Grenzen stößt. Hier hilft nur cutechess-cli weiter, weil es mit diesem Tool möglich ist, die Zahl der durchzurechnenden Knoten pro Zug festzulegen, anstatt eine Bedenkzeit. Leider läßt sich dieses Tool nur mit einer monströs langen und unübersichtlichen command-line steuern. Daher habe ich mich mal hingesetzt und ein Beispiel erarbeitet und dieses dann auch in verständliche Stücke zerteilt und einzeln erläutert.
Die komplette command-line steht in der Datei start.bat, damit man cutechess-cli dann einfach per Doppelklick auf start.bat starten kann. Mit einem beliebigen Editor kann man die command-line in diesem start.bat-file dann den eigenen Wünschen entsprechend anpassen.

Download auf meiner Website:

https://www.sp-cc.de/files/cutechess-cli_v1.zip

Die Beschreibung ist natürlich auf Englisch, allerdings sehr simpel gehalten, das sollte jeder verstehen. Im konkreten Beispiel spielt lc0 mit einem Net gegen zwei andere Nets ein Gauntlet mit nur 100 nodes pro Zug - die (noch leeren !) Ordner sind im Download enthalten, sodaß die command-line nicht umgeschrieben werden muß, sofern man alles direkt auf Laufwerk C: speichert. 100 nodes pro Zug ist das schnellste Tempo, das in meinen Tests noch plausible Ergebnisse lieferte. Selbst auf meiner alten mobilen GTX950m kann ich so aber gut 150 Partien pro Stunde (!) spielen. Auf einer RTX-Karte sollten es noch weit mehr sein.
Zu beachten ist (und das steht auch in meinem ReadMe-file), daß die nodes-Zahl natürlich angepaßt werden muß, wenn man Nets unterschiedlicher Größe (und damit unterscheidlicher Verarbeitungsgeschwindigkeit) gegeneinander testen will!
Parent - - By Thomas Plaschke Date 2019-07-21 14:23
Wie immer sehr hilfreich!

Ich handhabe die Kommandozeilen-Version von Cutechess etwas anders. Meine Batch-Dateien sind etwas anders organisiert. Die gekürzte Fassung:
Code:
@ECHO off
CLS
REM Für jede Engine werden die Aufrufparameter in eine Variable geschrieben (alphabetische Sortierung hilft bei Änderungen, den Aufruf schneller zu finden )
SET An095=-engine name="Andscacs 0.95" cmd="C:\Engines\Andscacs\andscacs095\andscacs.exe" proto=uci restart=on option.NullMove=true option.Threads=1

SET Ch439=-engine name="Cheng 4.39" cmd="D:\Projekte\DevC\Cheng-4-39\src\cheng4\Cheng 4.39 x64[473].exe" proto=uci restart=on option.OwnBook=false option.NullMove=true option.Hash=256 option.Threads=1

:: Crafty ist eine xboard-Engine!
SET C252=-engine name="Crafty 25.2" cmd="D:\Projekte\DevC\Crafty-25.2\src\UCI\Crafty-25.2[810p].exe" proto=xboard restart=on whitepov initstr="hash=256M hashp=32M tbpath=E:/Endspieltabellen/szTB" option.cores=1
SET Cr16=-engine name="Critter 1.6a" cmd="C:\Engines\Critter\Critter 1.6a\Critter_1.6a_64bit.exe" proto=uci restart=on option.GaviotaTbPath=E:/Endspieltabellen/gtb option.GaviotaTbCompression=cp2 option."Tablebase Usage"=Everywhere option."Use Session File"=true option."Session File"="E:/Download/Schach/Critter/Critter 1.6a/session.csf" option.Threads=1

SET Fi71=-engine name="Fire 7.1" cmd="C:\Engines\Fire\Fire_7.1\Fire_7.1_x64_popcnt.exe" proto=uci restart=on option.SyzygyProbeDepth=8 option.SyzygyPath="E:\Endspieltabellen\szTB" option.SyzygyProbeLimit=6 option.Threads=1
SET Fb2=-engine name="Fizbo 2" cmd="C:\Engines\FizBo\fizbo2x64_bmi2.exe" proto=uci restart=on option.EGTBProbeLimit=6 option.SyzygyPath=E:\Endspieltabellen\szTB option.Hash=256 option.Threads=1

SET Ga10=-engine name="Gaviota 1.0" cmd="C:\Engines\Gaviota\gaviota-1.0-windows\gaviota-v1.0-win64-AVX.exe" proto=uci restart=on option.GaviotaTbScheme=cp2 option.GaviotaTbCache=128 option.GaviotaTbPath=E:\Endspieltabellen\GTB option.Hash=256 option.Cores=1
SET G3=-engine name="Gull 3" cmd="C:\Engines\GullChess\Gull 3\Gull 3 x64 BMI2.exe" proto=uci restart=on option."Large memory pages"=false option.Hash=256 option.Threads=1

SET Hk3=-engine name="Hakkapeliitta 3.0" cmd="D:\Projekte\DevC\Hakkapeliitta 3\src\Hakkapeliitta-3.0[492p].exe" proto=uci restart=on option.SyzygyPath="E:\Endspieltabellen\szTB" option."Pawn Hash"=128 option.Hash=256
SET Hi14=-engine name="HIARCS 14" cmd="C:\Program Files (x86)\HIARCS Chess\Deep HIARCS 14 WCSC\DeepHiarcs14WCSC.exe" proto=uci restart=on option."AutoSave PGN"=false option."Position Learning"=false option.OwnBook=false option."Book Learning"=false option.NalimovCache=64 option.NalimovPath="E:\Endspieltabellen\TB" option."Use Tablebases"=Normally option.Hash=256 option.Threads=1
SET Hi141T=-engine name="HIARCS 14" cmd="C:\Program Files (x86)\HIARCS Chess\HIARCS 14 WCSC\Hiarcs14WCSC.exe" proto=uci restart=on option."AutoSave PGN"=false option."Position Learning"=false option.OwnBook=false option."Book Learning"=false option.NalimovCache=64 option.NalimovPath="E:\Endspieltabellen\TB" option."Use Tablebases"=Normally option.Hash=256
SET Hi14mB=-engine name="HIARCS 14+Buch" cmd="C:\Program Files (x86)\HIARCS Chess\Deep HIARCS 14 WCSC\DeepHiarcs14WCSC.exe" proto=uci restart=on option."AutoSave PGN"=false option."Position Learning"=false option.OwnBook=true option."Book Learning"=true option.NalimovCache=64 option.NalimovPath="E:\Endspieltabellen\TB" option."Use Tablebases"=Normally option.Hash=256 option.Threads=1

SET K12=-engine name="Komodo 12.1.1" cmd="C:\Engines\Komodo\komodo-12.1.1_2d666b77\Windows\komodo-12.1.1-64bit-bmi2.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option."Syzygy Probe Limit"=6 option."Table Memory"=64 option.Hash=256 option.Threads=1
SET K12M=-engine name="Komodo 12.1.1 MCTS" cmd="C:\Engines\Komodo\komodo-12.1.1_2d666b77\Windows\komodo-12.1.1-64bit-bmi2.exe" proto=uci restart=on option."Use MCTS"=true option.SyzygyPath=E:\Endspieltabellen\szTB option."Syzygy Probe Limit"=6 option."Table Memory"=64 option.Hash=256 option.Threads=1

SET Sen2=-engine name="Senpai 2.0" cmd="D:\Projekte\DevC\Senpai-2.0\src\Senpai-2[730p].exe" proto=uci restart=on option.Hash=256 option.Threads=1
SET Sh13=-engine name="Shredder 13" cmd="C:\Program Files (x86)\ShredderChess\Deep Shredder 13\EngineDeepShredder13UCIx64.exe" proto=uci restart=on option."Use Shredderbases"=false option."Use Syzygy Databases"=true option."Syzygy 50 Moves Rule"=true option."Syzygy Path"=E:\Endspieltabellen\szTB option.Hash=256 option.Threads=1

SET SF6=-engine name="Stockfish 6" cmd="C:\Engines\Stockfish\stockfish-6-win\Windows\stockfish-6-bmi2.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.Hash=256 option.Threads=1
SET SF7=-engine name="Stockfish 7" cmd="C:\Engines\Stockfish\stockfish-7-win\Windows\stockfish 7 x64 bmi2.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.SyzygyProbeLimit=6 option.Hash=256 option.Threads=1
SET SF8=-engine name="Stockfish 8" cmd="C:\Engines\Stockfish\stockfish-8-win\Windows\stockfish_8_x64_bmi2.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.SyzygyProbeLimit=6 option.Hash=256 option.Threads=1
SET SF151129YBW=-engine name="Stockfish-151129-YBW" cmd="D:\Projekte\DevC\SF151129YBW\src\Stockfish151129YBW[810p].exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.Hash=256 option.Threads=1
SET SF9=-engine name="Stockfish 9" cmd="D:\Projekte\DevC\Stockfish-9\src\stockfish_9_x64_bmi2.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.Threads=1
SET SF10=-engine name="Stockfish 10" cmd="D:\Projekte\DevC\Stockfish-10\Windows\stockfish_10_x64_bmi2" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.Threads=1
SET Spa1=-engine name="Spark 1.0" cmd="C:\Engines\Spark\spark-1.0\spark-1.0-win64-mp-corei.exe" proto=uci restart=on option.OwnBook=false option.Hash=256 option.Threads=1

SET W35=-engine name="Wasp 3.50" cmd="C:\Engines\Wasp\wasp_350-fix2\Wasp350-x64-modern.exe" proto=uci restart=on option.SyzygyPath=E:\Endspieltabellen\szTB option.Hash=256 option.Threads=1

REM Die vorhandenen Eröffnungsbibliotheken
SET BIB=SALC_V5_hc_10m.pgn
::SET BIB=10moves_SALC_500.pgn
::SET BIB=LS500.pgn
::SET BIB=fcp-equal-positions.pgn
::SET BIB=ECO_BIB.pgn
::SET BIB=CSS_Thema_84-Eroeffnung.pgn
::SET BIB=Nunn2.pgn
::SET BIB=openings.pgn
::SET BIB=SuperGM_4mvs.pgn

:: Spiele pro Runde bei n Spielern= n/2 * (n-1)

REM Spielbedingungen/-parameter, die für alle Engines gelten sollen
SET TURNIER=-each option.Hash=256
:: SET TURNIER=%TURNIER% option.Threads=4 option.cores=4 option.MaxThreads=4 option."Max CPUs"=4
SET TURNIER=%TURNIER% option.Threads=4
REM Zeitkontrolle
SET TURNIER=%TURNIER% tc=/60+0.6 timemargin=100

REM Turnierbedingungen
SET TURNIER=%TURNIER% -tournament round-robin
:: SET TURNIER=%TURNIER% -tournament gauntlet
SET TURNIER=%TURNIER% -games 2 -rounds 15
SET TURNIER=%TURNIER% -concurrency 4 -ratinginterval 10 -wait 3000 -recover -repeat

REM Eröffnungen
SET TURNIER=%TURNIER% -openings file=%BIB% format=pgn order=random plies=32 start=1 -srand 127

REM Endspieltabellen
SET TURNIER=%TURNIER% -tb "E:\Endspieltabellen\szTB" -tbpieces 6

REM Ausgabe des Ergebnisses
SET TURNIER=%TURNIER% -pgnout "Results-001.pgn" -event "Normung mit Critter 1.6a (SuperGM_4mvs-BIB), Nr. 1"

REM Zuletzt der Aufruf von CuteChess mit den gewünschten Engines und den Turnierbedingungen
cutechess-cli %Cr16% %Fi71% %K12% %Sh13% %SF10% %W35% %TURNIER%
Da die Engine-Parameter selten geändert werden müssen (Aufruf/Standort der Programmdatei etc.), ist es einfacher, sie in eine Variable zu schreiben und diese in den CuteChess-Aufruf zu schreiben. Genauso die Turnierbedingungen. Sie stehen am Ende der Datei. Die Parameter lassen sich systematisch erfassen und zusammenstellen. Gleichzeitig viel übersichtlicher als alles in eine, bei vielen Teilnehmern mehrere 1.000 Zeichen lange Zeile zu schreiben.

Bei mir funktioniert das tadellos.

Viele Grüße
Th. Plaschke
Parent - By Stefan Pohl Date 2019-07-21 14:38
Sehr cool gemacht!

Ich persönlich benötige das nicht unbedingt, da ich mit cutechess nur die extrem-Schnelltests der Nets mache (und dafür reicht mir meine primitive Kommandozeilenmethode) und für alles mit “normalen“ Zeitkontrollen nehme ich immer die LittleBlitzerGUI.

Aber, für alle, die cutechess auch für normale Tests benutzen, ist deine Batchdatei natürlich super!!
Parent - - By Stefan Pohl Date 2019-07-21 14:51
Da du von cutechess offensichtlich mehr Ahnung hast als ich, hab ich eine Frage:
Es gibt laut der Beschreibung auch einen Parameter -maxmoves N, der eine Partie remis gibt, wenn N Züge gespielt sind. Ich hab es nicht geschafft, diesen Parameter zu integrieren (ich wollte nach 160 Zügen remis geben ) lassen, aber dann startete cutechess nicht, bzw. schmierte sofort ab. Was mache ich da falsch?
Parent - - By Guenter Stertenbrink Date 2019-07-21 15:40 Edited 2019-07-21 15:50
ich hab immer nur 20 Zuege gespielt, weil ich nur an der Eroeffnung interessiert war.

unter Linux , muesste aber auch mit leichten Abwandlungen als batchfile in WinDos gehen

etwa :

#!/bin/sh
./cutechess-cli -engine cmd=q-Aug25 proto=uci option.Ponder=false option.Threads=14 option.Hash=4096 -engine cmd=houdi6.exe proto=uci option.Threads=14 option.Contempt=0 option.Hash=4096 option.Ponder=false option.MoveOverhead=100 -each tc=40/30000+60 -rounds 2 -pgnout tourzs.pgn -openings file=7b5g4.pgn format=pgn -repeat -draw movenumber=20 movecount=1 score=999999

ich hab da ca. 50 verschiedene .sh files

(q-Aug25 mein Name fuer eine AsmFish Linux version)
(houdi6.exe , Houdini 6 unter Linux mit wine)
Parent - By Stefan Pohl Date 2019-07-21 16:20
Guenter Stertenbrink schrieb:

-draw movenumber=20 movecount=1 score=999999



Coole Idee! Damit läßt sich ein Remis ab einem fixen Zug auch erzwingen. Danke für den Tip!
Parent - - By Jörg Oster Date 2019-07-21 15:45
Ich benutze cutechess-cli und manchmal auch die cutechess GUI relativ oft.
Ein solcher Parameter ist mir bis dato unbekannt.

Vielleicht meinst du ja den Parameter 'movecount' in Zusammenhang mit Win- oder Draw-Adjudication?

CUTECHESS-CLI(6)   Games Manual   CUTECHESS-CLI(6)
NAME
cutechess-cli — Automate chess engine tournaments
SYNOPSIS
cutechess-cli   -engine engine-options -engine engine-options [-engine engine-options ...] [options]
DESCRIPTION
The cutechess-cli utility automates chess engine tournaments.
Its options are as follows:

...

-draw movenumber=number movecount=count score=score
    Adjudicate the game as draw if the score of both engines is within score centipawns from zero for at least count consecutive moves, and at least number full moves have been played.

    
-resign movecount=count score=score
    Adjudicate the game as a loss if an engine's score is at least score centipawns below zero for at least count consecutive moves.

Parent - By Stefan Pohl Date 2019-07-21 16:20 Edited 2019-07-21 16:29
Jörg Oster schrieb:

Ich benutze cutechess-cli und manchmal auch die cutechess GUI relativ oft.
Ein solcher Parameter ist mir bis dato unbekannt.



Ich hab eine Datei namens cutechess_help.txt mit heruntergeladen. Keine Ahnung, wo, das ist schon etwas her.
Da sind die ganzen Kommandos aufgeführt. Unter anderem eben:
-maxmoves N: Adjudicate the game as a draw if the game is still ongoing after N or more full moves have been played. This limit is not in action if set to zero.

Aber du hast natürlich Recht: Den Parameter gibts nicht. Hab mal cutechess mit -help gestartet und den Output in eine Datei umgeleitet. Dieses Kommando existiert nicht.
Parent - By Thomas Plaschke Date 2019-07-21 16:32
Die cutechess-cli Version, die in Deiner zip-Datei enthalten ist, ist nicht die Version, von der die Datei cutechess_help.txt stammt. Die Datei ist offensichtlich eine Ausgabeumleitung des "-help"-Parameters. Sie wurde aber ziemlich sicher nicht mit der mitgelieferten Programmversion erzeugt. Bitte cutechess-cli -help >cc_v180130.txt ausführen und danach zum Vergleich cc_v180130.txt öffnen.

Die CuteChess GUI v1.1.0 kennt die Längenbeschränkung (auf 1(!)-5.000 Züge). Die GUI kam aber ohne CLI zu mir und ich weiß auch nicht mehr, aus welcher Quelle ich die habe. Als Windows-Scriptkiddie bin ich auch nicht in der Lage, aus dem Quellcode von Github eine Zwischenversion zu machen. Sorry, ich muss passen.

Viele Grüße
Th. Plaschke
Up Topic Hauptforen / CSS-Forum / Nets schnell testen mit cutechess-cli

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill