Le poinçonneur des Leela

Leela chess zero (Lc0) au hasard d’une recherche neuronale arborescente Monte-Carlo

« Gott würfelt nicht ! » s’exclame Albert Einstein au congrès Solvay de 1927.
Il refuse l’interprétation que la nature puisse obéir aux seules lois du hasard : « Dieu ne joue pas aux dès ! »

En 2005, les programmes de jeu d’échecs goûtent au Fruit défendu de Fabien Letouzey. Dans la décade 2010, StockFish réchauffe gracieusement la petite friture Rybka-iènne à la chaleur réconfortante des CPU multi-cœurs. Il n’y a qu’un gros lézard, Komodo, qui croque en 2017 les filets italiano-norvégiens (en référence à Magnus qui n’y est pour rien). La version 9 du varan peu commode est désormais offerte !

Mais que fait Gary ? Pas Kasparov mais Linscott ! Il sort de son stock l’environnement FishTest de tests distribués sur internet permettant la non-régression des améliorations StockFish.

Avec la floraison printanière 2018 du lilas, Linscott préfère le générateur de coups de StockFish (SF) dans son implémentation de Leela chess zero (Lc0). Il a fait perdre de la mémoire toutes les connaissances échiquéennes sur l’évaluation des positions de SF en ne gardant que les règles de bases pour savoir jouer aux échecs : la règle de nullité des 50 coups sans capture ni avance de pions a été connectée au réseau de neurones le 5 mai 2018. La signification du suffixe « zero » signifie que Leela chess est un programme d’échecs à apprentissage neuronal renforcé partant de presque ... zéro.

Après avoir jeté la première pierre au Go, ...

… l’annonce Googlesque qu’un AlphaZero (A0) puisse apprendre en quelques heures les connaissances échiquéennes pour surpasser stratégiquement SF sidère. Dans les conditions spécifiques du tournoi (par exemple temps limité par coup), la pauvre morue séchée au courant d’air marin des îles Lofoten semble jouer comme un débutant (Cg7 dans un fianchetto en lieu et place du Fg7 solide comme une pyramide égyptienne pour protéger le roque du monarque de noir vêtu).

L’écrasement de SF par AlphaZero est sans appel. AlphaZero pousse SF dans l’effet horizon au-delà de la profondeur d’analyse pourtant inhumaine de SF qui constate les dégâts quand c’est trop tard. A la différence d’AlphaZero, SF n’apprend pas. Il a besoin d’une longue période dans FishTest pour valider ses améliorations.

L’objectif de Leela chess zero est de reprendre les principes d’AlphaZero dans une version domaine publique : c’est comme si on jouait au casino ou aux dès à Monte-Carlo pour choisir telle branche à explorer alors que le jeu d’échecs est à information complète. Il ne cache rien. Seul le tirage des couleurs avant que la partie ne commence peut être tiré au sort ou le système d’appariement selon le classement Elo et les résultats des rondes précédentes choisit qui rencontre qui.

Leela-chess par Gary Linscott a le vent en poupe. Monte-Carlo Upper Confidence bounds applied to Trees (UCT) est beaucoup plus populaire que les méthodes statistiques de FishTest implémentées par le même auteur. L’environnement bouge beaucoup avec des forks qui témoignent du succès.

Téléchargement du moteur lczero.exe : v0.10

  • cpu-win.zip 11.3 MB
  • gpu-win.zip 11.4 MB GPU à 97% (55°C) et CPU à 50% (51°C ventilé)
  • lczero10_mkl_bmi2_and_popcnt.zip 545 KB

cpu-win est un moteur d’échecs UCI standard sous Windows qui peut être optimisé par les instructions bmi et popcnt si la CPU (Central Processing Unit) d’Intel les supportent. Ces téléchargements pourront être testés ultérieurement par des volontaires.

Le test suivant concerne l’innovation d’un moteur d’échecs UCI sous Windows utilisant une GPU (Graphics Processing Unit) comme par exemple la carte graphique NVIDIA en architecture parallèle Compute Unified Device Architecture (CUDA) alors qu’un moteur d’échecs ne fait que calculer le meilleur coup dans une position donnée et n’affiche aucun élément graphique à la différence des jeux vidéos. L’affichage de l’échiquier est de la responsabilité de l’interface graphique Arena ou Scid vs. PC.

GPU : étalonnage de la carte graphique

Cette configuration est à faire une seule fois avant la première utilisation dans l’interface graphique GUI. Dans la console en ligne de commande, les 578 configurations à tester peuvent prendre de quelques secondes à moins de 5 minutes.

