首页 > 解决方案 > CatBoost 机器学习超参数:为什么不总是使用 `thread_count = -1`?

问题描述

关于 CatBoost:

  1. 在什么情况下可能希望使用少于 CPU 的最大线程数?我找不到这个问题的答案。
  2. 是否存在与使用的每个核心相关的固定成本/间接费用?即,对于所有数据集类型/大小来说总是更好?

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

标签: machine-learningoptimizationhyperparameterscatboost

解决方案


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

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

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

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


推荐阅读