2018-10-02

Contributing to Leela Chess Zero. Creating the Caissa of Chess engines....




 Deepmind's latest paper release (Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm) on 5 December 2017, presented a method of reinforcement learning for convolutional neural networks that its result was fantastic as they created 3 engines, one for GO, one for Chess and one for Shogi that were beating easily the best available engines of the time.

 For Chess the known AlphaZero for Chess, beat Stockfish 8 easily, but in order AlphaZero to be created it required generating games and training for "only" 4 hours, having generated 44 million games! Then these games were used to make the engine learn observing these games and become stronger.
Generating games is the hard part of the whole process anyway. As it is the most time consuming thing. And one has to generate millions of games to start becoming really strong.

So these were exciting news for all, as now everyone could create a super strong engine in every board game he could think of by trying the methods in Deepmind's papers.
And since Deepmind didn't published the AlphaZero engine, people wanted to replicate Deepmind's results by training it according to the papers on their own. But here comes the tricky thing. This "only 4 hours" generating of games and training was with Deepmind's super hardware consisting of 5000 TPUs. And one TPU has the processing power of about 10 Nvidia GTX 1080 Ti.
So these 4 hours, would translate to many many years of generating games in our home computers. Gian-Carlo Pascutto author of many Chess related papers and author of Chess program Sjeng that has moved to GO programming as well in latest years, has posted a disheartening message estimating he would need around 1700 years to replicate the Deepmind's generation of games with his strong computer.

But then Pascutto made a very nice move! He created a distributed project, Leela Zero for GO. So people could use their computers to contribute to training in order to replicate Depemind's results much much faster than single persons. The philosophy is that the power is on numbers. 
Even people with weak hardware generating like 100 games per day are important since having 1000 such people would generate 100000 games per day. Philosophy is, everyone counts!
Then using Leela Zero's code, Gary Linscott modified it and created a similar project but for Chess, the Leela Chess Zero.
 So it attracted some people initially that contributed to training and very fast attracted even more and strength started to rise and rise and Leela Chess Zero is most probably the 4th strongest engine right now looking in the eyes of even Stockfish!

The project managed to have some 500 or 600 contributors at times that it has fallen to about 150 now and managed to have 2 very big ones, the known inside the project's people, Sergio Vieri and VPrelovac, that were using incredible hardware(like even 100 Tesla V100s) and contributing even 1 or 2 million games per day! Right now these 2 big contributors are absent and hopefully one day will return but this is still a distributed project and so even a lot more slowly, games are generated with about 600000 rate per day right now.
So all people that can contribute are needed, to help Chess as also Science. To create a super strong program and to examine even better methods of training and advance the training progress.


Contributing is easy.
1)Downloading the client here: https://github.com/LeelaChessZero/lczero-client/releases
2)Downloading the binaries of Lc0(one of them for the appropriate hardware, either CUDA, BLAS or Opencl) from here: https://github.com/LeelaChessZero/lc0/releases
3)Putting everything in one folder and then running client.exe


Every single GPU counts. Even weak ones. So it's not pointless at all to contribute even a little bit.



But Google offers 2 extra ways to help Leela project since it gives for free(and for money) its GPUs with Google Colab and Google Cloud.
With these 2 ways one without using any of its computer resources(CPU or GPU), only Google's ones, can generate a big amount of games and help Leela get stronger.


►For contributing at generating games with Google Colab you must follow the given instructions here:
https://github.com/LeelaChessZero/lc0/wiki/Run-Leela-Chess-Zero-client-on-a-Tesla-K80-GPU-for-free-(Google-Colaboratory)
Normally Google Colab allows about 12 hours of continuous usage of its GPUs then it stops them and then you have to restart it.
That way you can generate about 1000 games per day.
But for some people in the last weeks Google Colab is very problematic since it doesn't allow much time to use it.



►Generating games with Google Cloud is much better, since it gives you much stronger GPUs to use. You must follow the given instructions here:
https://github.com/LeelaChessZero/lc0/wiki/Google-Cloud-guide-(lc0)

