[computer-go] Pay-as-you-go cluster?

sylvain.gelly at m4x.org sylvain.gelly at m4x.org
Mon Oct 2 01:45:22 PDT 2006


Le Lundi 02 Octobre 2006 10:25, Darren Cook a écrit :
> > as we have access here to an interesting cluster, I have worked several
> > weeks on a way to efficiently distribute UCT. ...
> > I have tried a lot of solutions, which seemed good ideas, but none of
> > theses were so far successful.
>
> I was about to suggest the first few ideas that came to mind but you've
> probably already thought of them. 
Perhaps, but often the first few ideas are the best, so please go ahead :-).

> Would you be willing to post about the 
> ideas you've already tried that failed?
I'll try. I hope it will be clear enough.

- basic try: giving to each machine one possible move (assume that you have 
enough machine), and each machine compute the value for this move. It is not 
a real parallelization of UCT, but it was so simple that I tried. You don't 
win so much this way.

- Basic unit: a node (a position). This is the chunk. Then the client compute 
all possible results for this position, that is to say, for each possible 
move, the result of one simulation. Then the data to send back is only 
numberOfMoves bits. 
  - Then imagine you have one server which keep the tree, and n clients. 
  - The server use normal UCT, and when it encounters a leaf in its tree, if 
this node is not already in a client, send it to a client, and do its 
simulation as usual. 
  - When the data from the client comes back, you update the tree as if all 
the simulations where done by the server.
The BIG problem here is that you introduce a big bias in the algorithm.

- Variant: instead of computing all the possible moves from a child, compute 
only a part (m moves). The problem is that if m is too small, the network 
delay is too big, and if m is too big, you have the previous problem.
- Variant: when the message comes back, instead of updating tree as UCT would 
update it, keep the same number of simulations for each node, but update the 
probability using the new simulations you get.
- Variant: when the message comes back you don't update the tree, but keep the 
result in an hashtable for further use. Then the UCT algorithm is not changed 
at all, but you don't win so much speed that way.

I have tried some others small variants on this idea. I have also though about 
keeping a tree for each machine, and try to synchronize it as often as 
possible using the information from the others. But I think it would be very 
complicated, and I am not so convinced that it would be possible to keep the 
tree consistent.

I hope the ideas are not too badly exposed.

Sylvain



More information about the computer-go mailing list