我看到 XGBClassifier()
和 sklearn.model_selection.RandomizedSearchCV()
都有参数 n_jobs
。我执行了简历,并通过设置n_jobs = -1
(在两者中(看到了我使用的16名工人:
Fitting 5 folds for each of 30 candidates, totalling 150 fits
[Parallel(n_jobs=-1)]: Using backend LokyBackend with 16 concurrent workers.
[Parallel(n_jobs=-1)]: Done 9 tasks | elapsed: 13.7min
[Parallel(n_jobs=-1)]: Done 18 tasks | elapsed: 20.4min
[Parallel(n_jobs=-1)]: Done 29 tasks | elapsed: 23.7min
[Parallel(n_jobs=-1)]: Done 40 tasks | elapsed: 28.7min
[Parallel(n_jobs=-1)]: Done 53 tasks | elapsed: 36.1min
[Parallel(n_jobs=-1)]: Done 66 tasks | elapsed: 43.4min
[Parallel(n_jobs=-1)]: Done 81 tasks | elapsed: 47.6min
[Parallel(n_jobs=-1)]: Done 96 tasks | elapsed: 50.8min
[Parallel(n_jobs=-1)]: Done 113 tasks | elapsed: 60.0min
[Parallel(n_jobs=-1)]: Done 135 out of 150 | elapsed: 73.1min remaining: 8.1min
[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 85.7min finished
我现在无法重复分析,但是我认为由于RandomizedSearchCV()
中的n_jobs=1
而发生并行化。
我对并行计算知之甚少。我了解RandomizedSearchCV()
运行每个参数独立设置,但是在并行化时它如何在具体中起作用?那n_jobs=-1
EN XGBClassifier()
呢?在两个函数中设置此参数是有意义的吗?
Q:在两个函数中设置此参数是有意义的吗?
一个简短的版本:不,它没有。
更长的版本需要一些理解,实际上正在处理 n_jobs
。
拥有一些昂贵的资源(正确,CPU核本身,最快,最昂贵的CPU核核核本地缓存层次结构元素(不太深入研究高速公路及其各自的关联性级别(和较便宜且方式较慢的rammory(,在执行第一个呼叫 - 签名中, n_jobs = -1
指令只需立即获取所有这些资源。
这意味着,对于任何"更深"的尝试使用(同样多的资源(,将没有合理的"免费"资源( n_jobs = -1
确实可以使用(又一次,但是没有第一个的"自由"毫无疑问,这将成为极为少数真实的任务的极其"超重订阅"的残酷破坏(因此,任务的超载队列绝不是免费的未来的资源来利用(O/S的并发任务安装程序的调度尝试映射/驱逐/驱逐/MAP/MAP/MAP/MAP/EXICT,从而在同一真实(且已经很忙(硬件元素上更多地处理作业(。
通常,即使是第一次尝试也可能在RAM分配方面造成麻烦,因为大型模型将要求在过程实例化过程中所有RAM-DATA结构中的许多复制或不使用,复制到每个新过程中(,因为CPU核的数量"指示"。结果记忆互换绝对是您永远不会重复的事情。
享受模型超参数的调整 - 这是机器学习实践的奶油。值得擅长。