A small concern with Google Cloud is that you must provide a credit card number (in a verified safe page of course) for ID purposes. Google after all, has to be sure you will not abuse their offer, creating multiple accounts.

People in Leela groups have given the following instructions on how to run it:

With Google Cloud you can rent GPUs ranging from K80/P100/V100 via your browser, with no processing on your end.
You get $300 credit just for signing up for a free trial and per Google you will not be billed once the $300 is used and the trial ends(of course you can opt to continue renting the GPUs if you wish).
For example, with this you can rent 1 Tesla V100 for about 21 days generating approximately 15000 games per day, so about 315000 games generated for free.


1) Go to https://cloud.google.com/compute/   and set up an account to start your free trial. If you have a gmail account already you can just use that. You will need to provide credit card details for ID purposes.

2) Click on 'Compute Engine'  on the interface and navigate to 'VM instances'

3) Click 'Create an instance' at the top.

4) Under Machine Type, click customize. Under GPUs, select how many GPUs you want to run (e.g. 1). Choose which GPU type you want. If you don't see the GPU type you want, choose a different Region.

5) Scroll a bit down and under Boot Disk click the 'Change' button and select 'Ubuntu 16.04 LTS'

6) On the right hand side you will be able to see the estimated hourly cost of the GPU you are running. It is likely much higher than expected. We can reduce this by expanding the 'Management, security, disks, networking, sole tenancy' section. Scroll down to the Pre-emptibility option and select 'ON", What this does is it makes it so that you only get lower priority access to the GPUs, and have to restart the instance every 24 hours, but reduces costs by about 60%.

7) Finally look for the Startup Script option under the Automation section. In the box there copy and paste the script found in https://github.com/LeelaChessZero/lc0/wiki/Google-Cloud-guide-(lc0)

8) Click create, and after a few minutes the VM instance should show up. You can click on it and select 'monitoring' and hopefully it should show active CPU utilization after a bit; you can also check Lczero after 1/2 an hour or so and it should be generating around 600 games per hour with a V100. If you chose a pre-emptible gpu then you will just need to restart it every 24 hours or so.



 So try to contribute in any way you want, running the client on your GPU or running for free Google Colab or Cloud, since the goal is to create the strongest Chess engine possible so every training game counts!
Doing this new things can be learned for the training methodology so it will help the area of neural nets training with deep learning methods so it would help science too and especially the Leela Chess Zero project will provide a solid platform for generating other super strong engines in other Chess variants as also non Chess variants.

This new methodology of Neural Networks trained with Deep learning methods is the future in most board games and of course this is just one of the areas it will be applied and is the future in countless other. Chess programming is too much advanced though, the last 50 years new search optimizations are explored and current Chess engines are super strong much much stronger than the top human Grandmasters. And neural networks' strong point is that they provide with a superb evaluation function.
 That seemed to work in GO exceptionally good. Since previous GO programs didn't really have even a primitive evaluation function to judge how good a position is. So AlphaGO series of engines of Deepmind and their method to create an evaluation function with the neural net trained on supervised(AlphaGO Zero) or reinforcement learning methods(AlphaZero GO engine) provided an extremely good one so it brought a colossal leap in GO engines strength even surpassing by a big margin top humans, something no one could ever imagine it will happen for the next 10 years.
 This method seems to work at Chess too, but with not that gigantic success and this is because at Chess, tactics(so search and not evaluation) play a much bigger role than in GO. Ii Chess even a primitive evaluation function with simple rules like novice rules for piece values(e.g Rook=5, Knight =3) and some other rules like Rook on open file add +0.2 bonus etc, combined with a very good search provides an engine with very high strength. So evaluation function is not that important as in GO.

