我正在为教育目的在神经网络上打蛇的遗传算法
我希望能够在我的gpu上运行python代码(启用了cuda),以节省一些时间并加快该过程。
我的代码原理很简单,我的遗传算法是一个全局循环,在每次迭代时我都需要评估种群中的每个神经网络
while(some_condition):
# ...
game = Game()
for i in range(len(self.networks)):
self.networks[i].score = game.start(network=self.networks[i])
# ...
如您所见,我创建了一个游戏实例(这是我制作的一个类),并且针对我种群中的每个神经网络,我用它开始游戏并输入其得分(蛇的长度和年龄)
这显然是我的GA中需要最多处理时间的部分:玩游戏。 实际上,我让每个神经网络玩四场比赛以取得平均得分,但是为了简单起见,我们只考虑其中一个
我已经使用python多重处理对其进行了并行化处理,如下所示:
num_cores = multiprocessing.cpu_count()
while(some_condition):
# ...
game = Game()
results = Parallel(n_jobs=num_cores)(delayed(game.start)(network=self.networks[i]) for i in range(len(self.networks)))
# ...
由于它使用了我CPU的所有内核,因此节省了大量时间,但是它仍然很慢,无论如何,我想开始学习如何使用GPU解决此类问题。
我可以考虑使用numba和cuda解决我的问题吗?问题的结构与GPU编程有关吗?
非常感谢
答案 0 :(得分:0)
我已经实现了一个类似的框架来并行评估GPU上每个神经网络的得分,而主程序(GA)仍在CPU中。我的框架也类似于上面显示的代码。为了将其作为我的框架,您只需将每个NN都放置到GPU中即可。