scikit-learn LinearRegression 和 RandomizedSearchCV 及其 n_jobs 参数关系
scikit-learn LinearRegression and RandomizedSearchCV and their n_jobs parameter relation
如果您使用带有 RandomizedSearchCV
模型选择器的 LinearRegression
模型,假设我们对它们都使用 n_jobs=-1
,这意味着所有 CPU 应该尽可能并行使用,这将如何处理,因为两者都被告知要利用所有可用的 CPU?
Q : "how will this be handled, since both are signaled to take advantage of all the available CPUs?"
同样的方式,就好像有 4 个轮胎,装在轮子上,完全加压,都准备好安装在汽车上,周末旅行,但有两个不同的目标 - 一个是你的,开着你的车,还有一个,你妈妈已经期待了几个星期,她的车——因为两辆车使用相同尺寸的车轮,你可以把它们安装在任何一辆上。
所以,
你确实可以 "take advantage of all the available" 轮子,但你必须决定,是让你的车开往你的目标位置,还是取悦你的妈妈,让她的车获得 所有可用的 轮子,这样它就可以 运行 朝着她选择的目标前进。
任何 wheel-interleaving 或 wheel-sharing 策略都可能适用于某些神秘的旅行模式,但也会产生一些奇怪的 add-on 共享/交换车轮的成本(如举个例子,每过 2 小时,你妈妈就会让你从 "her" 车上取下一个轮子,让她骑在剩下的三个轮子上,稳定性和速度都较低,但你换一个轮子不会有太大进步只有一个轮子,你愿意吗?然而,你妈妈会支付你拥有一个轮子的费用 "borrowed" 对你来说一点好处都没有,而且你还必须 运行 从你的汽车位置到你妈妈的汽车位置(如果你去南方而你妈妈骑车向北,你每次 "borrow" + 每次 "return" 借来的轮子都会增加相当多的里程数,不是吗? ) 并且您有责任采取所有此类措施 return "borrowed" 不迟于 2 小时的持续时间过去之前 "borrowed" 轮到你妈妈的车(记住,作为一个好的 child 你妈妈的,你永远不会超过 fair-sharing 持续时间,可以吗? )
结果?
你妈妈和你都不会同时到达目标,就好像你们俩在没有这种 available-wheel-"capacity" over-subscribed 方式的情况下骑行一样。此外,您将花费所有 add-on 移动 "shared" 轮子的所有费用(浪费时间、损失能量、破坏所有昂贵的缓存 pre-fetched 数据,您将不得不支付再次为 re-fetching 下次需要时使用它们 - here paying, perhaps in silence and hidden from your sight 数百个 [ns]
而不是 ~ 0.5 [ns]
如果从 L1 缓存中提取(上次你不得不return你妈妈的车的轮子之前的数据...)
悲伤的模型。
表现不佳。
因此,人们应该相当了解 joblib.Parallel
和其他 process-based 并行机制的幕后发生的事情,了解计算硬件的工作原理,因为语法对这些影响视而不见,文档也没有解释一般 public over-subscribing 发生在 computing-intensive processing-payloads.[= 之后会发生什么。 19=]
还有疑问吗?
简单 - 进行测试并将 n_jobs
的结果时间设置为 ( N, 3N/2, N/2, N/3, N/4 )
、N
是硬件 CPU 内核的数量,并在实际计算平台的超线程设置上阅读 BIOS 中的一些详细信息。最后但同样重要的是,memory-I/O 使用模式的重要性不亚于 "wheel" 描述的 CPU-core "swapping".
如果您使用带有 RandomizedSearchCV
模型选择器的 LinearRegression
模型,假设我们对它们都使用 n_jobs=-1
,这意味着所有 CPU 应该尽可能并行使用,这将如何处理,因为两者都被告知要利用所有可用的 CPU?
Q : "how will this be handled, since both are signaled to take advantage of all the available CPUs?"
同样的方式,就好像有 4 个轮胎,装在轮子上,完全加压,都准备好安装在汽车上,周末旅行,但有两个不同的目标 - 一个是你的,开着你的车,还有一个,你妈妈已经期待了几个星期,她的车——因为两辆车使用相同尺寸的车轮,你可以把它们安装在任何一辆上。
所以,
你确实可以 "take advantage of all the available" 轮子,但你必须决定,是让你的车开往你的目标位置,还是取悦你的妈妈,让她的车获得 所有可用的 轮子,这样它就可以 运行 朝着她选择的目标前进。
任何 wheel-interleaving 或 wheel-sharing 策略都可能适用于某些神秘的旅行模式,但也会产生一些奇怪的 add-on 共享/交换车轮的成本(如举个例子,每过 2 小时,你妈妈就会让你从 "her" 车上取下一个轮子,让她骑在剩下的三个轮子上,稳定性和速度都较低,但你换一个轮子不会有太大进步只有一个轮子,你愿意吗?然而,你妈妈会支付你拥有一个轮子的费用 "borrowed" 对你来说一点好处都没有,而且你还必须 运行 从你的汽车位置到你妈妈的汽车位置(如果你去南方而你妈妈骑车向北,你每次 "borrow" + 每次 "return" 借来的轮子都会增加相当多的里程数,不是吗? ) 并且您有责任采取所有此类措施 return "borrowed" 不迟于 2 小时的持续时间过去之前 "borrowed" 轮到你妈妈的车(记住,作为一个好的 child 你妈妈的,你永远不会超过 fair-sharing 持续时间,可以吗? )
结果?
你妈妈和你都不会同时到达目标,就好像你们俩在没有这种 available-wheel-"capacity" over-subscribed 方式的情况下骑行一样。此外,您将花费所有 add-on 移动 "shared" 轮子的所有费用(浪费时间、损失能量、破坏所有昂贵的缓存 pre-fetched 数据,您将不得不支付再次为 re-fetching 下次需要时使用它们 - here paying, perhaps in silence and hidden from your sight 数百个 [ns]
而不是 ~ 0.5 [ns]
如果从 L1 缓存中提取(上次你不得不return你妈妈的车的轮子之前的数据...)
悲伤的模型。
表现不佳。
因此,人们应该相当了解 joblib.Parallel
和其他 process-based 并行机制的幕后发生的事情,了解计算硬件的工作原理,因为语法对这些影响视而不见,文档也没有解释一般 public over-subscribing 发生在 computing-intensive processing-payloads.[= 之后会发生什么。 19=]
还有疑问吗?
简单 - 进行测试并将 n_jobs
的结果时间设置为 ( N, 3N/2, N/2, N/3, N/4 )
、N
是硬件 CPU 内核的数量,并在实际计算平台的超线程设置上阅读 BIOS 中的一些详细信息。最后但同样重要的是,memory-I/O 使用模式的重要性不亚于 "wheel" 描述的 CPU-core "swapping".