Scikit-learn: GridSearchCV.fit (..., n_job = -1) может содержать ошибку параллелизма

Созданный на 11 сент. 2020  ·  3Комментарии  ·  Источник: scikit-learn/scikit-learn

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

Опишите ошибку

Вызов GridSearchCV.fit() с n_jobs=-1 вызывает исключение « OSError: [Errno 22] Invalid argument ».
Вызов GridSearchCV.fit() с n_jobs=None отлично работает

В случае n_jobs=None результат показывает, что он разрешает n_jobs = 1 (хотя в других моих программах любой успешный запуск GridSearchCV разрешит n_jobs = 6 на той же машине, это может не быть большой проблемой. Просто к вашему сведению).

Возможно, проблема может заключаться в (1) lib \ site-packages \ joblib \ parallel.py или _parallel_backends.py или (2) lib \ concurrent \ futures_base.py, как показано в трассировке ниже.

Шаги / код для воспроизведения

Добавьте минимальный пример того, что мы можем воспроизвести ошибку, запустив код. Будьте максимально лаконичны, не полагайтесь на внешние данные. Короче говоря, мы собираемся скопировать ваш код и рассчитываем получить тот же результат, что и вы. Пример: md5-0c48dcb0a123e7134795a5b1cc42e4f2 Если код слишком длинный, не стесняйтесь размещать его в общедоступной сущности и ссылаться на него в проблеме: https://gist.github.com
search = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, verbose=2)
search.fit(feature_matrix, labels)

Ожидаемые результаты


Ошибка не возникает.

Фактические результаты


OSError: [Errno 22] Недействительный аргумент.

Подробный трекбек прилагается ниже:


_RemoteTraceback Traceback (последний вызов последним)
_RemoteTraceback:
"" "
Отслеживание (последний вызов последний):
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ externals \ loky \ process_executor.py", строка 431, в _process_worker
r = call_item ()
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ externals \ loky \ process_executor.py", строка 285, в __call__
вернуть self.fn ( self.args, * self.kwargs)
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib_parallel_backends.py", строка 595, в __call__
вернуть self.func ( аргументы, * kwargs)
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py", строка 252, в __call__
return [func ( args, * kwargs)
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py", строка 252, в
return [func ( args, * kwargs)
Файл "C: Users \ tlbh9 \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_validation.py", строка 505, в _fit_and_score
print ("[CV]% s% s"% (msg, (64 - len (msg)) * '.'))
OSError: [Errno 22] Недействительный аргумент.
"" "

Вышеупомянутое исключение явилось прямой причиной следующего исключения:

OSError Traceback (последний вызов последним)
в
.......
212 search = GridSearchCV (RandomForestClassifier (), param_grid, cv = 3, n_jobs = -1, return_train_score = True, verbose = 2)
-> 213 search.fit (матрица_компонентов, метки)
.......

~ \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py в inner_f (* args, kwargs)71 FutureWarning)72 kwargs.update ({k: arg для k, arg в zip (sig.parameters, args)})---> 73 возврат f ( kwargs)
74 вернуть inner_f
75

~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py ​​in fit (self, X, y, groups, ** fit_params)
734 вернуть результаты
735
-> 736 self._run_search (Assessment_candidates)
737
738 # Для многомерной оценки сохраните best_index_, best_params_ и

~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py ​​в _run_search (self, Assessment_candidates)
1186 def _run_search (self, Assessment_candidates):
1187 "" "Искать всех кандидатов в param_grid" ""
-> 1188 eval_candidates (ParameterGrid (self.param_grid))
1189
1190

~ \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py ​​в оценке_candidates (параметры_кандидата)
706 n_splits, n_candidates, n_candidates * n_splits))
707
-> 708 out = parallel (с задержкой (_fit_and_score) (clone (base_estimator),
709 Х, у,
710 поезд = поезд, тест = тест,

~ \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py в __call__ (самостоятельный, повторяемый)
1040
1041 с self._backend.retrieval_context ():
-> 1042 self.retrieve ()
1043 # Убедитесь, что мы получили последнее сообщение о том, что мы закончили
1044 elapsed_time = time.time () - self._start_time

~ \ Anaconda3 \ lib \ site-packages \ joblib \ parallel.py при получении (сам)
919 попыток:
920, если getattr (self._backend, 'supports_timeout', False):
-> 921 self._output.extend (job.get (timeout = self.timeout))
Еще 922:
923 self._output.extend (job.get ())

~ \ Anaconda3 \ lib \ site-packages \ joblib_parallel_backends.py в wrap_future_result (будущее, тайм-аут)
540 AsyncResults.get из многопроцессорной обработки. "" "
541 попытка:
-> 542 вернуть future.result (тайм-аут = тайм-аут)
543 кроме CfTimeoutError как e:
544 поднять TimeoutError из e

~ \ Anaconda3 \ lib \ concurrent \ futures_base.py в результате (self, timeout)
430 поднять CancelledError ()
431 elif self._state == ЗАВЕРШЕНО:
-> 432 вернуть self .__ get_result ()
433
434 self._condition.wait (тайм-аут)

~ \ Anaconda3 \ lib \ concurrent \ futures_base.py в __get_result (self)
386 def __get_result (сам):
387, если self._exception:
-> 388 поднять self._exception
Еще 389:
390 вернуть self._result

OSError: [Errno 22] Недействительный аргумент.

Версии


Система:
python: 3.8.3 (по умолчанию, 2 июля 2020 г., 17:30:36) [MSC v.1916, 64-разрядная версия (AMD64)]
исполняемый файл: C: Users \ tlbh9 \ Anaconda3 \ python.exe
машина: Windows-10-10.0.18362-SP0

Зависимости Python:
пункт: 20.1.1
setuptools: 49.2.0.post20200714
sklearn: 0.23.1
число: 1.18.5
scipy: 1.5.0
Cython: 0,29,21
панды: 1.0.5
matplotlib: 3.2.2
joblib: 0.16.0
threadpoolctl: 2.1.0

Создано с OpenMP: True

Спасибо за участие!

Все 3 Комментарий

@tluocs Можете ли вы поделиться полным кодом, поскольку я пытался воспроизвести проблему, в которой говорится, что param_grid не определен.
Я хочу знать, как вы назначили param_grid и feature_matrix.
Было бы лучше, если бы вы могли поделиться всеми переменными, используемыми в приведенном выше коде строк, для воспроизведения проблемы.

Спасибо Аншу. Код довольно большой, поэтому воспроизвести проблему непросто. Вот почему я пытался ввести всю необходимую информацию, когда поднимал вопрос. Теперь я только что решил это, обновив свой python и scikit-learn до последней версии (хотя моя предыдущая версия уже была довольно новой, датированной июлем 2020 года). Так что я предполагаю, что эта «ошибка» (если она есть) могла быть исправлена ​​в последней версии.

Спасибо @tluocs за то, что @AnshuTvedi за то, что посмотрели на это.
Если я правильно понимаю, проблема устранена с помощью обновления, закрываю. Не стесняйтесь открывать снова, если что-то еще нужно исправить. Спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги