我们在vanilla Ubuntu docker镜像上从源代码编译xgboost v0.7。此图像正在我们的EC2实例上以时间关键设置运行。
最近我们尝试了新的EC2 c5实例类型,它应该是Intel Skylake gen CPU。非常奇怪的是,新C5上相同的泊坞窗图像会在时间上产生明显更糟糕的结果。中位数慢3倍。
关于为什么会出现这种情况的想法?
使用-march = skylake-avx512
编译xgboost时仍然适用答案 0 :(得分:0)
刚刚遇到这篇文章,看起来非常像我们所看到的。
答案 1 :(得分:0)
在迁移到Google Cloud上的Skylake gen CPU时,我们遇到了类似的问题(延迟延长了3倍)。但是,事实证明,真正的问题是由使用具有大量内核(32个内核)的实例引起的。由于某些原因,每个XGBoost实例都会产生30个线程(尽管predict
应该只在单个线程中运行)。更多详细信息,请参见https://github.com/dmlc/xgboost/issues/1345。
我们通过设置对其进行了修复
model._Booster.set_param("nthread", 1)
在加载模型之后。