Leela Chess Zero - Echecs et informatique sur PC-Windows

Rechercher
Aller au contenu

Menu principal :

Les moteurs

Leela Chess Zero
Sur les talons de Stockfish


Disponible depuis quelques mois déjà, le moteur à réseau neuronal Leela Chess Zero (parfois appelé aussi LCZ ou LC0) bénéficie à présent de réseaux neuronaux assez performants pour lui permettre de battre les meilleurs moteurs actuels, Stockfish et Komodo*.




Les techniques employées pour développer LCZ sont celles que Google a utilisé pour mettre au point Alpha Chess Zero. Le moteur expérimental de sa filiale Deepmind utilise un réseau neuronal à apprentissage par renforcement. Il ne connaissait donc au départ que les règles du jeu et 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 à algorithme.


Déjà autour de 3500 Elo

Alpha Chess Zero n'est bien sur pas disponible pour nous mais, comme pour Leela Go Zero,  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 a 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, LCZ a pu compter en revanche sur la mobilisation d'une nombreuse communauté, qui met en commun ses moyens. Mais cela prend du temps. Lorsque j'ai rédigé un premier article sur LCZ, il y a environ un ans, le moteur atteignait les 3000 elo avec le meilleur fichier de poids. Aujourd'hui il est à 3500.  L'année dernière, LCZ a battu officiellement Stockfish, en version 10. Avec la version 11 mise en service cette année, qui progresse de 50 Elo, le moteur algorithmique a repris l'avantage. Toutefois, LCZ va continuer à progresser et finira par distancer tout moteur classique, quel qu'il soit.

Pas si "zéro" que ça...

Il est à noter que si Alpha Chess Zero part de zéro en jouant uniquement contre lui-même, technique dite "à renforcement", la communauté autour de LCZ utilise fréquemment d'autres méthodes pour enrichir les fichiers de poids, en particulier l'apprentissage supervisé. Autrement dit, on apprend aussi au moteur à ingurgiter des parties de grands maîtres humains et des parties de moteurs de haut niveau pour enrichir son expérience.


Ce que j'en pense ?

Si théoriquement LCZ est aussi fort voire plus fort que les meilleurs moteurs algorithmiques, en pratique, pour l'utilisateur lambda, l'avantage n'est pas évident. Le moteur neuronal a un inconvénient: il exige beaucoup de mémoire, des processeurs costauds et une carte graphique récente et puissante pour que sa force s'exprime. Or, la majorité des utilisateurs ont des configurations matérielles insuffisantes. L'amélioration continuelle des fichiers de poids devrait toutefois permettre au moteur, dans l'avenir, de compenser au moins en partie cet inconvénient.
Un autre obstacle provient de la faiblesse de la documentation disponible, ce qui laisse dans l'ombre beaucoup de questions, pour le moment.


Téléchargement et installation

Vous trouverez les distributions LCZ sur le site officiel.
Télécharger Leela Chess Zero ?

Quelle version utiliser ?

Avant d'installer le moteur vous devez savoir quelle version utiliser, en fonction de votre matériel. Comme Leela Go Zero, Leela Chess Zero est optimisé pour fonctionner avec une carte graphique Nvidia récente utilisant la technologie CUDA. Si vous possédez au moins une GeForce série 7, vous pourrez faire tourner la version dite "CUDA" de LCZ, la plus performante. En résumé, ceux qui ont de puissantes machines pour jouer à des jeux 3D seront nettement avantagés.

Si vous n'avez pas de carte graphique "CUDA", les auteurs de LCZ ont pensé à vous, en développant plusieurs versions du moteur, afin de tenir compte des différentes configurations matérielles. Je ne parle ici que de versions pour PC/Windows. Il y a 4 solutions de secours en tout. De la plus puissante à la plus faible :

1/ version "DirectX12" : pour machine équipée d'une carte graphique récente autre que Nvidia et d'un environnement Windows 10 avec Directx12.

2/ version "OpenCL" : pour machines équipées d'un Windows inférieur à Wds 10 et/ou de cartes graphiques anciennes.

3/ version "DNNL BLAS" : pour machines de bureau sans (vraie) carte graphique mais à processeurs modernes.