Clic avec le bouton droit sur le "logo Windows" 10 > menu contextuel "Windows PowerShell"

REM Si Leela a été dézippée dans le répertoire D:\Chess\Leela\Prog
cd D:\Chess\Leela\Prog
REM Attention d'utiliser le répertoire local ".\" sinon l'exécutable n'est pas trouvé
.\lczero.exe --tune-only

OpenCL configuration de la carte graphique

Using 2 thread(s).
Detecting residual layers...v2...192 channels...15 blocks.
Initializing OpenCL.
Detected 2 OpenCL platforms.
Platform version : OpenCL 2.1
Platform profile : FULL_PROFILE
Platform name : Intel(R) OpenCL
Platform vendor : Intel(R) Corporation
Device ID : 0
Device name : Intel(R) HD Graphics 530
Device type : GPU
Device vendor : Intel(R) Corporation
Device driver : 24.20.100.6094
Device speed : 950 MHz
Device cores : 23 CU
Device score : 621
Device ID : 1
Device name : Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz
Device type : CPU
Device vendor : Intel(R) Corporation
Device driver : 7.6.0.698
Device speed : 2300 MHz
Device cores : 4 CU
Device score : 521
Platform version : OpenCL 1.2 CUDA 8.0.0
Platform profile : FULL_PROFILE
Platform name : NVIDIA CUDA
Platform vendor : NVIDIA Corporation
Device ID : 2
Device name : GeForce GTX 950M
Device type : GPU
Device vendor : NVIDIA Corporation
Device driver : 382.05
Device speed : 1124 MHz
Device cores : 5 CU
Device score : 1112
Selected platform : NVIDIA CUDA
Selected device : GeForce GTX 950M
with OpenCL 1.2 capability.

