Mostrando las entradas con la etiqueta go. Mostrar todas las entradas
Mostrando las entradas con la etiqueta go. 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.

2016-06-29

Alpha Go, por favor calculá el komi

Hace unos meses Google pateó el goban y mostró que sus computadoras juegan al go mejor que cualquier ser humano. Encima, ¡parece que entrenaron a Alpha Go un poco más y ahora es 4 piedras más fuerte que antes!

O sea, el go dejó de ser algo que nosotr@s hacemos mejor. Pero eso tiene ventajas. Una de las cosas más raras del go es el komi. A diferencia del resto del go, que tiene más de 2000 años, sólo se usa regularmente hace menos de 100 años. El es la ventaja, en puntos, que le da el jugador negro al blanco porque el negro hace la primera jugada. La idea es que esa compensación hace que el partido sea más parejo. Cuando empezaron a usar komi en los torneos profesionales, usaron 4.5 puntos (.5 para evitar empates) y subió a 5.5 y después s 6.5 en Japón y Corea y a 7.5 en China. Pero no sabemos que valor tiene que tener. Y mirar las diferencias de puntos en los partidos de profesionales no sirve porque cambian de estrategia cuando van ganando (y sí, cuentan los puntos en el medio del partido).

Por eso, quiero pedirle a la gente que trabaja en AlphaGo que entrene a AlphaGo con distintos valores de komi y nos cuente, para cada posible valor del komi que porcentaje de las partidas las gana negro en un partido de AlphaGo contra sí mismo. Así podemos elegir el valor de komi que genera menos ventaja.

Si trabajás en DeepMind o conocés a alguien que trabaje ahí, o conocés a alguien que trabaje en Google, o podés contactar a la federación internacional de go, o se te ocurre algún otro camino, por favor pediles que calculen cuál es el mejor komi.

Muchas gracias,
Aureliano.

2014-09-13

Viejos nuevos proyectos

Estoy con ganas de encarar algún proyecto más o menos grande y tengo varias cosas en la cabeza, así que quería pedirles su opinión sobre qué piensan que estaría bueno hacer. Y si algun@ de ustedes tiene ganas, capacidad y tiempo de hacerlos conmigo, o tiene alguna idea que piense que estaría buena y quiera compartir, también estaría bueno. Las opciones que se me ocurren por ahora son:

  • Seguir con mi framework web homenaje a sandro.
  • Hacer un software para optimizar cortes de tela, haciendo una heurística para resolver 2D packing. La idea sería comercializarlo.
  • Aprender coreano, para poder leer un montón de cosas sobre como jugar al go. L@s mejores jugador@s y la mayoría de la bibliografía, son coreanos, chinos y japoneses. Y el coreano parece el lenguaje más fácil de los 3.
  • Hacer todos los cursos de Easy y dejar de ser un inútil para arreglar cosas en mi casa.
  • Seguir el desarrollo de mi notación de tango y hacer un animador en 3D de los pasos anotados.
Escucho ideas y busco compinches,
Aureliano.

2014-06-01

cgoban y java 1.7

Si tratan de correr cgoban con Java Web Start, como dice en gokgs.com, puede ser que les de un error en la firma del jnlp (como a mi). Para workaroundear el problema, lo que yo hice es bajarme el .jar de http://files.gokgs.com/javaBin/cgoban.jar y correrlo localmente.

Espero que les sirva, y si quieren jugarse una partidita de go conmigo pueden buscarme en Dragon Go Server, mi usuario es aurelianito y, al momento de escribir este post, soy 11k.

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!!!!!