Cómo instalar el engine “LeelaChessZero” (lc0) para su uso en cualquier interfaz de ajedrez.

 

Hola gente. Nuestro equipo ha decidido traer esta vez una guía sencilla, para instalar y configurar el motor de ajedrez conocido como LeelaChessZero o lc0.

Para poneros en contexto, este motor de ajedrez ha sido desarrollado siguiendo el paper original de AlphaZero, el cual es un motor de ajedrez que usa la inteligencia artificial (IA) en vez de patrones definidos por el programador, para aprender de sus propias partidas. Éste motor, como muchos ya sabréis, causó alta expectación en su día, tanto por superar a Stockfish como por su estilo de juego.

Pues bien, la reacción de la comunidad no se hizo esperar, y lanzó su propio proyecto de código abierto (LeelaChessZero) en el cual trabajan profesionales de la IA (y cualquier tipo de público en colaboración con ellos) para optimizar y entrenar la red neuronal que lo forma. Podéis encontrar los enlaces a este código más abajo en la guía.

Es importante que destaquemos las características de estos nuevos tipos de motores que usan IA basada en redes neuronales, en contra de los motores de análisis tradicionales.

Características LC0 vs. traditionals:

  • Basada en NNs (Neural Networks), y usan algoritmos de Deep Learning.

  • Estas NNs necesitan ser entrenadas con sus propias partidas. Es decir, se deja que el motor juegue inicialmente contra sí mismo y vaya reajustando sus parámetros y su conocimiento de las posiciones a base de prueba-error (win / lose). En definitiva, se crea su propio estilo de juego desde 0.

  • Estos parámetros (conocidos como pesos o “weights”), son entrenados, almacenables, exportables y reutilizables. Es decir, podríamos coger los pesos calculados por otro usuario, seguir entrenando la NN, mejorar los iniciales y guardar el resultado. Esto hace que en la actualidad, pocos motores puedan competir contra este tipo de aprendizaje. Hay una mejora constante y abierta a la comunidad.

  • Puede nutrirse del análisis de partidas humanas. Para ésto, las plataformas de ajedrez que liberan/publican las partidas son útiles, en contraposición al material de pago que ofrece, por ejemplo, Chessbase (y su calaña).

  • Está pensado para hacer uso de la GPU (la unidad gráfica de nuestro ordenador) para realizar cálculos a mucha más velocidad. Así, al ser un proyecto en el que puede aportar cualquier persona y hacer uso de su GPU ( ~ x100 veces la capacidad CPU con la que solemos usar el ordenador), tenemos el equivalente al mayor supercomputador pensado jamás para entrenar este motor de ajedrez.

Después de haber mencionado todo lo anterior, uno se puede hacer a la idea de porqué es interesante (y tanto) este motor de ajedrez. Sin más, vamos con la guía.

GUÍA DE INSTALACIÓN:

El motor de ajedrez es un binario del sistema operativo en el que nos encontremos, y se debe cargar en cualquier interfaz de ajedrez a través de paneles como “Análisis”/”Analysis” ->”Cargar motor UCI”/”Load UCI engine”. Además de ésto, se necesita especificar el archivo de Pesos en la configuración del motor, a diferencia de otros motores tradicionales.

Lo primero que tenemos que tener en cuenta es qué sistema operativo poseemos, así dividiremos en los siguientes grupos:

Windows:

Sus archivos binarios son conocidos por su extensión “.exe”, que se ejecutan al abrir éstos archivos. El motor de ajedrez se puede descargar en el enlace. Y sus pesos en éste enlace.

Los archivos comprimidos pueden contener código fuente del proyecto, por lo cual habría que buildear un binario “.exe” que añadiese ciertas funcionalidades en caso de ser necesario. Seguir leyendo el apartado “Linux”->”Compilar código fuente” para continuar el proceso general.

Linux:

