【发布时间】:2020-09-30 01:01:30
【问题描述】:
如果您将LinearRegression 模型与RandomizedSearchCV 模型选择器一起使用,并且假设我们对它们都使用n_jobs=-1,这意味着如果可能,所有CPU 都应该并行使用,这将如何处理,因为两者发出信号以利用所有可用的 CPU?
【问题讨论】:
标签: scikit-learn parallel-processing hyperparameters gridsearchcv
如果您将LinearRegression 模型与RandomizedSearchCV 模型选择器一起使用,并且假设我们对它们都使用n_jobs=-1,这意味着如果可能,所有CPU 都应该并行使用,这将如何处理,因为两者发出信号以利用所有可用的 CPU?
【问题讨论】:
标签: scikit-learn parallel-processing hyperparameters gridsearchcv
Q:“这将如何处理,因为两者都被告知要利用所有可用的 CPU?”
同样的方式,就像有 4 个轮胎,在轮子上引导,完全加压,所有准备安装在车上并骑上周末旅行,但有两个不同的目标 - 你的一个,进入你的车,和另一个,你妈妈已经期待了好几个星期了,她的车——因为两辆车都使用相同尺寸的车轮,你可以把它们安装在任何一个上。
所以,
您确实可以“利用所有可用的” 车轮,但您必须决定,是开着车驶向目标位置,还是取悦您的妈妈并让她的车有所有可用的轮子,所以它可以朝着她选择的目标跑去。
任何车轮交错或车轮共享策略都可能适用于某些神秘的旅行模式,但也会产生一些奇怪的共享/交换车轮的附加成本(例如,每 2 小时后,你妈妈会让你从“她”的车上拿一个轮子,让她以较低的稳定性和较低的速度骑在剩下的三个轮子上,但你不会在只有一个轮子方面取得太大进展,对吗?然而,你妈妈会支付你“借”一个轮子的费用,而你根本没有什么收益,而且你必须从你的汽车位置跑到你妈妈的汽车位置(如果你要去南方并且你妈妈正在骑车向北,每次“借”+每次“归还”借来的车轮,您的里程都会增加很多,不是吗?),您有责任采取所有这些措施将“借来”的车轮归还给不迟于 2 小时过去之前你妈妈的车(记住,作为你的好孩子妈妈,你永远不会超过公平分享的时间,对吗? )
您的母亲和您都不会同时达到目标,就好像你们俩都在没有这种可用轮子“容量”超额订阅方式的情况下骑行。另外,您将花费在此处和此处以及此处和此处移动“共享”轮子的所有附加成本(浪费时间,损失能量,破坏所有昂贵的缓存预取数据,您将不得不再次支付重新获取下一个您需要使用它们的时间 - here paying,也许是在沉默中和 hidden from your sight 数百个 [ns] 如果从 L1 缓存中提取,而不是 ~ 0.5 [ns](数据在您必须之前上次把轮子还给你妈妈的车……)
悲伤的模特。
性能不佳。
因此,人们应该很好地理解 joblib.Parallel 和其他基于进程的并行机制的底层发生了什么,知道计算硬件是如何工作的,因为语法对这些影响视而不见,并且文档并没有向公众解释在计算密集型处理负载中发生超额订阅后会发生什么。
简单 - 对 n_jobs 设置为 ( N, 3N/2, N/2, N/3, N/4 ),N 的结果时间进行测试和基准测试,这是硬件 CPU 内核的计数并读取一些BIOS 中有关您实际计算平台的超线程设置的详细信息。最后但并非最不重要的一点是,内存 I/O 使用模式的重要性不亚于“轮子”描述的 CPU 内核“交换”。
【讨论】:
n_jobs = N CPU(即具有n_jobs 参数)和n_jobs = 1 CPU 在其@ 987654334@ 包装器,但在不支持并行处理的模型上使用 n_jobs = N CPUs on its RandomizedSearchCV?
n_jobs 的最大值为 CPU count * hardware threads count。
RandomizedSearchCV 都使用例如n_jobs = N - 1 个 CPU - 这是否意味着一个 CPU 将永远空闲,即不被计算使用?