Informatique

Nibbler : grignoteur de Leela chess

Nibbler[1]Nibbler: grignoteur 1.1.1 est l’interface graphique[2]GUI: Graphical User Interface du moteur de jeu d’échecs Leela Chess (Lc0) : c-a-d son échiquier.

L’échiquier de Leela Chess

interface graphique échiquéen Nibbler pour le moteur de jeu d'échecs Leela Chess (Lc0)
Fischer: Cxe3 contre Byrne

La principale valeur ajoutée de cette interface graphique par rapport à Arena, Scid vs PC ou ChessBase accueillant tous les moteurs d’échecs implémentant le protocole UCI[3]UCI: Universal Chess Interface est son animation de l’échiquier en affichant la probabilité de gains au bout de la flèche du déplacement d’une pièce.

Principales variations de Leela Chess (Lc0) dans l'interface graphique Nibbler
Les trois meilleurs coups selon Leela Chess CPU

Selon le temps de l’analyse de la position, le graphe des meilleurs coups s’anime avec mise à jour des probabilités de gains entre 100% le joueur ayant le trait fait mat et moins de 10 % le joueur va perdre.

Postion courante FEN et partie PGN dans l'interface graphique Nibbler
PGN Robert Byrne vs Robert Fischer, New York 1963 dans Nibbler

Configurer Nibbler pour le moteur Leela Chess CPU BLAS

Télécharger lc0-v0.22.0-windows-blas.zip si le PC n’a pas de carte graphique NVIDIA.
client.exe sert pour l’apprentissage du réseau neuronal.

Menu « Engine » > « Choose engine… » > chemin de Lc0.exe

Sans carte graphique, on peut utiliser le moteur Lc0 pour BLAS[4]BLAS : Basic Linear Algebra Subprograms. Fonctions standardisées d’additions de vecteurs, produits scalaires et multiplications de matrice fonctionnant avec une CPU sans nécessité de GPU. :

C:\Chess\Leela\ProgBlas\Lc0.exe

Le backend « BLAS » est le moins performant des optimiseurs de calcul matriciel pour l’évaluation de la position dans le réseau neuronal mais le plus simple à mettre en œuvre car il n’y a pas à rechercher le dernier pilote de la carte graphique compatible CUDA[5]CUDA: NVidia Compute Unified Device Architecture.

TypeCarteMHzPerfBackendTempérature
CPUIntel i3-7029U2300521blas54°
CPUIntel i5-6300HQ2300521blas51°

BLAS correspond à l’utilisation d’un thread dédié d’une CPU Haswell Intel au lieu d’une GPU quand cette dernière n’est pas disponible ou que son pilote n’est pas à jour[6]Error CUDA. error: CUDA driver version is insufficient for CUDA run time version. Mettre à jour le pilote NVidia..

Configurer Nibbler pour le moteur Leela Chess CPU OpenCL

L’alternative à BLAS est OpenCL[7] OpenCL : Open Computing Language: programmation parallèle de CPU multi-cœurs et de GPU..

Télécharger lc0-v0.22.0-windows-opencl.zip si le PC n’a pas de carte graphique NVIDIA.

Plus complexe à mettre en œuvre que BLAS, lors du premier lancement de Lc0 avec backend OpenCL dans une console PowerShell ou Dos, le rodage consiste à auto-configurer le moteur parmi 578 configurations pour le réseau neuronal fourni et selon la carte graphique sélectionnée afin de calibrer le nombre d’opérations en virgule flottante par seconde (flops) :

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

Si le rodage ne converge pas, repasser avec l’exécutable Lc0 BLAS.

TypeCarteMHzPerfBackendTempérature
GPUIntel HD Graphics 6201000621opencl
GPUIntel HD Graphics 530950621opencl

Configurer Nibbler pour le moteur Leela Chess GPU

Télécharger lc0-v0.22.0-windows-cuda.zip si le PC a une carte graphique NVIDIA. C’est la configuration la plus performante selon la carte graphique.

Configuration de Leela Chess avec carte graphique CUDA NVIDIA dans Scid vs PC
Configuration de Lc0 GPU CUDA dans Scid vs. PC

L’exécutable lc0.exe est compilé pour un backend donné. Le moteur ne démarre pas quand le hardware GPU associé n’est pas trouvé.

C:\Chess\Leela\ProgCuda\Lc0.exe --backend-opts="cudnn(gpu=1)
TypeCarteMHzPerfBackendTempérature
GPUNVIDIA Titan RTX1350> 1112cudnn-fp16[8]FP16 : float16 par rapport Floating Point 3289°
GPUNVIDIA GeForce GTX 950M11241112cudnn[9]CudNN : NVidia Compute Unified Device (Architecture) Neural Network library60°

Configurer Nibbler avec un réseau neuronal

Indépendamment du choix du moteur CPU vs. GPU, il faut un réseau de neurones.

Menu « Engine » > « Choose weights file… » > chemin du réseau neuronal

C:\Chess\Leela\ProgBlas\256x20-2019_0617_1105_32_013.pb

Un tel réseau neuronal de 256 filtres et 20 blocs prend 65,2 Mo. Il est possible de télécharger et tester différentes configurations du réseau de neurones en terme de nombre de filtres et de blocs.

FiltreBlocPerf sur GPU GTX 1070 Ti
1281026 Kilo Noeud/s
1921511.5 KN/s
256205.5 KN/s

Notes

Notes
1 Nibbler: grignoteur
2 GUI: Graphical User Interface
3 UCI: Universal Chess Interface
4 BLAS : Basic Linear Algebra Subprograms. Fonctions standardisées d’additions de vecteurs, produits scalaires et multiplications de matrice fonctionnant avec une CPU sans nécessité de GPU.
5 CUDA: NVidia Compute Unified Device Architecture
6 Error CUDA. error: CUDA driver version is insufficient for CUDA run time version. Mettre à jour le pilote NVidia.
7 OpenCL : Open Computing Language: programmation parallèle de CPU multi-cœurs et de GPU.
8 FP16 : float16 par rapport Floating Point 32
9 CudNN : NVidia Compute Unified Device (Architecture) Neural Network library