распараллелить генетический алгоритм с numba (cuda) - PullRequest
0 голосов
/ 09 октября 2018

Я делаю генетический алгоритм на нейронных сетях, играя змею в образовательных целях

Я хочу иметь возможность запускать мой код Python на моем GPU (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)))
  # ...

Это экономит много времени, поскольку использует все ядра моего процессора, но все еще медленно, и в любом случае я хотел бы начать изучать, как использовать GPU для таких проблем.

Могу ли я рассмотреть вопрос об использовании numba и cudaдля моей проблемы?Соответствует ли структура моей проблемы программированию на GPU?

Большое спасибо

1 Ответ

0 голосов
/ 24 октября 2018

Я реализовал аналогичную структуру для параллельной оценки оценки каждой нейронной сети на GPU, в то время как основная программа (GA) все еще находится в CPU.Мой фреймворк также похож на ваши коды, показанные выше.Для того, чтобы сделать это в качестве моей структуры, вы просто помещаете каждый NN в GPU, все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...