Lc0 — Compilation sur Ubuntu 18.04 — Première partie

Mis à jour le 01/12/2022

Compilation du moteur d'échecs neuronal Lc0 version 0.28 sur Ubuntu 18.04.

Lc0 (Leela Chess Zero) est un moteur d'échecs (chess engine) open source basé sur un réseau de neurones.

Sur GitHub des releases sont proposées pour Windows et Android mais pas pour Linux. La page Readme décrit toutefois comment compiler les sources de Lc0 sous Linux pour Ubuntu 18.04 et 16.04.

Nous avons suivi les instructions de compilation dans une machine virtuelle Ubuntu 18.04 puis lancé le benchmark proposé par Lc0, d'abord sur la machine virtuelle puis sur le portable hôte qui tourne sous Ubuntu 22.xx.

Prérequis

  1. Installation des packages nécessaires :
    sudo apt-get install build-essential libstdc++-8-dev clang-6.0 ninja-build pkg-config python3-pip git
  2. Installation de l'outil de build Meson :
    pip3 install meson
  3. Vérification du gcc installé :
    gcc --version
    Qui répond :
    gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
    Copyright (C) 2017 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

Compilation

  1. Récupération des sources de Lc0 sur GitHub de la release 0.28 sortie le 25 août 2021 :
    git clone -b release/0.28 --recurse-submodules https://github.com/LeelaChessZero/lc0.git
  2. Compilation des sources :
    cd lc0
    Puis :
    ./build.sh
    Le résultat de la compilation se trouve dans le répertoire build/release/.
  3. On peut alors tester l'exécutable lc0 :
    cd build/release/
    Puis :
    ./lc0
    Ce qui donne :
           _
    |   _ | |
    |_ |_ |_| v0.28.0 built Nov  4 2021
    
    Et pour obtenir l'aide en ligne :
    ./lc0 --help

Lancement du benchmark sur Ubuntu 18.04

  1. Lc0 nécessite un réseau de neurones pour fonctionner. Les réseaux sont disponibles sur la page Networks. On y récupère le réseau 754042 pour avoir le même que celui livré avec la version Windows.
    wget https://training.lczero.org/get_network?sha=5b3bc98eb1f20249daae9f26622c8ba40cd6878f6b4ac2aba76b0d81fc98af70 -O 754042.pb.gz
    Le fichier 754042.pb.gz doit être placé dans le répertoire build/release/ où se trouve l'exécutable lc0.
  2. On peut alors lancer le benchmark :
    ./lc0 benchmark
    Ce qui donne :
    $ ./lc0 benchmark
           _
    |   _ | |
    |_ |_ |_| v0.28.0 built Nov  4 2021
    Found pb network file: ./754042.pb.gz
    Creating backend [eigen]...
    Using Eigen version 3.3.7
    Eigen max batch size is 256.
    
    Position: 1/34 rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
    Benchmark time 291 ms, 2 nodes, 7 nps, move d2d4
    Benchmark time 299 ms, 3 nodes, 10 nps, move e2e4
    Benchmark time 336 ms, 4 nodes, 12 nps, move d2d4
    Benchmark time 393 ms, 8 nodes, 21 nps, move e2e4
    Benchmark time 492 ms, 12 nodes, 25 nps, move e2e4
    Benchmark time 700 ms, 20 nodes, 29 nps, move e2e4
    Benchmark time 960 ms, 29 nodes, 30 nps, move e2e4
    Benchmark time 1137 ms, 43 nodes, 38 nps, move e2e4
    Benchmark time 1216 ms, 53 nodes, 44 nps, move e2e4
    Benchmark time 1385 ms, 70 nodes, 51 nps, move e2e4
    Benchmark time 1773 ms, 99 nodes, 56 nps, move e2e4
    Benchmark time 2202 ms, 165 nodes, 75 nps, move e2e4
    Benchmark time 2302 ms, 213 nodes, 93 nps, move e2e4
    Benchmark time 3038 ms, 315 nodes, 104 nps, move e2e4
    Benchmark time 4087 ms, 469 nodes, 115 nps, move e2e4
    Benchmark time 5669 ms, 690 nodes, 122 nps, move e2e4
    Benchmark time 5830 ms, 835 nodes, 143 nps, move e2e4
    Benchmark time 7329 ms, 995 nodes, 136 nps, move e2e4
    Benchmark time 8935 ms, 1379 nodes, 154 nps, move e2e4
    Benchmark time 10000 ms, 1432 nodes, 143 nps, move e2e4
    bestmove e2e4
    ...
    ...
    

Lancement du benchmark sur Ubuntu 22.04 et 22.10

Nous avons transféré l'exécutable et le réseau de neurones sur un portable sous Ubuntu 22.04. Le benchmark précédent fonctionne correctement. Idem après l'upgrade d'Ubuntu 22.04 vers 22.10.

Dans le billet suivant nous verrons comment compiler les sources de Lc0 avec support des GPU pour les cartes graphiques NVIDIA.