感谢您阅读本文。 我开发了像AlphaGo Lee或AlphaGo Zero这样的国际象棋AI。 我使用过Python和tensorflow。 国际象棋AI由蒙特卡罗树搜索,政策网络和价值网络组成。
我为蒙特卡洛树搜索学习了政策和价值网络。没有问题。但是,蒙特卡洛树搜索中的每个模拟都太慢了。所以我想提高每个模拟速度。
我知道python因GIL而无法共享对象。我真的需要帮助。如果你们有关于python多处理中共享对象的经验,请分享你的经验。
我在此页面下方发布了摘要代码。
p.s:我不擅长英语。所以,如果您在阅读本页时感到不舒服,那就是我的错。请理解。
class monte
#I want to share Tree in multiprocessing
tree = Tree()
def doMontecarloTreeSearch:
while numberOfsimulation:
#I want to boost speed each simulation
# but each search() computing neural network to make new node
# so they spend much time.
search()
def search:
#node is created in each selection and is added in tree
while is_gameover():
selection()
evaluation()
backpropagation()
def selection
#add best value node in Tree
def evaluation
#each node is evaluated for expasion
def backpropagation
# after gameove, leaf node backpropagate gameresult
# and patent nodes are updated util parent node is root node
答案 0 :(得分:0)
我已经为Go引擎尝试了类似的方法,但很抱歉,我尝试在Python项目中这样做。
i首先使用Cython加快了工作速度,最后得到90%的Cython风格c代码和10%的Python代码。根据基准测试部分的不同,提速幅度为70倍至230倍,平均游戏提速约为110倍。
之后,我开始使用多任务处理,不幸的是,Python的某些部分很好,相当不合作,而且运行起来有些慢。 仍然有获取净利润的方法,具体取决于您想做什么。
生成自玩游戏
效果很好,我在其中创建了一个设置:
1名工人正在训练新模型
它能够将gpu占用80%左右
多线程播放器
我尝试了几种方法,同时最大程度地减少了工人之间的数据交换,因为这是一个巨大的瓶颈。通常,它归结为带有游戏树的主控制器,该游戏树指示其他工作人员探索某个节点。拥有紧凑的董事会代表在工人之间发送数据至关重要!
未来
我不得不再做一次,Python是一个要求,我会为此为其创建良好的交互并集成其他语言。例如,您可以将c / c ++与cython集成