AlphaZero_Gomoku icon indicating copy to clipboard operation
AlphaZero_Gomoku copied to clipboard

训练超级慢,有什么办法可以提高效率?

Open xbhuang1994 opened this issue 7 years ago • 6 comments

大量的计算力花费在了mcts的select与expand上,policy只占了1/8不到的时间,即使用TPU来跑CPU也跟不上,如何让mcts并发运行变得更加高效?

xbhuang1994 avatar Jul 13 '18 22:07 xbhuang1994

MCTS模拟确实是占了绝大部分计算量的,所以deepmind采用了5000个TPU,要直接让它计算高效起来估计有点难,但MCTS是可以并行执行的,AlphaGo zero论文里使用了一个叫做virtual loss的trick来并行的跑mcts,大致来说就是当一个线程正在一个树分支上搜索时,临时改变一下这个分支上的节点的统计数据,比如把访问次数加的很大,使得其他并行搜索的线程会去搜索另外的分支。

junxiaosong avatar Jul 15 '18 01:07 junxiaosong

def has_a_winner(self): 判断输赢结局的函数需要穷举每个played的点,然后在四个方向搜寻n-in-a-row。可以考虑根据last_move信息,只搜索last_move为中心的四个方向。

onewxu avatar Jan 23 '19 10:01 onewxu

想训练快,可以看看我用C++实现的多线程版 https://github.com/hijkzzz/alpha-zero-gomoku

hijkzzz avatar Mar 20 '19 07:03 hijkzzz

生成的棋盘对其对称旋转镜像转换,一次扩充8倍数据

ChuxiJ avatar May 23 '19 14:05 ChuxiJ

@junxiaosong 非常优秀的代码。学习了。 更新 mcts 时,你使用了递归。这是慢的一个主要原因。 其实是可以改写为堆栈的方式

qjchen1972 avatar May 23 '19 22:05 qjchen1972

@junxiaosong 非常优秀的代码。学习了。 更新 mcts 时,你使用了递归。这是慢的一个主要原因。 其实是可以改写为堆栈的方式

我测过 主要问题出在单线程GPU利用率太低 MCTS本身倒是不怎么消耗算力

hijkzzz avatar May 27 '19 08:05 hijkzzz