4/ version "OpenBLAS", pour ceux qui ne sont vraiment pas bien lotis en matériel. Elle permet de faire fonctionner le moteur avec une machine ancienne ou très peu puissante - comme par exemple un portable d'entrée de gamme.



Ces cinq versions fonctionnent sur PC-Windows. Alpha Chess Zero existe également pour Android et MacOS.

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.


Choix du fichier de poids

Le moteur est livré avec un réseau de poids par défaut appelé actuellement "703350". Mais il sera plus judicieux de faire un choix en connaissance de cause parmi les nombreux fichiers déjà disponibles sur le site officiel. Ceux-ci existent en plusieurs formats. Le réseau de poids peut en effet être plus ou moins étendu, en "hauteur et en largeur", ou encore en "blocs et filtres".
Actuellement, les plus gros fichiers de poids disponibles pour LCZ sont de 30 blocs et de 384 filtres. Ces gros réseaux seront adaptés à des machines puissantes et rapides, équipées de bonnes cartes graphiques et pour une utilisation du moteur à très haut niveau de force.
Inversement, les petits réseaux de 10 blocs et 128 filtres ou moins seront employés pour faire jouer le moteur contre des adversaires humains, avec des machines de bureautique courantes. Le moteur jouera à un niveau plus faible mais beaucoup plus rapidement.
Entre les deux, il y a les 24 blocs et 320 filtres, les 20 blocs et 256 filtres, les 15 blocs et 192 filtres (mais toutes les tailles intermédiaires sont possibles).

Là encore, le choix se fera en fonction de votre matériel. Mais aussi en fonction de vos objectifs. Si vous voulez utiliser le moteur pour jouer, il est fort probable, à moins que vous ne soyiez Magnus Carlsen en personne, qu'un fichier de poids de 15 blocs et une machine avec une GPU un peu basique soit suffisants. Un réseau de 10 blocs sera idéal pour des parties de type Blitz.

Mais, contrairement à ce qui se passe pour le Go, nous ne manquons pas de moteurs puissants pour jouer aux échecs.  Le principal intérêt d'un moteur comme LCZ est d'être utilisé comme outil d'analyse et de conseil. Encore que sur ce point, il n'apporte pas pour le moment un avantage décisif sur Stockfish ou Komodo, qui sont d'un niveau de force équivalent et ne nécessitent pas de machines aussi puissantes que le nouveau moteur neuronal.

Vous trouverez ces fichiers de poids sur le site officiel à cette adresse :

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

Il est conseillé de sélectionner les réseaux de Sergio Vieri, à moins d'avoir une bonne raison de préférer un autre.
Le réseau à 20 blocs SV-20b-t40-1541 de Sergio V. semble être un bon choix standard. Toutefois rien ne vous interdit de mettre plusieurs fichiers de poids dans le dossier du moteur. On passe très facilement de l'un à l'autre depuis le menu de configuration de LCZ - surtout si on utilise Arena ou l'interface dédiée Nibbler (voir ci-dessous).  



Installation des moteurs dans les interfaces et configuration

Arena

L'installation dans Arena est tout à fait standard. Créez un dossier "Leela Chess" ; allez dans le répertoire où vous stockez vos moteurs et placez-y tous les fichiers de la distribution ("client.exe" ne vous sera utile que si vous souhaitez contribuer à la création de fichiers de poids). 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 LCZ est impressionnant. On trouve une documentation sur le site officiel mais elle manque de clarté. Les notions ne sont pas explicités ; or, elles sont très différentes de celles qui prévalent pour les moteurs algorithmiques. Pour l'instant je n'insisterai que sur certains points qui me paraissent importants, mais j'y reviendrai surement dans l'avenir, quand les réseaux neuronaux seront plus matures.



Par ailleurs les auteurs annoncent leur intention de simplifier ce menu...

WeightsFile : avec le sélecteur de fichier, indiquez dans le champ quel réseau neuronal vous voulez utiliser.

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

Threads : nombre de coeurs de processeur à utiliser.

