如何通过XGBoost算法实现一次高效性能的深度优化?
- 内容介绍
- 文章标签
- 相关推荐
本文共计552个文字,预计阅读时间需要3分钟。
一、问题背景:一位朋友在使用XGBoost框架进行机器学习编码时,创建了一个demo。在笔记本的4核虚拟机(运行时间约8s)上表现良好,但在一个64核128G物理机上的虚拟机中运行时,却出现了性能瓶颈。
一、问题背景-
一个朋友在使用 XGBoost 框架进行机器学习编码,他们的一个demo, 在笔记本的虚拟机(4核)运行的时候,只要8s, 但是在一个64核128G 的物理机上面的虚拟机去跑的时候,发现时间需要更长。
笔记本执行:
首先看到负载是比较高的,内存占用比较少。因为是计算型的,所以这种状态是正常的。
一开始我觉得是GIL 锁,后面询问是使用了 XGBoost 框架,想去官网看看能不能找到相关内容
XGBoost 多线程支持 文档的一段话提醒了我:
我们可以在具有更多核心的机器上运行相同的代码。例如大型的 Amazon Web Services EC2 具有 32 个核心。我们可以调整上面的代码来计算具有 1 到 32 个核心的模型所需的训练时间。结果如下图。
XGBoost 在 1 到 32 个核心上训练模型所需的时间
值得注意的是,在多于 16 个线程(大约 7 秒)的情况下,我们没有看到太多进步。我想其原因是 Amazon 仅在硬件中提供 16 个内核,而另外的 16 个核心是通过超线程提供额外。结果表明,如果您的计算机具有超线程能力,则可能需要将 num_threads 设置为等于计算机中物理 CPU 核心的数量。
示例: github.com/dmlc/xgboost/blob/master/demo/guide-python/sklearn_parallel.py
我们通过示例将 n_job 的值调整为 cpu 核心的一半,
n_jobs=multiprocessing.cpu_count()//2
发现解决了问题
本文共计552个文字,预计阅读时间需要3分钟。
一、问题背景:一位朋友在使用XGBoost框架进行机器学习编码时,创建了一个demo。在笔记本的4核虚拟机(运行时间约8s)上表现良好,但在一个64核128G物理机上的虚拟机中运行时,却出现了性能瓶颈。
一、问题背景-
一个朋友在使用 XGBoost 框架进行机器学习编码,他们的一个demo, 在笔记本的虚拟机(4核)运行的时候,只要8s, 但是在一个64核128G 的物理机上面的虚拟机去跑的时候,发现时间需要更长。
笔记本执行:
首先看到负载是比较高的,内存占用比较少。因为是计算型的,所以这种状态是正常的。
一开始我觉得是GIL 锁,后面询问是使用了 XGBoost 框架,想去官网看看能不能找到相关内容
XGBoost 多线程支持 文档的一段话提醒了我:
我们可以在具有更多核心的机器上运行相同的代码。例如大型的 Amazon Web Services EC2 具有 32 个核心。我们可以调整上面的代码来计算具有 1 到 32 个核心的模型所需的训练时间。结果如下图。
XGBoost 在 1 到 32 个核心上训练模型所需的时间
值得注意的是,在多于 16 个线程(大约 7 秒)的情况下,我们没有看到太多进步。我想其原因是 Amazon 仅在硬件中提供 16 个内核,而另外的 16 个核心是通过超线程提供额外。结果表明,如果您的计算机具有超线程能力,则可能需要将 num_threads 设置为等于计算机中物理 CPU 核心的数量。
示例: github.com/dmlc/xgboost/blob/master/demo/guide-python/sklearn_parallel.py
我们通过示例将 n_job 的值调整为 cpu 核心的一半,
n_jobs=multiprocessing.cpu_count()//2
发现解决了问题