But of course it still is VERY important! And as Leela proves and AlphaZero proved, she is able to compete with monsters(traditional engines) looking some 70 million positions per second while she does look something like 40 thousands position per second!
And she is able to do that because of her much superb evaluation function. She is much more clever in a sense. So improving it is essential to obtaining a even stronger engine. So more generated games for training is essential.
A question is that where is the limit of the intelligence of the neural network can reach. How much higher than current top Chess engines, Stockfish? Probably the limit is a lot lot higher, but it's not that straightforward or easy to reach it.
And there is the search part also. Neural nets and Leela use some variations of MCTS(Monte Carlo Tree Search) and it's just 10 years of this development in practice for board game engines and just half or less for Chess engines, compared to more than 40 for traditional engines search(AlphaBeta).

 New breakthroughs will definitely come and even hybrid methods(MCTS+AlphaBeta) will succeed in taking advantage of the superb evaluation function of Deepmind's method.
2018 is the beginning of a new era.
Future in computer Chess starts to look shiny again....






11 comments:

  1. Insightful, and thanks... I will add, the final four paragraphs are hard to understand/comprehend for a native English speaker. (...and.. I think you meant GO not CHESS here: "so it brought a colossal leap in Chess engines strength even surpassing by a big margin top humans")

    ReplyDelete
  2. Thank you for this most valuable insight!
    My question I have raised elsewhere already is:
    (a) Would it theoretically make sense one day to switch to a 'true' distributed computing approach or similar, where the installation of decentraliced software modules on thousands of attached computers is done and controlled centrally?
    (b) What whould be the hurdles?
    (c) Would it make sense that commercial and non commercial chess portals such as chess.com or lichess.org would use the free computing time to generate games while their userbase is connected to their networks?
    Links:
    https://en.m.wikipedia.org/wiki/Distributed_computing
    https://www.sciencedirect.com/science/article/pii/S1877050917323669
    https://en.m.wikipedia.org/wiki/List_of_distributed_computing_projects


    ReplyDelete
  3. Although Google Colab fixes GPU support to a single K80, Google Cloud allows GPU variety. It seems that the sweet spot, in terms of best bang for the buck, is to run 1x V100 with 2x CPU, and to make the instance pre-emptible. This configuration results in the most total games played for your free $300 credit. Using this config, I've been able to peak at over 20,000 games per day.

    ReplyDelete
  4. I shared your note.
    https://www.chess.com/forum/view/general/contributing-to-leela-chess-zero-creating-the-caissa-of-chess-engines?newCommentCount=2#first_new_comment

    ReplyDelete
  5. Thanks for this, and thus my V100 contributions with the cloud has begun! :)

    ReplyDelete
  6. How can I configure tablebases in lc0. I use Arena and Aquarium as GUI.

    ReplyDelete
  7. Whoever wrote this post needs to improve their English. Reading it was torture.

    ReplyDelete
    Replies
    1. I sure need an improvement there. But as a hard core mathematician(number theory) my thinking is absolutely as pedantic as it goes and i can never express myself without using long, huge statements covering as much every details possible. :(

      Delete
  8. Here's an article about getting free Quantum computing time - maybe someone here can take advantage and explain how we can all use it? D-Wave Launches Free Quantum Computing Service
    https://www.hardocp.com/news/2018/10/04/dwave_launches_free_quantum_computing_service

    ReplyDelete
  9. is this all setup for 15/5?
    what numbers are better for long analysis? (correspondence chess)? (increase puct???)
    thanks

    ReplyDelete
  10. Just wanted to mention for people interested in making use of their free google cloud credit, that these instructions in the blog are a little out of date and further optimisations in settings have been found. These optimisations have been updated in the Google Cloud github wiki article https://github.com/LeelaChessZero/lc0/wiki/Google-Cloud-guide-(lc0), but I will list them below as well.

    When using a V100, select 4 vCPUs, and 4gb memory
    When pasting the startup script, for V100s, change the bottom line to this instead:

    ./client_linux -backend-opts="x(backend=cudnn-fp16,gpu=0)" --parallelism=32 --user googlecloud --password googlecloud --use-test-server

    The paralellism=32 parameter makes the V100 run more game instances at a time, and the higher vCPU count ensures the V100 doesn't get cpu bottlenecked. With these changes you should expect to produce about 1000 games/hour or 24k games daily, for USD $0.774/hr

    ReplyDelete