... это значит, что если я установлю n_jobs = -1
, то неявно оно будет равно n_jobs = 2
?
Это просто:
python (scipy / joblib внутри GridSearchCV()
), используемый для определения количества ядер ЦП, что целесообразно для планирования параллельных (независимых) процессов, если запрос был выполнен с параметром n_jobs = -1
.
Смешно видеть трехпроцессорное ядро?
В некоторых случаях с виртуализированными машинами, которые могут синтетически эмулировать ЦП / ядра, результаты не столь тривиальны, как в вашем известном случае с Intel CPU / i3.
Если вы сомневаетесь, можно проверить это с помощью тривиализированного случая (на самом деле небольшом наборе данных, а не полномасштабном поиске в модельном пространстве ...) и позволить истории перейти к докажи это.
import psutil; print( "{0:17s}{1:} CPUs PHYSICAL".format(
"psutil:",
psutil.cpu_count( logical = False ) ) )
pass; print( "{0:17s}{1:} CPUs LOGICAL".format(
"psutil:",
psutil.cpu_count( logical = True ) ) )
...
Подобное «самообнаружение» на хост-платформе может сообщать более подробную информацию для разных систем / настроек:
'''
sys: linux
3.6.1 (default, Jun 27 2017, 14:35:15) .. [GCC 7.1.1 20170622 (Red Hat 7.1.1-3)]
multiprocessing: 1 CPU(s)
psutil: 1 CPUs PHYSICAL
psutil: 1 CPUs LOGICAL
psutil: psutil.cpu_freq( per_cpu = True ) not able to report. ?( v5.1.0+ )
psutil: 5.0.1
psutil: psutil.cpu_times( per_cpu = True ) not able to report. ?( vX.Y.Z+ )
psutil: 5.0.1
psutil: svmem(total=1039192064, available=257290240, percent=75.2, used=641396736, free=190361600, active=581107712, inactive=140537856, buffers=12210176, cached=195223552, shared=32768)
numexpr: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ModuleNotFoundError: No module named 'numexpr'.
joblib: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ModuleNotFoundError: No module named 'joblib'.
sklearn/joblib: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ModuleNotFoundError: No module named 'sklearn.externals.joblib'
'''
Или
''' [i5]
>>> numexpr.print_versions()
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Numexpr version: 2.5
NumPy version: 1.10.4
Python version: 2.7.13 |Anaconda 4.0.0 (32-bit)| (default, May 11 2017, 14:07:41) [MSC v.1500 32 bit (Intel)]
AMD/Intel CPU? True
VML available? True
VML/MKL version: Intel(R) Math Kernel Library Version 11.3.1 Product Build 20151021 for 32-bit applications
Number of threads used by default: 4 (out of 4 detected cores)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'''
... который лучше использовать с GridSearchCV для выбора наилучшего набора параметров для модели,
n_jobs = -1
или n_jobs
с большим числом, например n_jobs = 30
?
Нет простого ответа " One-Size-Fits-All " на этот вопрос:
Инструменты Scikit (и многие другие, следовавшие этой практике), используемые для создания директивы n_jobs
, необходимого количества одновременных экземпляров процесса (для выхода из общей блокировки GIL). степпинг - подробнее об этом в другом месте, если интересует подробности).
Это создание процесса не является бесплатным (как с точки зрения времени, т. Е. Тратит соответствующую сумму [TIME]
-доменовых затрат, так и с точки зрения пространства, т. Е. Тратит, по крайней мере, n_jobs
-кратное распределение ОЗУ одного экземпляра процесса Python в [SPACE]
-домен).
Учитывая это, ваша битва - это битва с обоюдоострым мечом.
Попытка «подрубить» CPU приведет к тому, что (некоторые) ядра CPU могут работать на холостом ходу.
Попытка «перебросить» пространство RAM приведет к снижению производительности, чем ожидалось, так как виртуальная память превратит операционную систему в подкачку, в результате чего время доступа к данным, масштабируемое в режиме машинного обучения, увеличится с * 1073. * более чем на 100 000 раз медленнее ~ 10+ [ms]
что вряд ли понравится.
Общий эффект n_jobs = a_reasonable_amount_of_processes
зависит от Закона Амдала (переформулированный, а не надстройка над-наивной версии) Таким образом, будет практический пик оптимальности (максимум) того, сколько ядер ЦП поможет улучшить вычислительные намерения, помимо которых накладные расходы (в общих чертах для доменов [TIME]
- и [SPACE]
выше ) фактически ухудшит любые потенциальные положительные воздействия.
Используя RandomForestRegressor()
на действительно больших наборах данных в производстве, я могу сказать вам, что [SPACE]
- ваш домен хуже ваших врагов в попытках роста n_jobs
любая дальнейшая и ни одна настройка на системном уровне никогда не преодолеет эту границу (поэтому все больше и больше ОЗУ со сверхнизкой задержкой и все больше и больше (реальных) ядер ЦП - это единственный практический рецепт для того, чтобы действительно перейти на более масштабные вычисления n_jobs
). планы).