我正在尝试为游戏Gomoku实现一个类似AlphaZero的棋盘游戏AI (结合了评估棋盘位置的CNN的蒙特卡洛树搜索)。
现在,MCTS是作为一个单独的组件实现的。另外,我有一个用Python语言编写的简单的TCP服务器,它接收来自MCTS的位置(以大约50到200个为一批),将它们转换成Numpy数组,通过调用__call__将它们传递给TF/Keras模型,再将它们转换回来,然后通过TCP将结果发送给MCTS。
在训练期间,我通过让AI与自己对战、调用model.fit一次、使用新的模型权重创建新的数据集等方式来生成训练数据(大约5000块棋盘)。我并行播放多场比赛,每一场比赛都使用各自独立的Python/TF服务器。每个服务器加载自己的模型副本(我使用tf.config.experimental.set_memory_growth(gpu, True))。
我遇到的问题是,在玩比赛的时候,推理时间越来越长,网络加载的时间越长,直到它变得非常慢,我必须重新开始训练。重新启动后,推理时间恢复正常。顺便说一句,如果我一次只玩一个游戏,并且只加载了一个模型,也会发生这种情况。
我试图通过在每次比赛后重新启动Python服务器(以及模型)来缓解这个问题。这似乎解决了这个问题,直到我在几次训练迭代后开始遇到同样的问题。
起初我认为原因是我的设置不理想(运行Windows的游戏笔记本),但在我的大学的Linux服务器上也出现了这个问题。在我的Windows机器上,随着模型变得越来越慢,它使用的内存也越来越少。这显然不会在Linux上发生。
发布于 2020-12-31 01:41:30
我遇到了类似的问题,原因是为我的卡安装了错误的NVIDIA驱动程序,并且没有安装CUDA。希望这能对你有所帮助。
https://stackoverflow.com/questions/65509955
复制相似问题