一、问题背景
一个朋友在使用 XGBoost 框架进行机器学习编码,他们的一个demo, 在笔记本的虚拟机(4核)运行的时候,只要8s, 但是在一个64核128G 的物理机上面的虚拟机去跑的时候,发现时间需要更长。
笔记本执行:
二、问题定位和解决
首先看到负载是比较高的,内存占用比较少。因为是计算型的,所以这种状态是正常的。
一开始我觉得是GIL 锁,后面询问是使用了 XGBoost 框架,想去官网看看能不能找到相关内容
XGBoost 多线程支持 文档的一段话提醒了我:
示例: https://github.com/dmlc/xgboost/blob/master/demo/guide-python/sklearn_parallel.py
我们通过示例将 n_job 的值调整为 cpu 核心的一半,
n_jobs=multiprocessing.cpu_count()//2
发现解决了问题