Я делаю генетический алгоритм на нейронных сетях, играя змею в образовательных целях
Я хочу иметь возможность запускать мой код 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?
Большое спасибо