RamLimitMb : ce paramètre limite la quantité de mémoire utilisée par le moteur pour sa recherche. Il est important de connaître comment il fonctionne car LCZ doit conserver la totalité de l'arborescence de recherche en mémoire, contrairement à ce qui se passe pour un moteur algorithmique. Si le moteur travaille à très haut niveau, par exemple pour l'analyse, avec un gros réseau neuronal, il risque de planter pour cause de out of memory.
Si vous n'avez qu'un ou deux Go de ram, franchement, évitez d'utiliser LCZ. Ce moteur n'est vraiment pas fait pour les petites configs.
Si vous avez 4 Go, réglez RamLimitMb à 3.
Si vous avez 8 Go, réglez à 6 ou 7
Si vous avez 16 Go, réglez à 14 ou 15...

NNCacheSize : ce paramètre indique le nombre de positions que le moteur va stocker dans un cache, par défaut, 20.000. Malheureusement, je n'ai aucun point de référence pour vous conseiller une valeur, en rapport avec votre matériel et vos objectifs. Tout ce que je peux dire c'est que si vous utilisez LCZ pour l'analyse et le conseil et que vous disposez de 8 Go de ram ou plus, vous aurez sûrement intérêt à l'augmenter.

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

SyzygyFastPlay, coché par défaut : le moteur privilégiera le coup de la tablebase dont la DTZ (distance à zéro) est la plus courte (Voir l'article sur les tables de finale). Le jeu du moteur sera plus rapide mais la qualité sera légèrement affectée. A décocher si le temps de traitement n'est pas un problème.

Ponder : sauf exception, il convient de désactiver la pondération.

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. Par contre il existe au moins une collection de réseaux constitués à partir de parties d'échecs 960. On la trouve sur le site officiel, ici : https://training.lczero.org/networks/3
Ces fichiers de poids de 19x256 ont été constitués uniquement par renforcement à partir de zéro.


SmartPruningFactor : ce paramètre règle le fonctionnement d'un algorithme qui ressemble fort à une routine d'élagage de futilité. 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 intelligent 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 au contraire précautionneux et explore les 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 par une petite perte de qualité de l'évaluation. On considère traditionnellement qu'en faisant économiser beaucoup de temps d'évaluation, il augmente la force tactique du moteur mais amoindrit sa maîtrise de la position.


Lucas Chess

LCZ s'installe de façon habituelle et tourne très bien avec Lucas Chess : menu "Outils" > "Moteurs" > "Moteurs externes" ; bouton "Nouveau" et allez cherchez l'exécutable "lc0.exe ". Puis cliquez tout de suite sur le bouton "Configurer". Vous trouverez les mêmes paramètres que ceux vus pour Arena. Petite contrainte embêtante toutefois : il faudra saisir manuellement le chemin vers le fichier de poids et vers les fichiers de finales. Fastidieux !


Scid Vs PC

Depuis l'interface de Scid vs PC, menu "Outils" > "Moteurs d'analyse" : un widget s'ouvre. Cliquez sur le bouton "Nouvelle". Dans le champ "Nom", écrivez "Leela Chess Zero". Pour "Commande", cliquez sur le bouton "Parcourir" et allez chercher l'exécutable "lc0.exe ". Enfin cliquez sur "Configurer" pour accéder au menu de configuration. Même remarques que pour Lucas Chess : les paramètres sont les mêmes que pour Arena mais il n'y a pas de sélecteur de fichiers, donc nécessité d'écrire dans le champ adéquat le chemin vers le bon réseau neuronal.



Nibbler : une interface d'analyse pour Alpha Chess Zero

L'équipe qui développe Alpha Chess Zero propose également une petite interface graphique appelée "Nibbler". Elle est encore en cours de développement mais fonctionne déjà assez bien, acceptant sans problème LCZ bien sûr mais aussi tous les moteurs UCI.
La principale valeur ajoutée de Nibbler est sa spécialisation dans l'analyse. Laquelle est représentée aussi 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 est très efficace. Par contre l'usage de l'interface est complexe et on peine à comprendre à quoi servent certaines fonctions, aucune documentation n'étant proposée. Je me bornerai donc pour l'instant à signaler son existence, en attendant que cet outil prometteur arrive à maturité.



A télécharger ici : https://github.com/fohristiwhirl/nibbler/releases

Vous trouverez aussi sur cette page un petit mode d'emploi.
http://echiquierbriochin.fr/jeu-echecs-nibbler-lc0-leela-chess-gui-interface/

Rob Robinson, juillet 2020.


 
 
 
 
 
 
 
 
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); })();