[computer-go] Pay-as-you-go cluster?
Don Dailey
drdailey at cox.net
Mon Oct 2 05:12:44 PDT 2006
Here are a couple of ideas that are efficient in terms of parallelism:
IDEA 1
1. Start all nodes searching the root position.
2. At timeout, combine all the stats from each node.
IDEA 2
1. Start all nodes searching the root position for a predetermined
small chunk of time, perhaps a second or two.
2. Merge all the tree's produced together into a single tree.
3. Distribute new tree to all nodes and repeat.
- Don
On Mon, 2006-10-02 at 10:45 +0200, sylvain.gelly at m4x.org wrote:
> 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
>
> _______________________________________________
> computer-go mailing list
> computer-go at computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/
More information about the computer-go
mailing list