Неожиданное исключение при использовании параллельных фьючерсовPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Неожиданное исключение при использовании параллельных фьючерсов

Сообщение Anonymous »

Я работаю над эволюционным алгоритмом на Python. Чтобы ускорить процесс, я распараллеливаю оценку совокупности, используя concurrent.futures и его класс ProcessPoolExecutor.
Алгоритм работает для сетей с числом до 6 входы. Я пытался запустить его в сетях с 8 входами, но возникло неожиданное исключение.
Вот код, который я использую для распараллеливания вычислений:

Код: Выделить всё

    def select_best(self, population: list)
start_time = time.time()
ns = [self.inputs for _ in range(len(population))]
# ----
with ProcessPoolExecutor(cpus) as executor:
fitness_list = list(executor.map(compute_fitness, population, ns))
# ----
individuals_and_fitness = sorted(
zip(population, fitness_list), key=lambda x: x[1], reverse=True)
best_individuals = [individual for individual,
_ in individuals_and_fitness[:self.population_size]]
best_fitness_scores = [
fitness for _, fitness in individuals_and_fitness[:self.population_size]]

self.fitness_history.append(best_fitness_scores[0])
return best_individuals, best_fitness_scores
Функция Compute_fitness:

Код: Выделить всё

def compute_fitness(individual, n=2):
p = Phenotype(individual)
nn = NNFromGraph(p, inputs=n, outputs=1)

if nn.r == 0:
return 0

outputs = []
targets = []

# Generate all possible combinations of n binary inputs
for combination in itertools.product([0, 1], repeat=n):
input_data = torch.tensor(combination, dtype=torch.float32)

# Get the output from the neural network
output = nn(input_data)
outputs.append(output.item())

# Compute the expected parity of the input combination
expected_parity = sum(combination) % 2
targets.append(expected_parity)

return normalized_mutual_info_score(outputs, targets)
После генерации 640 (около 500 минут) было выдано следующее исключение:

Код: Выделить всё

Exception in thread QueueManagerThread:

Traceback (most recent call last):

  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner

    self.run()

  File "/usr/lib/python3.8/threading.py", line 870, in run

    self._target(*self._args, **self._kwargs)

  File "/usr/lib/python3.8/concurrent/futures/process.py", line 394, in _queue_management_worker

    work_item.future.set_exception(bpe)

  File "/usr/lib/python3.8/concurrent/futures/_base.py", line 547, in set_exception

    raise InvalidStateError('{}: {!r}'.format(self._state, self))

concurrent.futures._base.InvalidStateError: CANCELLED: 

Killed
Я запускаю код на удаленной машине со 128 ядрами.
Еще одна деталь, которая может быть важна, заключается в том, что я заметил странное поведение программа: запуск одного и того же кода на моем ноутбуке (Mac Book Pro M3, 12 ядер) или на удаленном компьютере требует одинакового времени для оценки, даже если можно использовать более 10 ядер.
Используя htop, я вижу, что все ядра используются в течение короткого времени, а затем выполнение возвращается к одному ядру.
Я также попробовал проверить наличие узкого места это действительно оценка, а не эволюционный алгоритм. Можно с уверенностью сказать, что оценка занимает почти в 10 раз больше времени, чем эволюция.
Более того, замена фитнес-функции фиктивной, которая выводит случайные значения приспособленности без оценки, по-видимому, увеличивает время почти в 4 раза.
Знаете, как решить проблему?
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... nt-futures
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как создать параллельное будущее Python, которое сигнализирует о завершении списка фьючерсов?
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Сбор результатов из списка фьючерсов в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Сглаживание фьючерсов Java
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Ошибка cctx автоматического инвестирования фьючерсов Bitget
    Anonymous » » в форуме Python
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Проблема с издевательством Java при использовании параллельных потоков
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»