Una aclaración, es que Linux y sus derivados (Ubuntu, Fedora, RedHat, etc.) son los sistemas operativos que más se usan en software libre y por tanto, van en consonancia con la lógica del proyecto. En caso de que no poseáis una utilidad básica o programa necesitado por vuestro sistema(i.e. “git”), siempre podéis instalarlo desde vuestro gestor de paquetes (Google, bienvenido seas para ayudarme en esta ardua tarea). Podemos descargar los binarios a partir de archivos comprimidos llamados “tarballs” (.tar.gz), o bien compilar el código fuente del proyecto.

  1. Descargar comprimidos:

    Click en el enlace para descargar. Una vez descargados, proseguir con:

    tar -xzvf <nombre_del_archivo>.tar.gz

    Y ya tendremos nuestro binario llamado “lc0”. Descargar el archivo de pesos en éste enlace.

  2. Compilar código fuente:

    Aquí el enlace al repositorio de lc0 en GitHub.

    git clone https://github.com/LeelaChessZero/lc0

    Esto os creará la carpeta “lc0” con los contenidos del repositorio online, en el directorio donde hayáis ejecutado el comando.

    cd ./lc0

    Desde aquí lo más recomendable siempre es seguir la guía de instalación, leyendo los archivos “README.md” o en su defecto, “INSTALL”. En el anexo de esta guía se ofrecerán referencias para poder construir el binario de manera que sea capaz de ejecutar el motor en GPU. Para instalar el binario compatible con CPU, se siguen los siguientes pasos:

    Se instalan las dependencias necesarias marcadas por el proyecto. Una vez instaladas las dependencias, ejecutamos.

    ./build.sh

    Y nos creará el binario en:

    cd ./build/release

    llamado “lc0”. Éste será el archivo que necesitaremos cargar. El archivo de pesos se puede descargar en éste enlace.

Mac OS:

Para los sistemas operativos de la empresa Apple, como Mac OS, podemos seguir la compilación del código fuente como en el caso explicado antes de Linux, con la particularidad de que los compiladores que instalemos de nuestro gestor de paquetes lo harán en nuestra arquitectura de ordenador. Simplemente, se seguirá el proceso igual que en “Linux”->”Compilar código fuente”, y en el caso de faltar librerías o programas necesarios para la compilación, se instalarán desde el gestor de paquetes nativo (brew).

ANEXO 1. POST-INSTALACIÓN (opcional).

Hay varias opciones adicionales que podemos tener en cuenta de manera general en el proceso post-instalación:

  • Añadir los binarios a la variable PATH del sistema. De esta forma, podemos ejecutar los comandos sin estar presentes en la carpeta donde se encuentren. En Windows, se procede editando la variable PATH del sistema y añadiendo la ruta (la carpeta donde se encuentran) de los binarios. En Linux, se puede editar el fichero “~/.bashrc” añadiendo lo siguiente:

export PATH=$PATH:<ruta_de_los_binarios>

ANEXO 2. COMPATIBILIDAD CON GPU (opcional).

Para el caso en que queramos compatibilidad con la poderosa GPU (lo cual puede ser muy útil para el entrenamiento del modelo y para cálculos congelados, es decir, aquellos en los que tenemos una posición del tablero fija y dejamos la máquina pensar un tiempo razonable), debemos seguir los pasos marcados en el repositorio oficial para el sistema operativo correspondiente.

A grandes rasgos, hay que tener en cuenta los siguientes pasos:

  1. Comprobar si nuestro ordenador posee una GPU compatible con CUDA. CUDA es una tecnología de aceleración que permite a nuestro ordenador utilizar los recursos de la GPU originalmente destinados a cálculo de gráficos, a procesos de la CPU normal. CUDA es específico de las gráficas Nvidia, pero hoy en día su uso está tan extendido que es poco probable que no tengamos una GPU de Nvidia. Podemos consultar las GPU que soportan CUDA en éste enlace.
  2. En caso afirmativo de lo anterior, instalar el driver de GPU que corresponda al más actualizado y que soporte tu gráfica.
  3. Instalar CUDA-toolkit. Podemos hacerlo a través de la página oficial de CUDA, o a través de línea de comandos del sistema: sudo apt-get install nvidia-cuda-toolkit
  4. Compilar de nuevo el código fuente de “lc0”, ésta vez con las opciones que soporten CUDA, tal como se guía en el README.md del proyecto oficial en GitHub.

Espero que este post os sea útil y que os aventuréis a probar este nuevo motor de análisis. Estoy seguro de que no os defraudará.