Started OpenCL SGEMM tuner.
RNG seed : 0x88c320a4 (thread : 408685198)
Will try 578 valid configurations.
(1/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=16 NDIMB=8 NDIMC=8 NWG=16 SA=0 SB=0 STRM=0 STRN=0 VWM=1 VWN=1 0.2626 ms (71.9 GFLOPS)
(2/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=32 NDIMB=8 NDIMC=8 NWG=16 SA=0 SB=0 STRM=0 STRN=0 VWM=1 VWN=1 0.1768 ms (106.8 GFLOPS)
(66/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=32 NDIMB=8 NDIMC=8 NWG=16 SA=0 SB=0 STRM=0 STRN=0 VWM=2 VWN=1 0.1394 ms (135.4 GFLOPS)
(114/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=64 NDIMB=8 NDIMC=8 NWG=16 SA=0 SB=0 STRM=0 STRN=0 VWM=4 VWN=1 0.1329 ms (142.1 GFLOPS)
(290/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=16 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=1 VWN=1 0.1253 ms (150.6 GFLOPS)
(300/578) KWG=32 KWI=2 MDIMA=16 MDIMC=16 MWG=32 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=1 VWN=1 0.1035 ms (182.4 GFLOPS)
(354/578) KWG=32 KWI=2 MDIMA=8 MDIMC=8 MWG=16 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=2 VWN=1 0.0985 ms (191.6 GFLOPS)
(363/578) KWG=32 KWI=2 MDIMA=16 MDIMC=16 MWG=32 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=2 VWN=1 0.0927 ms (203.6 GFLOPS)
(483/578) KWG=32 KWI=2 MDIMA=16 MDIMC=16 MWG=32 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=2 VWN=2 0.0913 ms (206.8 GFLOPS)
(516/578) KWG=32 KWI=2 MDIMA=16 MDIMC=16 MWG=64 NDIMB=8 NDIMC=8 NWG=16 SA=1 SB=1 STRM=0 STRN=0 VWM=4 VWN=2 0.0910 ms (207.5 GFLOPS)



Ce traitement génère 210 octets dans le fichier texte leelaz_opencl_tuning (sans extension de fichier) contenant :
0 ;XgemmBatched ;192 ;16 ;192 ;16 ; -DKWG=32 -DKWI=2 -DMDIMA=16 -DMDIMC=16 -DMWG=64 -DNDIMB=8 -DNDIMC=8 -DNWG=16 -DSA=1 -DSB=1 -DSTRM=0 -DSTRN=0 -DVWM=4 -DVWN=2 ;OpenCL : NVIDIA Corporation GeForce GTX 950M @ 1124MHz
0 ;XgemmBatched ;64 ;16 ;64 ;16 ; -DKWG=32 -DKWI=2 -DMDIMA=16 -DMDIMC=16 -DMWG=64 -DNDIMB=8 -DNDIMC=8 -DNWG=16 -DSA=1 -DSB=1 -DSTRM=0 -DSTRN=0 -DVWM=4 -DVWN=2 ;OpenCL : NVIDIA Corporation GeForce GTX 950M @ 1124MHz

Le préfixe « leelaz » provient du projet leela-zero dont l’exécutable leelaz.exe v0.15 de Gian-Carlo Pascutto dans l’archive zippée leela-zero-0.15-win64.zip (CPU + GPU) ou celle de leela-zero-0.15-cpuonly-win64.zip (CPU) ne semble pas jouer le premier coup dans Arena (s’il y a des volontaires pour investiguer ?).

Selon sjeng.org, Leela go fonctionne 15 fois plus vite avec une GPU AMD R9 390 qu’avec une CPU Intel Core i5-6600.

Dans ce qui suit, il n’est utilisé que l’exécutable lczero.exe de Gary Linscott.

Configuration du réseau neuronal

Il n’est livré aucun fichier de configuration du réseau neuronal.

Télécharger la première instance en colonne 2 « Network » au singulier :

Networks
Id Network Elo Games Blocks Filters Time
367 9efeefb3 5922.08 37151 15 192 2018-06-02 12:51:14.161623 -0400 EDT
366 3fc4c8d8 5905.21 38514 15 192 2018-06-02 06:52:26.861374 -0400 EDT
8 03d94904 1555.89 50496 6 64 2018-03-08 16:06:44.648266 -0500 EST

Chaque apprentissage neuronal est identifié par un numéro d’id en première colonne.

Le choix de la configuration du réseau neuronal à télécharger est libre.
L’URL est une clef Secure Hash Algorithm (SHA) qui garantit l’unicité.
L’entrée la plus récente ne signifie pas qu’il s’agit du meilleur apprentissage. Il peut très bien y avoir des régressions.

En colonne 3, l’Elo n’est pas à comparer aux valeurs d’usage : enfant débutant à 699 Elo, seuil des 2000 Elo pour les joueurs de club, professionnels à partir de 2500 Elo et l’élite des Grands Maîtres au-dessus de 2700, Magnus Carlsen a 2843 Elo. Il s’agit en fait d’un classement obtenu par auto-apprentissage. Selon Bhagwad, la formule de régression linéaire suivante établit une relation entre le ELO Fide et le classement obtenu par auto-apprentissage :

ClassementParAutoApprentissage = (EloFide + 511.7) / 0.6

Exemple : L’ELO Fide 1500 correspond au classement par auto-apprentissage de 3352 c-a-d à l’id 19 du 21 mars 2018 encadré de rouge. les id 20 et 21 fluctuent autour de ce classement alors que l’id 22 marque une nette progression.

EloFide = (ClassementParAutoApprentissage * 0.6) - 511.7

Exemple : l’id 423 du 18 juin 2018 a atteint un classement par auto-apprentissage de 5879, c-a-d à un ELO d’ordinateur de 3015. Notez que le classement par auto-apprentissage a baissé entre l’id 367 du 2 juin 2018 dans la table ci-dessus et l’id 423. Cela montre que l’apprentissage converge plus difficilement dans les niveaux supérieurs.

Dans un blitz dans le GUI Arena, Leela chess zero v0.10 id 367 vs. StockFish 9 bmi2, SF avec les Noirs a réussi à placer une finesse tactique gagnant un pion et donc la partie. Le « Elo » de 5922.08 avec chiffre à virgule n’est donc pas réaliste. Cependant un joueur de club se fera aussi bien casser par SF que par Leela sauf avec l’id 8 d’un Elo relatif de 1555.89 pour constater que dans ses premiers id, il y avait encore des progrès à faire. Ce qui surprend est la vitesse d’apprentissage renforcé par rapport à un humain qui serait incapable physiquement de jouer autant de parties d’échecs.

Volume d’apprentissage
Id Zip Ko Unzip Ko Elo Games
367 67 458 186 751 5922.08 37151
8 18 325 051 435 1555.89 50496

Comme avec le format textuel PGN des parties d’échecs, l’apprentissage neuronal dans Leela en est encore au format textuel : cela signifie des dizaines de Ko à télécharger même zippés.

Renommer l’apprentissage neuronal dézippé en weights.txt à placer dans le même répertoire que lczero.exe :


02/06/2018 18:36 191 232 998 weights.txt
08/03/2018 22:06 052 669 226 weights1555.txt référence id 8 à 1555 Elo
02/06/2018 18:36 191 232 998 weights5922.txt référence id 367 > 3000 Elo

Comme ces fichiers sont gros, il est possible de les référencer dans un répertoire unique par l’option « —w » comme weights sur la ligne de commande de lczero.exe ou dans la zone de paramètre d’Arena ou Scid vs. PC.

L’auto-apprentissage, c-a-d la propre amélioration de weights.txt, n’est pas dans l’objectif de cette introduction à Leela.

Structure de l’apprentissage

Les poids qui paramètrent le réseau de neurones artificiels se présentent sous la forme d’une série de chiffres comment autant de boutons de réglages pour obtenir la sortie souhaitée lors de l’apprentissage :


1

  • 0.00119084 -0.0405696 -0.104492 0.0265214 -0.0811853 0.0255728 -0.0252112 0.0464284


Réseau neuronal convolutif (CNN)
Id Elo Games Blocks Filters Time
376 5895 51 698 15 192 2018-06-04
227 5501 55 108 15 192 2018-04-30
226 5403 27 595 10 128 2018-04-30
124 4843 56 175 10 128 2018-04-13
008 1555 50 496 06 064 2018-03-08
006 0988 50 150 06 064 2018-03-04

OpenCL configuration de la carte graphique : « Detecting residual layers...v2...192 channels (ou Filters) ...15 blocks. »

Configurer le moteur lc0 dans le GUI échiquéen

Pour configurer le moteur UCI dans divers interfaces échiquéens GUI, consulter :
Running Leela Chess Zero in a Chess GUI

TCEC 2018 saison 13 division 4

11 août 2018 : Leela Chess Zero wins the gold medal in TCEC Div 4

TCEC Season 13 – the advance of the NNs

Div 4 : 30mn + 10s
NN : Neural Network
1er Leela Lc0 0.16 NN, 2e DeusX 1.0 NN, 3e Wasp 3.2 Alfaβ

Deus X est un clone de Lc0 avec un apprentissage supervisé différent. Cela a déclenché une polémique pour savoir si TCEC est un championnat de moteurs ou de réseaux neuronaux. La saison 14 clarifiera le règlement sur les NN.

Lc0 0.16 vs. Chess22k 1.10 : finale de l’enfermement thématique de Ta7 noire par Fb7 blanc protégé par a6.

Top Chess Engine Championship season 13 division 4
NEngineRtng PtsSBEloPerfLcDeWaRoSeChTuIv
1 Lc0 0.16 3219 20.0 251.25 +1 71.4 ···· 1=0= 0=1= 1=1= 111= 11=1 ==11 ==11
2 DeusX 1.0 3200 18.5 229.75 -24 66.1 0=1= ···· 001= ==== ===1 111= 1110 1111
3 Wasp 3.2 2964 18.0 236.25 +273 64.3 1=0= 110= ···· =111 ==1= =0== 1==1 1==1
4 Rodent III 0.258 3030 12.5 161.25 +10 44.6 0=0= ==== =000 ···· ==== =0== 1101 ==1=
5 Senpai 2.0 3062 12.5 160.50 -33 44.6 000= ===0 ==0= ==== ···· ==== 1=== 01=1
6 Chess22k 1.10 3072 11.0 149.75 -95 39.3 00=0 000= =1== =1== ==== ···· 1=00 ===0
7 Tucano 7.05 2919 10.0 134.25 +72 35.7 ==00 0001 0==0 0010 0=== 0=11 ···· ====
8 Ivanhoe 999946h 3116 9.5 123.00 -203 33.9 ==00 0000 0==0 ==0= 10=0 ===1 ==== ····

TCEC 2018 saison 12 division 4

18 avril 2018 : Breaking : Leela Chess Zero enters TCEC Season 12

Leela chess zero v0.27 id 125 s’est qualifiée pour TCEC saison 12. Elle est configurée avec les tablebases Syzygy à 6 pièces.

Top Chess Engine Championship season 12 division 4
N Engine Rtng Pts Gm SB Ethe Xiph Rode Tuca TheB Frui Scor Lcze
1 Ethereal 9.60 2985 23.5 28 282.25 ···· 11== ==1= 1111 ===1 11=1 1111 1111
2 Xiphos 0.2 2986 22.0 28 253.75 00== ···· 1111 =11= 111= 101= 1111 1111
3 Rodent III 0.244 3076 18.0 28 187.00 ==0= 0000 ···· 1=== 11=1 =11= 111= 1111
4 Tucano 7.00 2830 13.5 28 135.25 0000 =00= 0=== ···· =111 1=01 ==00 1111
5 The Baron 3.41 2840 11.5 28 123.00 ===0 000= 00=0 =000 ···· =1=1 1001 =111
6 Fruit 20180416 2934 11.0 28 118.25 00=0 010= =00= 0=10 =0=0 ···· =010 1111
7 Scorpio 2.82 2831 10.5 28 105.00 0000 0000 000= ==11 0110 =101 ···· 101=
8 Lc0 0.07 id 125 2714 2.0 28 21.50 0000 0000 0000 0000 =000 0000 010= ····

Avec la dernière place de la division 4, Leela a encore de la marge pour progresser. Les autres moteurs en ont fait des confettis floraux. Leela a annulé contre The Baron ayant une tour de moins et Scorpio (Fou contre Cavalier avec 4 pions de part et d’autre). Sa victoire contre Scorpio en trois coups (1. d4 d5 2. c4 c6 3. e3 1-0) n’est pas significative.

Lichess bot LeelaChessOfficial id 185 vs. SF 9 CruelBot

Lichess bot LeelaChessOfficial vs. GM 2500

Le bot LeelaChessOfficial id 125 a été introduit dans la plateforme en ligne Lichess pour un match avec le GM Andrew Tang (Elo 2502 rapide : 2281 blitz : 2469) : 37 victoire, 6 nulles et 1 défaite pour Leela.

Komodo Monte-Carlo

Le 24 mai 2018, à l’occasion de l’acquisition de Komodo par Chess.com, un nouveau moteur d’échecs Komodo Monte-Carlo ou Komodo MCTS (Tree Search = arbre de recherche) version 12 présente le varan vert jouant avec deux dés rouges (6+6 = 12) inspiré d’A0 et Lc0.

Komodo MCTS n’utilise que la CPU alors que Lc0 peut utiliser la GPU.

Selon les ELO évalués par CCRL 40/4 :

  • Komodo 12 64-bit 4CPU reste loin devant avec un ELO de 3504 : le meilleur coup est choisi selon une fonction d’évaluation de la position simulée dans un arbre,
  • Komodo MCTS 64-bit débute avec un ELO de 3047 : le meilleur coup est choisi selon une probabilité de gains par apprentissage de réseaux de neurones artificiels.

L’option Multi-PV (plusieurs Principales Variations calculées en parallèle) affecte beaucoup moins Komodo MCTS que Komodo 12.
Komodo MCTS doit encore s’améliorer dans le domaine tactique. Il dispose d’une meilleure compréhension stratégique que Komodo 12. L’évaluation de la position est plus stable. Et l’équipe de Komodo MCTS n’en est qu’à la première version.

Le 17 juin 2018, le champion américain GMI Hikaru Nakamura a remporté le match de blitz contre Komodo MCTS à différents niveaux et variantes de la position de départ sur le score de 20.5 à 2.5.

DeepMind

AlphaZero vs. SF Game Downloads

29 mars 2018, ouverture de DeepMind Paris avec Rémi Munos : « Retour à Paris »

« AI is one of the most transformative technological developments of our time, and I believe we’ve only just begun to recognise its potential for positive impact around the world. »

Lila Ibrahim, Chief Operating Officer, 11 avril 2018

Références

Date Titre Auteur Site
09/11/2015 TensorFlow, outil open source d’apprentissage automatique Python, C++, CUDA Google Brain Wikipédia
09/01/2018 Announcing lczero Gladius Talkchess
31/03/2018 Tutorial on How to Run Leela (LCzero) in Arena at any given ELO Rating BJPark Reddit
05/04/2018 Leela Chess Paul Northwestern
11/04/2018 How influential will Leela Zero be in the computerized world of chess ? Shaun Press Quora
25/04/2018 Financement participatif atteint orienté hardware Folkert Huizinga GoFundMe
26/04/2018 Leela Chess Zero : AlphaZero for the PC Albert Silver Chessbase
31/05/2018 Ideas to increase the interest in developing leela zero among the general public Ovi Google groups
03/06/2018 Jouez contre LCZero dans votre navigateur en ligne sans installation lczero.org
Posté le 13 août 2018 par Matt