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.

  • 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

Ésto 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á.

I Torneo de Verano

Llegó el ocho del ocho, jueves noche, y por fin celebramos el I Torneo de Verano del Club. No teníamos muy claro si iba a ser un torneo privado o público, pero de pronto las inscripciones se dispararon y el torneo comenzó con cuarenta jugadores. De entrada, la noche acompañó. Para seguir, en la Asociación de Vecinos San José Obrero se portaron de dulce, y dejaron que ocupáramos todo el local. Esto produjo algo curioso. El torneo se celebró en dos habitaciones, una amplia en la que pudimos colocar los tableros de tres en tres (el número clave de la supervisión arbitral) y otra en la que se quedaron las cinco primeras mesas. Esto quiere decir que al subir en la tabla uno no sólo subía de mesa, sino que cambiaba de habitación. Los sospechosos habituales, por tanto, empezaron arriba y se quedaron arriba, jugando las partidas clave y alejados del resto de jugadores.

Había ambiente de torneo, la verdad. El ritmo era a 8+3 pero la gente movía rápido, como si estuvieran jugando a tres minutos. Competían muchos jóvenes de los clubes, que eran a los que casi siempre sobraba tiempo; pero arriba se lo estaban tomando muy en serio. Eduardo, por ejemplo, hizo un torneo brutal. «Justo cuando no vale para elo», decía. Y tenía razón, porque es que jugó a casi 400 puntos por encima de su rating, con una performance de 1618 y victorias sobre un 1807 y un 1968. Enhorabuena, Edu, eres un fenómeno. Eduardo quedó campeón sub 14, pero realmente quedó octavo en la general.

Las primeras rondas tuvieron los resultados más o menos predecibles, salvo unas tablas inesperadas entre Antonio Campos y Javier Martín Sánchez, otro sub 14 que hizo un torneo magnífico, y afrontó con una enorme sangre fría su partida con Campos, ya en apuros de tiempo. Hasta que llegó la ronda cuatro, en la que se enfrentaron Rioboo y Bernardo, los dos cabezas de lista y tal vez la partida que más observadores atrajo.Esta era la partida del morbo, la verdad, porque todos queríamos ver cómo de fuerte estaba Rioboo después de dos años por ahí en Canarias, sin jugar y terminando el máster de astrofísica. Rioboo está fuerte. Cinco y medio de seis, con unas tablas finales con Ceballos para asegurarse la victoria del torneo. Aquí el final de torres, a ritmo de Blitz:

Bernardo quedó segundo y Antonio Marañón, tercero. También hizo un muy buen torneo Gerardo de Vries, que puntuó con cuatro puntos, al igual que Adrián Pérez, del Fuensanta, y Juan Guillermo Pérez Jurado. Juan José Serrano, que remontó con dos victorias en las últimas rondas, cerraba con Ríos el grupo de jugadores con cuatro puntos. Con 4 y medio terminaron Carlos Ceballos y Carlos Torres. Torres actúo muy por encima de su elo, ocupando la sexta posición pese a partir como 26º por orden de fuerza. Ceballos, con mejor desempate que Torres, sólo cedió medio punto ante Rioboo y un punto ante Bernardo. Dicho de otro modo, sólo no ganó al enfrentarse a los dos primeros del torneo.

Como decíamos, había ambiente. Y jaleo. Dice mucho de los participantes que no abandonen el torneo al jugar la última partida, y hagan acto de presencia en la entrega de premios. Esto es una ley no escrita: hay que quedarse a aplaudir al vencedor, porque se lo merece. Y vaya si aplaudieron. A todos los ganadores, que recibieron unos azulejos pintados a mano por Pepe Trujillo.

La clasificación completa, y la evolución del torneo ronda a ronda, puede verse en chess-results.

Los premios se repartieron así:

Antonio Campos, recogiendo su azulejo.

Campeón del torneo Álvaro Rioboo, subcampeón Bernardo Cesar y tercero Antonio Marañón.
Campeón veterano Antonio Campos, subcampeón Antonio Ríos y tercero Gerardo De Vries.
En la categoría sub 18 el campeón fue Carlos Torres y subcampeón Javier Martín.
En la categoría sub 14 el campeón fue Eduardo Cesar y subcampeón Raúl Prats.
En la categoría sub 10 la campeona fue Elena Martín y subcampeón José Ángel Portero.
Los premiados por tramos de elo fueron en menos de 1600 Adrián Pérez, menos de 1400 Pedro Manuel Navarro Sánchez, y menos de 1200 Fernando Rafael Martín.

