Mostrando las entradas con la etiqueta baduk. Mostrar todas las entradas
Mostrando las entradas con la etiqueta baduk. Mostrar todas las entradas

2020-01-04

Leela agradable

Ultimamente estoy usando leela-zero (con lizzie) para analizar partidas, y está re-bueno. El único problema es que mientras está corriendo el análisis, la compu se trula un poco porque leela-zero y la GUI compiten por la GPU. Para hacer que la GUI ande un poquito mejor, hice un script en bash que hace las veces de "nice" (ya que no hay un equivalente para las GPU de nvidia).

Les dejo el script abajo:

#!/usr/bin/env bash

while true; do
    sudo kill -s STOP $(pgrep leelaz)
    sleep 0.1
    sudo kill -s CONT $(pgrep leelaz)
    sleep 0.2
done


Cambien los tiempos de espera a gusto, y tengan en cuenta que puse sudo porque corro leelaz dentro de un container de docker (no sé si hará falta si lo corren afuera).

Éxitos, y que lleguen a dan pronto!

2019-05-12

Correr lizzie en Ubuntu con GPU

Así hice que corra lizzie en Ubuntu 18.04 con una nVidia GeForge 940mx, compilando y corriendo en un container de docker para que no me ensucie el resto del sistema.

Requisitos:

  • Placa de video nVidia que banque opencl
  • Tener instalado nvidia-docker2 y sus dependencias (incluyendo los drivers correctos).
  • Tener nvidia como engine por default en docker. Para eso hay que agregar "default-runtime": "nvidia" a /etc/docker/daemon.json. Detalles acá. 
Para eso creé un archivo Dockerfile  con los contenidos que explica en esta página:
FROM nvidia/opencl:runtime
RUN apt-get update --no-upgrade -yq && \
    apt-get install --no-upgrade -yq curl git clinfo cmake g++ libboost-dev libboost-program-options-dev libboost-filesystem-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev zlib1g-dev qtbase5-dev

RUN mkdir /app && cd /app && \
    git clone https://github.com/leela-zero/leela-zero.git . && \
    git submodule update --init --recursive && \
    mkdir build && cd build && \
    cmake .. && cmake --build . && \
    ./tests && \
    curl -O https://zero.sjeng.org/best-network

WORKDIR /app/build
RUN /app/build/leelaz --tune-only -w best-network
CMD /app/build/leelaz -g -w best-network


Una vez que hice el archivo, corrí:
$ docker build -f Dockerfile -t leela:gpu .

Y para ver que estaba todo bien después corrí la imagen así:
$ docker run --rm -it leela:gpu

Después me bajé lizzie-0.6 y lo corrí con:
$ java -jar lizzie.jar

La primera vez falló, pero generó un archivo de configuración config.txt. Edité ese archivo y cambié la entrada "engine-command" para que diga: "/usr/bin/docker run -i --rm leela:gpu /app/build/leelaz --gtp --lagbuffer 0 -w best-network". Eso hace que lizzie use la leela zero que compilamos antes adentro del docker.

Una vez hecho esto, volví a correr java -jar lizzie.jar y ahora anda :)

Presentación de tito

Ayer hice una presentación de tito el robotito en la Asociación Argentina del juego de Go en el marco del 14o Congreso Argentino de go.

Dejo acá el video por si lo quieren ver:



Y también las referencias que menciono en el último slide:


2019-04-23

Tito el robotito

En las últimas semanas estuve programando un robot que juegue al go usando la misma técnica que AlphaZero. Está escrito en python desde cero, valga la redundancia, y basado en keras y tensorflow.

Hay 2 papers en los que me estuve basando, que son el paper de Alphago Zero y el de Alpha Zero. Ahora estoy entrenándolo, tratando que llegue a jugar un poco mejor que el azar absoluto, en tablero de 9x9 y komi de 5.5. Si quieren mirar cómo está hecho, el código está acá.

La idea atrás de alphago zero es tener (y entrenar) una red neuronal que le das el estado del juego (indicado por las últimas 8 posiciones del juego, para tener en cuenta los kos y triple-kos) y te da 2 resultados: cuán buena es la posición (1 es gano seguro y -1 es pierdo seguro) y para cada jugada posible (o sea, cada intersección del goban) cuanto vale la pena explorar esa jugada para seguir analizando el partido por ahí.

Con esa información, corre un MCTS y busca la jugada que parece mejor. Por supuesto, los detalles están en el paper. En tito, la búsqueda en el árbol está implementada en el módulo tito.alpha.mcts.

Empezando por una red neuronal sin entrenar, se hace que el bot juegue contra sí mismo, después se toman algunas posiciones al azar y sabiendo cómo terminó el partido y cuáles son las posiciones que más exploró se usa esa información para entrenar la red para que la próxima vez que vea esa posición (y similares) de resultados como ese. El código donde hace el entrenamiento está en el módulo tito.alpha.train. Y la red neuronal está en tito.alpha.model.

