用numba(cuda)并行化遗传算法

时间:2018-10-08 22:06:26

标签: python gpu genetic-algorithm numba

我正在为教育目的在神经网络上打蛇的遗传算法

我希望能够在我的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编程有关吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

我已经实现了一个类似的框架来并行评估GPU上每个神经网络的得分,而主程序(GA)仍在CPU中。我的框架也类似于上面显示的代码。为了将其作为我的框架,您只需将每个NN都放置到GPU中即可。