Leela Chess Zero - Echecs et informatique sur PC-Windows

Rechercher
Aller au contenu

Menu principal :

Moteurs

Leela Chess Zero
Puissant et 100% neuronal


S'inspirant des travaux de la société DeepMind, filiale de Google spécialisée dans l'IA neuronale et de son moteur expérimental Alpha Chess Zero, Leela Chess Zero est une déclinaison libre et gratuite d'un moteur d'échecs à évaluation 100% neuronale.



Sommaire

L'essentiel de ce qu'il faut savoir sur LC0
Téléchargement et choix
  Quelle version utiliser ?
  Quel(s) fichier(s) de poids
     Formats de réseau
     Choix du réseau
     Bonnes et mauvaises filles
     Maïa, joueurs Lichess
Installation et configuration
  Arena
  Lucas Chess
  PyChess
Nibbler : une interface d'analyse pour LC0
  Téléchargement et installation de moteurs
  Configuration
  Probabilité de gagner - WDL
Arena Leela Chess Zero



L'essentiel de ce qu'il faut savoir

On parle beaucoup moins aujourd'hui  de Leela Chess Zero (souvent appelé aussi LCZ ou LC0) alors qu'il était de toutes les conversations il y a quelques années. Grâce à une technologie totalement nouvelle, il venait de se hisser au niveau des moteurs algorithmiques les plus puissants, passant même un temps assez bref devant eux. Il offrait aussi un style de jeu différent que d'aucun estimaient plus naturel que ceux des moteurs classiques.
Mon premier article date de juillet 2020, soit à exactement 4 ans de distance du jour où j'écris ces lignes. Depuis, de l'eau à coulé sous les ponts. Avec 3443 Elo mesuré par CCRL en contrôle de temps 40/15, il arrive en 49eme position, loin derrière Stockfish, Torch, Dragon by Komodo, Bersek et Obsidian, qui dépassent tous 3600 Elo.
Car entre-temps, les moteurs à évaluation classique les plus forts ont intégré la technologie NNUE, système hybride combinant une évaluation classique avec un noyau neuronal. Un moteur 100% neuronal a besoin d'une configuration matérielle extrêmement puissante et  d'une carte graphique NVidia performante pour donner sa pleine mesure. Un moteur NNUE n'a besoin que d'une bonne configuration standard, tout en bénéficiant en grande partie de la puissance apportée par un bon réseau neuronal.

Les techniques employées pour développer LCZ sont celles auxquelles DeepMind a recouru pour mettre au point Alpha Chess Zero. Le moteur expérimental utilisait un réseau neuronal à apprentissage par renforcement, ne connaissant au départ rien d'autre que les règles du jeu. C'est en jouant contre lui-même qu'il s'est constitué peu à peu le fichier de poids qui en a fait un joueur redoutable. Humiliant pour Stockfish : il n'aura fallu à Alpha Chess Zero que quatre heures de jeu contre lui-même pour générer un réseau neuronal capable de battre le plus puissant des moteurs à algorithmes.
Alpha Chess Zero n'était bien sûr pas disponible pour nous mais une équipe de programmeurs s'en est inspiré pour développer Leela Chess Zero. Les débuts du moteur ont été un peu laborieux, car il faut beaucoup de temps, quand on n'a pas les moyens techniques de Google, pour constituer un bon réseau neuronal. La firme américaine avait pour générer ses poids une machine monstrueuse représentant l'équivalent du fonctionnement simultané de 50.000 GPU Nvidia GTX 1080 T. Pour obtenir quelque chose d'approchant, LC0 a pu compter en revanche sur la mobilisation d'une nombreuse communauté, qui a mis en commun ses moyens. Mais cela a pris du temps et la force du moteur a augmenté de manière très progressive pour finir par battre officiellement Stockfish, alors en version 10 en 2020… Mais Stockfish a assez vite repris l'avantage, notamment en étant le premier à intégrer un noyau NNUE. De son côté. LC0 a continué à progresser et à évoluer, la dernière version, la v0.31.0, datant de juin 2024.





Téléchargement et choix

Vous trouverez les distributions LCZ sur le site officiel.

Télécharger Leela Chess Zero ?

