我想使用scikit-learn并行化我的模型构建过程。我想知道将外循环和内循环都并行化是否有意义(即同时为GridSearchCV和cross_validate设置n_jobs = -1 )?
发布于 2019-07-04 04:34:46
一个简短的版本:不,它不是。
一个更长的版本需要一些理解,了解n_jobs是如何被实际处理的。
有几个昂贵的资源(对,CPU-core本身,最快和最昂贵的CPU-core-local缓存层次结构元素(不深入研究缓存线和它们在这一层上各自的关联性)和更便宜但也更慢的内存),n_jobs = -1指令,在第一个调用签名执行时,将一次获取所有这些资源。
这意味着,将没有合理的“空闲”资源用于任何“更深层次的”尝试使用-再一次-与物理可用的“资源”一样多的“资源”( n_jobs = -1会这样做并再次遵守这一点,但从第一个资源开始没有“空闲”可用,在调度尝试映射/逐出/映射/逐出/逐出,从而在相同的真实(并且已经相当繁忙的)硬件元素上有更多的处理作业时,将会有很大的破坏)。
通常,即使是第一次尝试也可能在RAM分配方面造成麻烦,因为大型模型将要求在进程实例化期间在所有RAM数据结构中进行多次复制(使用或不使用的所有对象有效地制作完整副本,复制到每个新进程中),因为CPU核心的数量“规定”。由此产生的内存交换肯定是您永远不会喜欢重复的事情。
享受模型HyperParameters的调整-它是机器学习实践中的奶油。值得一试。
https://stackoverflow.com/questions/56866643
复制相似问题