Как я могу исправить / отладить эту многопроцессорную рабочую ошибку с прекращением работы, выданную в scikit learn? - PullRequest
0 голосов
/ 11 января 2019

Недавно я настроил новую машину, чтобы помочь сократить время выполнения для подгонки моделей и обработки данных.

Я сделал несколько предварительных тестов, и все в основном гладко, но я столкнулся с трудностью, когда попытался включить многопроцессных рабочих с помощью scikit learn.

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

Я также проверил распределение памяти, чтобы убедиться, что на моей машине не хватает свободной оперативной памяти. У меня 16 ГБ ОЗУ, поэтому проблем быть не должно, но я оставил вывод теста, если что-то пропустил.

Учитывая близкую ошибку трассировки, я могу сказать, что моя ОС убивает это, но я не могу понять почему. Насколько я могу судить, мой код будет работать ТОЛЬКО, когда он использует только одно ядро ​​ЦП.

У меня Windows 10, AMD ryzen 7 2700x, 16 ГБ ОЗУ

Код

import sklearn
import numpy as np
import tracemalloc
import time


from sklearn.model_selection import cross_val_score
from numpy.random import randn
from sklearn.linear_model import Ridge


##################### memory allocation snapshot

tracemalloc.start()

start_time = time.time()
snapshot1 = tracemalloc.take_snapshot()

###################### model

X = randn(815000, 100)
y = randn(815000, 1)
mod = Ridge()
sc = cross_val_score(mod, X, y,verbose =10, n_jobs=3)

################### Second memory allocation snapshot

snapshot2 = tracemalloc.take_snapshot()
top_stats = snapshot2.compare_to(snapshot1, 'lineno')

print("[ Top 10 ]")
for stat in top_stats[:5]:
print(stat)

Ожидаемые результаты от этого довольно очевидны, просто возвращенный результат с подходящей моделью.

Ошибка вывода

[Parallel(n_jobs=3)]: Using backend LokyBackend with 3 concurrent workers.
[Parallel(n_jobs=3)]: Done   3 out of   3 | elapsed:    0.2s remaining:    0.0s
---------------------------------------------------------------------------
TerminatedWorkerError                     Traceback (most recent call last)
<ipython-input-18-b2bdfd425f82> in <module>
     16 y = randn(815000, 1)
     17 mod = Ridge()
---> 18 sc = cross_val_score(mod, X, y,verbose =10, n_jobs=3)

..........

TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. 
This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker.

Вывод памяти

[ Top 5 ]
<ipython-input-18-b2bdfd425f82>:15: size=622 MiB (+622 MiB), count=3 (+3), average=207 MiB
<ipython-input-18-b2bdfd425f82>:16: size=6367 KiB (+6367 KiB), count=3 (+3), average=2122 KiB
~python37\lib\inspect.py:732: size=37.2 KiB (+26.2 KiB), count=596 (+419), average=64 B
~python37\lib\site-packages\sklearn\externals\joblib\numpy_pickle.py:292: size=7072 B (+3808 B), count=13 (+7), average=544 B
~python37\lib\pickle.py:549: size=5728 B (+3408 B), count=14 (+8), average=409 B

1 Ответ

0 голосов
/ 11 января 2019

Я обнаружил, что мой модуль scipy несовместим с моей распространяемой версией Windows 10 C ++.

Все, что я сделал, это скачал последнюю версию Visual Studio и установил распространяемое обновление C ++, которое указано в разделе «отдельные компоненты».

После установки перезагрузил компьютер и запустился.

import scipy
scipy.test()

Как только он действительно запустился, я попытался выполнить приведенный выше блок кода, и он исправился.

Я думаю, что это сводится к установке старой сборки Windows 10 с новой версией Python и Scipy

Это заняло много времени, чтобы решить и отладить. Надеюсь, это поможет.

...