Les normes de constitution de réseau ont évolué et d'anciennes versions de LC0 risquent de ne pas fonctionner avec des réseaux récents ; et inversement, des réseaux anciens ne fonctionneront pas nécessairement avec une version récente du moteur. Le mieux est donc de faire table raze de tout ce que vous avez pu installer il y a quelques années et de repartir de zéro avec des fichiers récents.


Quelle version utiliser ?

L'installation de LC0 est inhabituellement compliquée pour Windows car la version du moteur à utiliser va dépendre fortement de votre configuration matérielle - très variable d'un PC à l'autre. Pour donner le meilleur de lui-même, il a besoin d'un ordinateur puissant, de beaucoup de mémoire et d'une carte graphique NVidia pas trop ancienne. Ce sont en effet les cartes graphiques et non les processeurs qui font le gros du travail. C'est pourquoi  ce n'est pas moins de cinq versions différentes de LC0 qui sont actuellement proposées :

➤CUDA : pour ordinateurs équipés de carte graphique NVidia assez récentes  (postérieures à 2018) :  RTX 20xx, RTX 30xx et ainsi de suite (mais pas GTX 16xx)
➤CUDNN : pour ordinateurs équipés de GPU NVidia de 2014 à 2018 : GTX 650 à GTX 16xx ; GT 640M à GT 980M (à l'exception des modèles 670M, 675M, 705M, 710M, 800M, 820M)
➤onnx-dml : pour ordinateurs équipés d'autres GPU (nécessite une dll DirectML récente).
➤DNNL BLAS : ordinateurs sans carte graphique performante mais processeurs modernes.
➤OpenBLAS : pour machines anciennes, sans GPU

IMPORTANT : Si vous êtes en mesure d'utiliser la version CUDA, vous devrez impérativement mettre à jour votre carte Nvidia GeForce avec le pilote le plus récent. LCZ risque de ne pas fonctionner si votre pilote est trop vieux.


Quel(s) fichier(s) de poids

Le moteur est livré avec un réseau de poids par défaut appelé actuellement "791556". mais rien ne vous oblige à vous contenter de ce réseau standard. Mieux : il sera plus judicieux de faire un choix en connaissance de cause parmi les nombreux fichiers déjà disponibles sur le site officiel, par exemple pour sélectionner un réseau qui soit au moins à la portée d'un joueur humain.

Formats de réseau

Le réseau de poids peut être plus ou moins étendu, en "hauteur et en largeur", ou encore en "blocs et filtres". Il y a quatre ans, il y avait toutes sortes de combinaisons possibles de blocs et filtres mais la situation semble se normaliser. Le site officiel distingue maintenant cinq formats :

➤Très grands : 15 blocs et 1024 filtres. Le réseau occuppe 4 Go en mémoire et 330 Mo sur le disque. Il nécessite une configutation exceptionnelle et une version particulière de LC0 pour le prendre en charge. Je ne le cite que pour être complet.
➤Grands : 15 blocs et 768 filtres. Le réseau occuppe 2,4 Go en mémoire et 170 Mo sur le disque. Nécessite une GPU CUDA et une configuration matérielle puissante.
➤Moyens : 15 blocs et 512 filtres. Le réseau occuppe 1,8 Go en mémoire et 150 Mo sur le disque. Un format moyen pour bonne configuration moyenne.
➤Petits : 10 blocs et 256 filtres. Le réseau occuppe 1,6 Go en mémoire et 40 Mo sur le disque. Un format qui conviendra aux pour machines de bureautique ordinaires. .
➤Très petits : 10 blocs ou moins, 128 filtres ou moins, occupation en mémoire entre 1 et  1,4 Go. C'est la catégorie utile pour ceux qui veulent un adversaire pour jouer aux échecs et pas une bête à concours. Comme ce sont aussi les réseaux les moins exigeants en moyens matériel, ce sont ceux qui, d'après moi, ont le plus d'intérêt.


Choix du réseau

Le choix se fera en fonction de votre matériel mais aussi en fonction de vos objectifs. En tant que moteur d'analyse et de conseil, LC0 sera certainement performant avec un bon fichier de poids et la configuration matérielle suffisante. Mais il n'offrira pas d'avantage décisif sur Stockfish ou Komodo, qui sont d'un niveau de force supérieur et ne nécessitent pas de machines aussi puissantes. Sauf peut-être si on possède une  configuration musclée, avec beaucoup de mémoire et une bonne carte graphique NVidia et qu'on utilise LC0 un gros fichier de poids et l'interface Nibbler.  Pour moi, le principal intérêt de Leela Chess Zero est de disposer de fichiers de poids fournissant des adversaires de style humain pour l'entraînement.

Vous trouverez sur le site officiel une sélection de fichiers de poids de qualité à cette adresse :

https://lczero.org/play/networks/bestnets/

Je vous conseille particulièrement les fichiers de Dietrich Kappe. L'auteur de Toga III a aussi développé toute une collection de réseaux pour LC0 dans le but de fournir aux humains des partenaires d'entraînement au style de jeu d'allure parfaitement humaine. Pour y parvenir il a mis au point une méthode d'enrichissement supervisée combinant des jeux Stockfish réglé à un niveau moyen avec des jeux humains imparfaits récupérés sur Lichess.


Bonnes et mauvaises filles


La série "Gyal" (qui signifie "fille" à la Jamaïque) est particulièrement intéressante de ce point de vue. L'auteur a développé un grand nombre de versions différentes, testant plusieurs approches et corrigeant les aberrations constatées. Par exemple, les poids s'étant révélés très mauvais joueur après une perte lourde de matériel ou lors d'une finale désespérée, Kappe a compris que cela provenait du fait que la plupart des joueurs Lichess abandonnent dans ce genre de situation. Le réseau n'avait pas assez de données à fournir pour y faire face. Il a donc utilisé Stockfish pour compléter les parties tronquées.
Par ailleurs, s'il utilisent les mêmes parties pour l'entraînement des réseaux, il propose des ratios de qualité différents en mêlant aux parties de Stockfish des parties blitz humaines récupérées sur Lichess, dans des proportions variables : 3/4, la moitié ou 1/4 seulement...
En résumé, un gros travail, qui rappelle ce qui se fait avec le projet Maïa. Les fichiers que je recommande, du moins fort au plus fort :

Tiny Gyal : minuscule réseau 16x2, formé pour moitié de jeux Stockfish, pour moitié de jeux humains. Nombre de parties non-précisé.
Bad Gyal 5 : réseau 128x10, formé avec 1,3 millions de jeux pour moitié SF, pour moitié humains (2160 Elo estimés).
Good Gyal 5 : réseau 48x5, formé avec 1,3 millions de jeux mais avec 3/4 de données Stockfish et 1/4 de données humaines (2260 Elo mesurés).
Evil Gyal 6 : réseau 48x5, 2 millions de parties dont 3/4 d'humaines, 1/4 de Stockfish (2160 Elo estimés).
Bad Gyal 6 : réseau 128x10, 2 millions de jeux, moitié humains, moitié Stockfish (1950 Elo estimés).
Good Gyal 6 : réseau 192x16, formé sur 2 millions de jeu, dont 3/4 de jeux de Stockfish et 1/4 de jeux humains. C'est un réseau assez faible (2050 Elo mesurés en blitz).
Bad Gyal 7 : réseau 128x10, formé avec 4,48 millions de jeux pour moitié SF, pour moitié humains (2200 Elo estimés).
Good Gyal 7 : réseau 192x16, formé avec 4,48 millions de jeux pour 3/4 de Stockfish et pour 1/4 humains. C'est le réseau le plus fort de la collection. Je l'ai estimé à 2300 Elo en blitz.
Bad Gyal 8 : réseau de 128x10, formé avec 4,48 millions de jeux pour moitié SF, pour moitié humains. Pas le plus fort mais celui que l'auteur considère comme l'aboutissement de ce travail.

A cette série s'ajoute Mean Girl 7 (réseau 32x4, 2,48 millions de parties avec 3/4 de parties humaines - 2200 Elo) et Mean Girl 8 (réseau 32x4, 5 millions de parties avec 50% de parties humaines - 2270 Elo).

J'ai fait jouer entre-elles Good Gyal 5, 6 et 7 ainsi que Mean Girl 7 et 8 un tournoi de parties blitz qui m'a permis de les classer par niveau de force  (avec 40 parties par moteur). Puis j'ai fait jouer le gagnant contre quelques autres moteurs entre 2000 et 2400 Elo. J'ai ensuite utilisé Bayeselo pour estimer approximativement le Elo de ces personnalités. Ce qui donne :



L'ordinateur utilisé, assez ancien, ne disposait pas d'une carte graphique perfomante. C'est donc la version CPU DNNL de LC0 qui a été employée. Il est probable que sur une bonne configuration CUDA, nous puissions tabler sur une centaine de Elo supplémentaires.
Concernant les versions "bad" et "evil", il faut bien sûr s'attendre à une chute de Elo importante par rapport aux versions "good". De combien ? Je n'ai pas testé mais une centaine de Elo au moins me parait probable.

Maïa, joueurs Lichess

Une autre expérience proche de celle de Dietrich Kappe est celle qu'on mené des chercheurs canadiens de l'université de Toronto conjointement avec des chercheurs américains de l'université de Cornell. Je parle du projet Maïa Chess, qui a consisté à créer neuf fichiers de poids, de 1100 à 1900 Elo, en utilisant un demi-millions de parties de Lichess de la tranche de force considérée. Ici, aucune partie d'enrichissement n'a été ajoutée pour élever la qualité du jeu. Nous obtenons neuf joueurs Lichess type, au style parfaitement humains, qui feront les erreurs typiques des joueurs Lichess, dans chaque niveau de force.



Installation et configuration

Arena


L'installation dans Arena est tout à fait standard. Créez un dossier "Leela Chess" dans le répertoire "Engines" d'Arena ;  placez-y tous les fichiers de la distribution qui convient le mieux à votre ordinateur et rajoutez-y les fichiers de poids téléchargés séparément et que vous comptez utiliser. Lancez Arena, puis menu "Modules" > "Installer nouveau module" et allez chercher le fichier "lc0.exe ".
Si vous lancez le moteur sans passer par le menu de configuration il utilisera le réseau par défaut. Pour changer de réseau, ouvrir "Module" > "Module 1" (ou "Module 2") > "Configurer".

Le menu de configuration de LC0 est cauchemardesque. Il y a 4 ans, j'avais lu quelque part : "nous allons le simplifier". Apparemment l'intention n'a pas été suivi d'effet. Ceci dit, à quelques détails près, la configuration par défaut devrait convenir à la plupart des utilisateurs. Je n'insisterai que sur quelques points, vous invitant pour en savoir plus à consulter la documentation en ligne, qui se trouve ici :https://lczero.org/play/configuration/flags/



Un menu de configuration vraiment rébarbatif

Comme d'habitude face à un imposant menu de configuration, j'ai classé les paramètres par degré d'importance :

+++ = paramètres importants
++ = paramètres utiles à connaître
+ = paramètres secondaire

WeightsFile +++ : ici se trouve le sélecteur de fichiers grâce auquel on pourra changer de fichier de poids et donc de personnalité pour le moteur.

Ponder +++ : par défaut, la pondération est désactivée. Si vous l'activez, le moteur poursuivra l'exploration de l'arborescence des coups pendant que vous réfléchirez à votre coup suivant. Ce peut être une démarche intéressante si vous affrontez à la loyale par exemple l'une des personnalités faibles de Dietrich Kappe.

Threads ++ : nombre de coeurs de processeur à utiliser. Ce paramètre est important surtout si vous utilisez LC0 sans le recours à une carte graphique CUDA (DNNL BLAS et OpenBLAS).

SyzygyPath ++ : indiquez ici le chemin vers votre tablebase de fin de parties Syzygy si vous les avez.

MultiPV + : par défaut le multiPV est réglé pour suivre une seule piste - autrement dit désactivé.

UCI_Chess960 + : indique au moteur qu'il doit adopter les règles de la variante Fischer des échecs.

Remarque : à priori, les fichiers de poids obtenus à partir des règles classiques ne devraient pas convenir ou mal. En effet les configurations de pions inhabituelles de début et de milieu de partie sont forcément inconnues du réseau neuronal. J'indiq
uais il y a 4 ans une adresse où trouver des fichiers de poids établis par renforcement à partir de zéro, mais ils ont disparu et je n'en ai pas trouvé d'autres.

SmartPruningFactor + : ce paramètre règle le fonctionnement d'un algorithme d'élagage "intelligent" de l'arbre de recherche. Il permet d'augmenter ou de réduire la propension du moteur à laisser de côté les mouvements pour lesquels il y a de fortes probabilités qu'ils soient moins bons que les meilleurs dont il dispose déjà. A zéro, l'élagage est désactivé. A 1 il est en situation moyenne. A 1,5, il va élaguer largement, ce qui lui permettra de gagner du temps de réflexion et d'être tactiquement plus fort. En dessous de 1, le moteur devient précautionneux et conserve des branches qui paraissent médiocres au premier examen. La valeur par défaut, 1.33, privilégie plutôt la rapidité.
Cet élagage "intelligent" se paye toujours d'une petite perte de qualité de l'évaluation. On considère traditionnellement qu'en faisant économiser du temps d'évaluation, il augmente beaucoup la force tactique du moteur mais amoindrit un peu sa maîtrise de la position.

Backend et backend options + :
LC0 peut utiliser plusieurs fonctionnements d'arrière-plan. Pas moins de neuf backends différents sont proposés. Certains sont obsolètes, comme indiqué par la documentation. C'est le cas de tensorflow et tenserflow CPU.
A priori, le bon backend s'adapte à la version de LC0 que vous avez installé. Vérifier le cas échéant car les gains en performances peuvent être importants.
➤Les ordinateurs équipés d'une carte graphique NVidia de dernière génération, à coeurs tenseurs - notamment la série RTX 20xx - devraient employer LC0 CUDA et le backend "cudnn-fp16".
➤Les ordinateurs équipés d'une carte graphique compatible CUDA plus ancienne devraient employer LC0 CUDNN et le backend "cudnn".
➤Les ordinateurs récents équipés d'une carte graphique non-compatible CUDA devraient employer LC0 onnx-dml et le backend "opencl".
➤Les ordinateurs sans véritable carte graphique vont employer LC0 DNNL BLAS et OpenBLAS avec le backend "blas".
➤Le backend "multiplexing" concerne uniquement les chanceux disposant de plusieurs cartes graphiques.

Backend options est un champ permettant d'entrer des paramètres de réglage des backend. Je n'en dirai rien de plus. Ceux qui voudraient en savoir davantage pourront consulter cette page : https://lczero.org/blog/2019/04/backend-configuration/


Je propose de rien changer aux autres paramètres du menu.



Lucas Chess

LCZ s'installe de façon habituelle et tourne très bien avec Lucas Chess : menu "Outils" > "Moteurs" > "Configuration des moteurs" ; bouton "Nouveau" et allez chercher
l'exécutable "lc0.exe ".
Pour accéder au menu de configuration, où vous trouverez les mêmes paramètres que vu pour Arena : menu "Options" > "Configuration des moteurs". Dans la liste, cliquez sur LC0 et dans la partie droite de la fenêtre, changez les paramètres à votre convenance.
Petite contrainte embêtante toutefois : il faudra saisir manuellement le chemin vers le fichier de poids et vers les fichiers de finales - ou copier le chemin. Un petit défaut de LC jamais corrigé !


PyChess

Pour PyChess :  menu "Éditer" > "Moteurs" puis bouton "Nouveau" et allez chercher
l'exécutable "lc0.exe ". A ce stade, si vous ouvrez l'onglet "options" vous accéderez aux paramètres de configuration du moteur. Sinon, vous y reviendrez par : menu "Editer" > "Moteurs", choisir LC0 dans la liste, puis onglet "Options".

Voir aussi ci-dessous le cas particulier de Nibbler.


Nibbler : une interface d'analyse pour LC0

L'équipe qui développe LC0 propose également une petite interface graphique appelée "Nibbler", spécialement étudiée pour accueillir LC0. Elle peut aussi accepter la plupart des moteurs UCI mais ce n'est pas toujours sans problème et jamais sans certaines restrictions - comme par exemple l'impossibilité d'afficher le menu de configuration des moteurs. C'est pourquoi Nibbler n'a jamais fait partie de ma sélection d'interface, malgré ses qualités.
La principale valeur ajoutée de Nibbler est sa spécialisation dans l'analyse. Le cours d'une partie est représentée graphiquement sur l'échiquier au moyen de vecteurs, appelés  "flèches" par les auteurs, permettant pour chaque pièce d'évaluer les probabilités de gain pour toutes les cases accessibles. Cette représentation visuelle de ls situation sur l'échiquier est très parlante.  Elle est rendu possible par le fait que le moteur neuronal n'évalue pas une position mais estime ses chances de victoire (voir ci-dessous).

Par contre l'usage de l'interface n'est pas toujours simple et on peine à comprendre l'intérêt et l'usage de certaines fonctions, aucune documentation solide n'étant proposée. Je me bornerai donc pour l'instant à signaler son existence et à balayer quelques points me paraissant ilmportants.



Téléchargement et installation de moteurs

On trouve les versions Windows et Linux du programme ainsi que ses sources sur cette page Github : https://github.com/rooklift/nibbler/releases
Actuellement (juillet 2024), la plus récente est la v2.4.6.
Ceux qui voudraient obtenir une version MacOs devront consulter d'autres pages :
https://github.com/twoplan/Nibbler-for-macOS
https://github.com/Jac-Zac/Nibbler_MacOS
Concernant la version Windows, il n'y a pas d'installation. Il suffit d'ouvrir l'archive et d'en extraire son contenu quelque part sur votre ordinateur. L'application est lancée à partir du fichier "nibbler.exe".


Pour installer LC0 dans Nibbler : "Engine" > "Choose engine" et allez chercher l'exécutable LC0. En fait, ce n'est pas réellement une installation. D'ailleurs, c'est le même chemin que l'on emprunte ensuite pour relancer le moteur après fermeture.
Pour changer de fichier de poids : menu "Engine" > "Weights" > "LC0 weightsFile" et aller chercher un réseau.
Nibbler accepte aussi sans trop de difficulté les moteurs UCI algorithmiques. Je n'ai pas fait beaucoup d'essais mais je n'ai eu aucun souci avec Stockfish et avec Komodo.
Lorsque plusieurs moteurs ont déjà été indiqués à l'interface, on les retrouve depuis le menu "Engine" > "Choose known engine". Il suffira de choisir dans la liste celui qui vous intéresse.



Configuration

Nibbler ne permet pas d'accéder au menu de configuration des moteurs car étant dédié à LC0, ses menus ont été pensés pour configurer ce moteur en particulier.  C'est pourquoi cette interface n'est pas idéal pour utiliser d'autres moteurs.  N'ayant pas l'intention de proposer un mode d'emploi détaillé, je me contenterai de survoler quelques points importants :

Changer de backend (voir plus haut : Backend et backend options) : menu "Engine" > "Backend"
Indiquer un chemin vers des tables de finales Syzygy, si vous en disposez : menu "Engine" > "Choose Syzygy path..."
Préciser le nombre de threads utilisables par le moteur : menu "Engine" > "Threads"
Choisir une taille pour la table de hachage : menu "Engine" > "Hash". Malheureusement, entre 0 et 1 Go il n'y a rien de prévu.
Suivre plusieurs pistes en même temps : "Engine" > "MultiPV"
Modifier la valeur de tolérance à la nullité : "Engine" > "Contempt". A priori, un contempt fortement négatif incitera le moteur à rechercher la nullité de la partie dans des situations d'infériorité. Un contempt fortement positif poussera au contraire le moteur à rechercher à faire mat même dans une situation difficile.

Vous trouverez aussi sur cette page un petit mode d'emploi. Il a déjà quelques années mais il reste utile. http://echiquierbriochin.fr/jeu-echecs-nibbler-lc0-leela-chess-gui-interface/


Probabilité de gagner - WDL

Un autre des intérêts majeur de Nibbler pour l'analyse est que c'est l'une des rares interfaces (les autres étant la gratuite Banksia et la commerciale Fritz 17) qui soient capables d'afficher les probabilités WDL.
Je m'explique : un moteur algorithmique classique prend en compte un certain nombre de critères (poids du matériel, risque de perte de matériel, données positionnelles diverses) qui lui permettent de donner à une position une évaluation mesurée en centièmes de la valeur d'un pion. Un moteur neuronal comme LC0 ne fonctionne pas du tout de cette manière. L'évaluation consiste ici à fouiller le réseau de poids afin d'établir pour une position les probabilités qu'elle débouche sur une victoire.  
L'ennui c'est que les interfaces classiques comme Arena ou Lucas Chess attendent une valeur en centipion et non une probabilité. C'est pourquoi le moteur convertit la probabilité de gagner en une valeur en centipion en utilisant le résultat d'une fonction dont voici la représentation :


Source : https://lczero.org/

C'est donc une approximation qui présente de plus l'inconvénient de ne pas prendre en compte la probabilité de faire nul. C'est pourquoi la constitution des réseaux à partir de juillet 2019 a été modifiée pour prédire séparément une victoire (Win), une nulle (Draw) ou une défaite (Loss). Ce qui a donné naissance au concept de tête WDL. Pouvoir afficher les WDL plutôt qu'une valeur en centipion est ce qui permet à Nibbler d'afficher concrètement la pensée de LC0 lors de l'analyse d'une position. Voyons sur un exemple concret ce que cela veut dire :



Source : https://lczero.org/

Ce graphe est une représentation de l'évaluation WDL de la totalité d'une partie de LC0 contre Stockfish. Le bleu est l'estimation des probabilités de victoire de LC0, le vert les probabilités de défaite (et donc de victoire de Stockfish) et le orange les probabilités de nulle. La ligne noire centrale représente l'évaluation de Stockfish qui, à partir du coup 22, estime la situation pratiquement égale et ce jusqu'à la fin de la partie - qui s'est effectivement terminé par une nulle. Toutefois, l'examen des sorties WDL montre que jusqu'au coup 50, LC0 estimait que chaque camp pouvait encore gagner la partie.
On voit sur ce simple exemple que l'évaluation de LC0 donne des perspectives nouvelles à l'analyse, que Nibbler est l'une des rares interfaces à pouvoir exploiter.  


Voir : https://lczero.org/blog/2020/04/wdl-head/


Ici, LCo analyse la position du 24eme coup d'une partie entre Good Gyal 5 et Mean Girl 7. Les blancs viennent de mettre le roi noir en échec avec leur dame. Le meilleur coup pour les noirs serait de déplacer le roi en g7, ce qui lui offrirait plus de 57% de probabilités de remporter la partie... Roi en g8 est par contre un très mauvais coup, réduisant fortement les perspectives de victoire.



Arena Leela Chess Zero

Pour vous éviter un fastidieux travail d'installation, je vous propose de télécharger ici une version portable de l'interface Arena équipée de LC0 avec une vingtaine de personnalités, de niveau de force variable. J'ai installé et préconfiguré trois versions de LC0, afin d'adapter le moteur à un maximum de configurations matérielles. L'objectif d'obtenir la puissance maximale n'était cependant pas prioritaire.
Version DNNL BLAS : C'est la moins puissante des trois car elle correspond aux machines à processeurs modernes mais dépourvues de cartes graphiques performantes (GPU). Ce qui est le cas de 95% des machines de bureautique vendues actuellement. Elle tournera donc presque toujours sans difficulté, quel que soit votre matériel, en utilisant essentiellement les processeurs (CPU).
Version CUDNN : pour ordinateurs équipés d'une carte graphique NVidia compatible Cuda mais assez ancienne
Version CUDA : pour ordinateurs dotés d'une carte graphique NVidia récente.




Installation

Il n'y a pas d'installation. C'est une version portable pour laquelle tout est déjà pré-installé. Il suffit donc de copier le contenu de l'archive où vous voulez sur votre ordinateur puis de créer un raccourci vers le fichier "Arena.exe" du répertoire principal. En principe, l'interface devrait fonctionner sans problème sur n'importe quel PC / Windows.
Comme d'habitude, tout ce qui n'est pas utile aux moteurs installés à été supprimé. J'ai par contre rajouté les tables de fin de parties Syzygy à 5 pièces, que LC0 sait gérer, et quelques bibliothèques d'ouvertures.

Trois des cinq versions du moteur sont installées. Elles devraient permettre à tout le monde - ou presque - de faire tourner LC0.  
Par ailleurs, ont été mise en place et paramétrées les personnalités suivantes :

➤Bad Gyal 5 (Cpu DNNL seulement)
Good Gyal 5 (3 versions : Cpu DNNL, Cuda NN et Cuda)
➤Bad Gyal 6 (Cpu DNNL seulement)
➤Good Gyal 6 (Cpu DNNL seulement)
➤Evil Gyal 6 (Cpu DNNL seulement)
➤Bad Gyal 7 (Cpu DNNL seulement)
➤Good Gyal 7 (3 versions : Cpu DNNL, Cuda NN et Cuda)
➤Bad Gyal 8 (Cpu DNNL seulement)
➤LC0 standard (avec le fichier de poids par défaut, en 3 versions : Cpu DNNL, Cuda NN et Cuda)
➤Mean Girl 7 (Cpu DNNL seulement)
➤Mean Girl 8 (3 versions : Cpu DNNL, Cuda NN et Cuda)
➤Tiny Girl 8 (Cpu DNNL seulement)
➤Et enfin les 9 versions de Maïa, de 1100 à 1900 Elo, uniquement en version Cpu DNNL.

Vous remarquerez que seuls le fichier de poids standard et les personnalités les plus fortes bénéficient d'une déclinaison Cuda et Cuda NN. Si vous ne disposez que d'une machine de bureautique pas trop ancienne sans carte graphique performante, toutes les personnalités devraient pouvoir se contenter de la version Cpu DNNL.

Lancement et configuration

Pour lancer une personnalité de LC0, il faut d'abord la choisir : menu "Modules" > "Gérer", sélectionner une personnalité dans la liste et cliquer sur "Appliquer".
Il n'est probablement pas nécessaire que vous accédiez au menu de configuration de la personnalité. Par défaut j'ai arrêté la pondération, réglé "Threads" sur 2 et conduit chaque personnalité vers les tables de finales Syzygy (sauf les plus faibles). Tous les autres paramètres sont sur valeur standard. Si vous voulez changer quelque chose : menu "Module" > "Module 1" > "Configurer".

Bibliothèques d'ouvertures

Le répertoire "Books" contient trois bibliothèques d'ouvertures :
➤"Perfect2018.abk" : bibliothèque d'ouvertures pour moteur de haut niveau.
➤"Chessterfield.abk" est tirée d'une sélection de plus de 80.000 parties de 24 joueurs du top 50 de juin 2024. C'est une bibliothèque généraliste, peu profonde (12 1/2 coups)mais comportant beaucoup d'entrées.
➤"Mini.abk" est une bibliothèque généraliste de faible profondeur (8 1/2 coups) pour accompagner les moteurs faibles.


Téléchargement

Si vous souhaitez télécharger l'interface Arena avec LC0 et ses diverses personnalités, vous avez juste à remplir le formulaire ci-dessous pour donner une adresse mail valide ; le lien de téléchargement vous sera aussitôt renvoyé... C'est gratuit, bien sûr, ne vous engage à rien et vous ne serez pas inondé pour autant d'une multitude d'offres publicitaires.

Rob Robinson, juillet 2020. Article profondément revu en juillet 2024.





Formateur clubJoueur de clubSimple amateur
Formateur scolaireJoueur scolaireAutre
Formateur indépendantJoueur en ligne


IMPORTANT : je répond TOUJOURS aux demandes qui me sont faites. Donc si vous ne recevez rien, c'est qu'il y a eu un problème d'acheminement du message. Il se trouve probablement dans votre boîte à spams, comme quelques personnes me l'on signalé. Boîte à spams ou jamais reçu, merci de me le faire savoir en envoyant un message à :

commerobinson (at) franceserv.com

Rob

 
 
 
 
 
 
Retourner au contenu | Retourner au menu _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();