También, por supuesto, programé las reglas del go, pueden verlo en los módulos, tito.game y tito.board.

Todo esto tiene tests automáticos. En tito.test puse los tests rápidos y en tito.test_slow los que llevan más tiempo.

Para acelerar un poquito esto estoy usando la placa de video de mi compu, así que tuve que hacer andar nvidia-docker y esas cosas. Por suerte la gente de tensorflow tiene imágenes preparadas con todo instalado :D, así que una vez que hacés andar los drivers el resto es fácil.

Por último, aprovecho para contarles que el 11 de mayo de 2019 voy a dar una charla en el Congreso Argentino de Go donde voy a hablar de cómo andan los robots basados en AlphaZero.

2017-07-03

Go y neurociencia

Hace algunos años que tomé al go (AKA baduk, weiqi) como mi hobbie principal. El go es un juego de mesa de origen chino, de información completa, donde 2 jugador@s se enfrentan intentando rodear la mayor cantidad de territorio. Es un juego que tiene miles de años de historia.
Una de las cosas que más me llamó la atención del go es su elaborado sistema de handicap (AKA, ventaja) que hace posible jugar partidos equilibrados con jugador@s que son mucho mejores o peores que yo. Ese sistema de handicap, también permite medir decaimiento cognitivo. Por ejemplo, yo noto que necesito más ventaja después de un día de programar intensamente. Este sistema de handicap se usa para rankear jugador@s en las diferentes asociaciones de go (amateurs y profesionales) de todo el mundo. Por ejemplo, RANGO es la instanciación de este sistema en la Asociación Argentina del Juego de Go.
¿Y la neurociencia? Ya viene. Este sistema de ranking permite ver bastante claramente cosas que deberían tener una contrapartida en mecanismos cerebrales. Quizás pueda usarse para "ver" como funciona nuestro cerebro. Hay varias cosas que l@s jugador@s de go notamos y que seguramente puedan medirse. Por ejemplo:

  • Algun@s jugador@s suben de nivel de juego y otr@s se quedan clavad@s. ¿Se puede encontrar alguna estructura del cerebro que esté relacionada?
  • Basándonos en la pregunta anterior, ¿es posible encontrar personas que no sepan jugar al go pero que tengan la estructura cerebral correcta y puedan aprender muy rápido?
  • Otra cosa que notamos es que l@s jugador@s de go nos quedamos trabad@s en los mismos rankings cuando vamos aprendiendo. ¿Hay un cambio medible en nuestros cerebros cuando pasamos dichas barreras?
  • ¿El mecanismo que hace que bajemos de nivel cuando estamos cansad@s es el mismo que el que hace que seamos mejores o peores jugador@s en general o no?
Me encantaría saber de investigaciones de neurociencia que intenten contestar éstas u otras preguntas sobre el go. Si las conocen, por favor cítenlas en los comentarios.
Si te dedicás a la neurociencia y querés atacar estos temas, puedo ponerte en contacto con un montón de jugador@s de go e intentar ayudar a armar los experimentos.
Por último, si querés hacer investigación sobre alguna de estas cosas no sientas que este post lo impide. Solamente citame como inspiración y listo :D. Yo no tengo los recursos para hacer la investigación por mi mismo, así que estaría agradecido de que lo haga alguien más.

2017-01-06

Patreon?

Hace un tiempito que estoy subiendo a youtube videos donde juego al go. Hay mucha gente que juega al go mejor que yo y hace videos, así que terminé haciendo personajes mientras juego. Hay varios, algunos son imitaciones de otros youtubers, y otros no.
La gente que hace contenido en forma más o menos recurrente está haciendo cuentas en Patreon para que le paguen. Yo estoy pensando en hacer lo mismo. Y estoy pensando en qué opciones podría poner. Se me ocurren estas:

  • Si gano 10 dólares por mes me compro un micrófono corbatero para que se escuche mejor.
  • Si gano 20 dólares por mes me comprometo a subir un video por semana.
  • Si gano 50 dólares por mes me compro una webcam y filmo los videos mostrando mi cara, y maquillándome como el personaje del video.
  • Si gano 100 dólares por mes pago una conexión de internet como la gente y empiezo a hacer los videos en vivo por Twitch.
  • Si gano 5000 dólares por mes dejo mi laburo y hago videos todos los días.
Para l@s mecenas ofrecería:
  • Si ponés 20 dólares por mes podés jugar contra alguno de mis personajes en un video.
¿Les parece una buena idea?,
Aureliano.

2013-11-27

His road to go

Mi amigo frandibar estrena su blog sobre sus experiencias jugando al go. ¡En una de esas hasta vean partidas mías por ahí!

Éxitos Fran!!!!!