Una buena noche para el ajedrez, ya estamos montando la próxima.

Noche de partidas (1)

Miércoles, 31 de julio. Asociación de vecinos de San José Obrero. Hacía menos de una semana habíamos estado reunidos en el mismo sitio, debatiendo qué hacer el año que viene. El Postal es un club antiguo y con muchos miembros, lo que significa que todo el mundo tiene su opinión. Como los miembros somos inteligentes, significa que las opiniones son bastante fuertes. Lo bueno es que todos estamos de acuerdo en que además de reunirnos para estudiar, dar clases o para competir en todas las ligas en las que participamos, lo que hace vida de club es sentarse a jugar. Ya empezarán las temporadas de torneos sociales. Pero en verano nos vamos a reunir a jugar los miércoles. Desde las ocho de la tarde a todo lo que dé.

Estamos acostumbrados los ajedrecistas, ¿eh? Cada uno con su reloj y su tablero esperando en la puerta, mientras los vecinos se pasean rondando, curiosos y envidiosos, porque cuando la gente ve un tablero quiere JUGAR. Nosotros, que no sabemos estarnos quietos, no sólo jugamos. Eso es para aficionados, hombre. Nosotros nos montamos una liguilla a 5 minutos finish y 7 rondas.

¿Por qué 5 minutos, que es un ritmo de la vieja escuela, sin incrementos de modernos? Pues porque Miguel dijo que tenía reloj, pero para él reloj no significa un DGT como para cualquier jugador serio, sino un BHB verde del 98. Este detalle podría haber pasado desapercibido, pero Bernardo dejó claro que él no había jugado con un reloj analógico en su vida. Claro, Bernardo: este reloj te lleva siete años por la parte más baja (nota importante: desconocer el reloj no le impidió a Bernardo, que es campeón de España y otras cuantas cosas más, ganar la partida que le tocó con él).

Joaquín, Cristián y el reloj verde. Ganó Joaquín.

Pero el que brilló fue el maestro Campos, que ganó la liga porque ganó más que nadie con estilazo, simplemente. Así quedamos:

  1. Antonio 6 (18)
  2. Bernar 6 (16)
  3. Juanjo 5
  4. Edu 4 (9)
  5. Donate 4 (7)
  6. Truji 2
  7. Joaquín 1
  8. Cristian 0

Por otra parte, Pedro estuvo de Kibitzer, echándose unas rápidas y grabando el panorama. El panorama, en la ronda 3, era este:

Si a alguien le apetece jugar por el mero placer de hacerlo, sin preocuparse ni de elo ni de ciclos ni de nada, ya sabe dónde vamos a estar los miércoles de agosto.

¡Ah! Si después de jugar con nosotros el 7 te apetece más ajedrez, el día 8 es el Torneo de Verano del Club. Allí estaremos esperando.

I Torneo de Verano

Aquel que no puede poner sus pensamientos en hielo, no debe adentrarse en el calor de la discusión.

Friedrich Nietzsche.

En serio, ¿hay algo mejor que hacer una noche de verano que jugar al ajedrez? Nosotros pensamos que no. Contra el calor de agosto en Córdoba, la única solución es mantener la mente fría. Queda casi una semana para que se celebre, ¿por qué no pasas a jugar unas cuantas partidas?

Todo el mundo es bienvenido: niños, aficionados, vecinos, jugadores federados y campeones de la ciudad. ¡En serio, participan algunos de los mejores jugadores de la historia de Córdoba!

El torneo está anunciado en la página de la Delegación Cordobesa de Ajedrez, y las inscripciones pueden realizarse en el teléfono que sale en el cártel o utilizando este formulario de Google.

Allí os esperamos. Por cierto, estamos preparando como premio unos azulejos realmente espectaculares, pintados a mano por nuestro miembro Pepe Trujillo, que es un artistazo. Hay muchas categorías de premio, juega por el tuyo!

Diseña un sitio como este con WordPress.com
Comenzar