我们正在CPU和GPU上测试CatBoost。虽然它在GPU上的运行速度比在CPU上快得多,但我们得到的结果要糟糕得多,而且我们使用的是相同的数据。
我说的大约差50%。
这怎么可能?
我们使用以下代码在CPU上运行它,并且在GPU上运行时仅将task_type
更改为GPU:
catBoostModel = CatBoostClassifier(
task_type="CPU",
early_stopping_rounds=50,
eval_metric="Precision",
cat_features=["Symbol"],
auto_class_weights="Balanced",
thread_count=-1
)
我们缺少什么?
CatBoost在CPU和GPU上使用不同默认值的一些超参数。还有一些超参数仅在GPU上可用或仅在CPU上可用。CatBoost文档提供了所有详细信息。
这意味着,即使你在CPU和GPU上运行相同的代码,你也可能在训练两个不同的模型。您可以使用model.get_all_params()
(其中model
是您训练的模型对象(来获得所有超参数的列表,并在CPU和GPU之间进行比较。
边框计数数值特征的分割数。
默认值取决于处理单元类型和其他参数:
CPU:254PairLogitPairwise和YetiRank Pairwise模式下的GPU:32GPU在所有其他模式:128