CatBoost机器学习超参数:为什么不总是使用' thread_count = -1 ' ?



关于CatBoost:

  1. 在什么情况下,一个人可能想要使用少于一个CPU的最大线程数?我找不到这个问题的答案。
  2. 使用的每个核心是否有固定的成本/开销?也就是说,对于所有数据集类型/大小来说,越多越好吗?

以上问题的答案是否适用于所有机器学习算法?

我认为更改thread_count的大多数原因不是catboost特定的。sklearn等其他库也提供相同的功能。不能在所有cpu上运行的原因有:

  • 调试:如果有问题,它可能是方便的只有一个线程,从而使过程更简单。
  • 您希望机器上的其他进程拥有CPU功率。特别是如果您有一个由数据科学家团队共享的用于内存数据分析的服务器。如果你霸占了所有的资源,你的同事会不高兴的。
  • 您的作业非常小,根本不需要所有的资源。
  • 你以另一种方式并行:例如,你使用交叉验证尝试不同的超参数。然后,将一个CPU专用于训练一个模型,而不是使用所有CPU训练一个模型,然后使用所有CPU继续训练下一个模型,这是有意义的

我希望这回答了问题1。这可以推广到其他内存ml库,如sklearn。

关于问题2,我不确定。CatBoost在其c++代码中执行并行化,并通过Python包中的Cython使用它。我认为这会带来一些开销(因为分布式计算总是会带来开销),但可能不会太多。你可以通过计时一些实验来找到答案。

相关内容

  • 没有找到相关文章

最新更新