Scikit-learn: GridSearchCV.fit(...,n_job=-1) ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ๋ฒ„๊ทธ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 09์›” 11์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: scikit-learn/scikit-learn

๋ฒ„๊ทธ๋ฅผ ์ œ์ถœํ•˜๊ธฐ ์ „์— ๊ณผ๊ฑฐ ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ฒ„๊ทธ ์„ค๋ช…

ํ˜ธ์ถœ GridSearchCV.fit() ๊ฐ€์ง„ n_jobs=-1 ์˜ˆ์™ธ ': [errno๋ฅผ 22] ์ž˜๋ชป๋œ ์ธ์ˆ˜ OSError'๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
ํ˜ธ์ถœ 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(๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰)
_์›๊ฒฉ์ถ”์ :
""
์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "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__
return self.fn( self.args, * self.kwargs)
ํŒŒ์ผ "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib_parallel_backends.py", ๋ผ์ธ 595, __call__
๋ฐ˜ํ™˜ self.func( args, * kwargs)
ํŒŒ์ผ "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", ๋ผ์ธ 252, __call__
๋ฐ˜ํ™˜ [func( args, * kwargs)
ํŒŒ์ผ "C:Users\tlbh9\Anaconda3\lib\site-packages\joblib\parallel.py", ๋ผ์ธ 252,
๋ฐ˜ํ™˜ [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 ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰)
~์—
.......
212 ๊ฒ€์ƒ‰ = GridSearchCV(RandomForestClassifier(), param_grid, cv=3, n_jobs=-1, return_train_score=True, ์ž์„ธํ•œ ์ •๋ณด=2)
--> 213 search.fit(feature_matrix, ๋ ˆ์ด๋ธ”)
.......

inner_f(*args, kwargs)์˜ ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py71 ๋ฏธ๋ž˜๊ฒฝ๊ณ )72 kwargs.update({k: k์˜ ๊ฒฝ์šฐ ์ธ์ˆ˜, zip์˜ ์ธ์ˆ˜(sig.parameters, args)})---> 73 ๋ฐ˜ํ™˜ f( kwargs)
74ํ™”
75

~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py โ€‹โ€‹in fit(self, X, y, groups, **fit_params)
734 ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ
735
--> 736 self._run_search(evaluate_candidates)
737
738 # ๋‹ค์ค‘ ๋ฉ”ํŠธ๋ฆญ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด best_index_, best_params_ ๋ฐ

~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py โ€‹โ€‹_run_search(์ž์ฒด, ํ‰๊ฐ€ ํ›„๋ณด)
1186ํ™”
1187 """param_grid์—์„œ ๋ชจ๋“  ํ›„๋ณด ๊ฒ€์ƒ‰"""
-> 1188 ํ‰๊ฐ€_ํ›„๋ณด(ParameterGrid(self.param_grid))
1189
1190

~\Anaconda3\lib\site-packages\sklearn\model_selection_search.py์— ํ‰๊ฐ€_candidates(candidate_params)
706 n_splits, n_candidates, n_candidates * n_splits))
707
--> 708 ์ถœ๋ ฅ = ๋ณ‘๋ ฌ(์ง€์—ฐ(_fit_and_score)(๋ณต์ œ(base_estimator),
709 X, Y,
710 ๊ธฐ์ฐจ=๊ธฐ์ฐจ, ํ…Œ์ŠคํŠธ=ํ…Œ์ŠคํŠธ,

~\Anaconda3\lib\site-packages\joblib\parallel.py in __call__ (์ž์ฒด, ๋ฐ˜๋ณต ๊ฐ€๋Šฅ)
1040
1041 self._backend.retrieval_context() ์‚ฌ์šฉ:
-> 1042 self.retrieve()
1043 # ์šฐ๋ฆฌ๊ฐ€ ๋๋‚ฌ๋‹ค๋Š” ๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค
1044ํ™”

๊ฒ€์ƒ‰(์ž์ฒด)์˜ ~\Anaconda3\lib\site-packages\joblib\parallel.py
919 ์‹œ๋„:
920 if getattr(self._backend, 'supports_timeout', False):
--> 921
922 ๊ธฐํƒ€:
923

~\Anaconda3\lib\site-packages\joblib_parallel_backends.py in wrap_future_result(๋ฏธ๋ž˜, ์‹œ๊ฐ„ ์ดˆ๊ณผ)
540 AsyncResults.get ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ."""
541 ์‹œ๋„:
--> 542 return future.result(timeout=timeout)
543 CfTimeoutError๋ฅผ ์ œ์™ธํ•˜๊ณ  e:
544 e์—์„œ TimeoutError ๋ฐœ์ƒ

~\Anaconda3\lib\concurrent\futures_base.py in result(self, timeout)
430ํ™”
431ํ™”
--> 432 ๋ฐ˜ํ™˜ self.__get_result()
433
434ํ™”

__get_result(self)์˜ ~\Anaconda3\lib\concurrent\futures_base.py
386ํ™”
387 if self._exception:
--> 388 ์ž๊ธฐ ์ž์‹ ์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค._์˜ˆ์™ธ
389 ๊ธฐํƒ€:
390 ๋ฐ˜ํ™˜ self._result

OSError: [Errno 22] ์ž˜๋ชป๋œ ์ธ์ˆ˜

๋ฒ„์ „


์ฒด๊ณ„:
ํŒŒ์ด์ฌ: 3.8.3(๊ธฐ๋ณธ๊ฐ’, 2020๋…„ 7์›” 2์ผ, 17:30:36) [MSC v.1916 64๋น„ํŠธ(AMD64)]
์‹คํ–‰ ํŒŒ์ผ: C:Users\tlbh9\Anaconda3\python.exe
๊ธฐ๊ณ„: Windows-10-10.0.18362-SP0

ํŒŒ์ด์ฌ ์ข…์†์„ฑ:
ํ•: 20.1.1
์„ค์ • ๋„๊ตฌ: 49.2.0.post20200714
์Šค์ผˆ๋Ÿฐ: 0.23.1
์ˆซ์ž: 1.18.5
์‚ฌ์ดํ”ผ: 1.5.0
์‚ฌ์ด์ฌ: 0.29.21
ํŒฌ๋”: 1.0.5
๋งคํŠธํ”Œ๋กฏ๋ฆฝ: 3.2.2
์ž‘์—… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: 0.16.0
threadpoolctl: 2.1.0

OpenMP๋กœ ๊ตฌ์ถ•: True

์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ชจ๋“  3 ๋Œ“๊ธ€

@tluocs param_grid๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
param_grid์—๋„ feature_matrix๋ฅผ ํ• ๋‹นํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์˜ ์ค„ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ์Šˆ๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ €๋Š” ํŒŒ์ด์ฌ๊ณผ scikit-learn์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด "๋ฒ„๊ทธ"(์žˆ๋Š” ๊ฒฝ์šฐ)๊ฐ€ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ์ˆ˜์ •๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋ชจ์–‘์„ ๊ฐ€์ง„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๋ฌธ์˜ ํ•ด @tluocs ๋ฐ ๊ฐ์‚ฌ @AnshuTrivedi.
๋ฌธ์ œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋กœ ์ˆ˜์ •๋˜์—ˆ์Œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ˆ˜์ •ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋‹ค์‹œ ์—ฌ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