Python SARIMA模型自动使用CPU的所有内核。怎么样?

问题描述 投票:1回答:1

我正在运行移动平均线和SARIMA模型以在具有12个内核的机器上进行时间序列预测。

移动平均模型需要25分钟才能在单个内核上运行。通过使用多处理模块,我可以将运行时间缩短到约4分钟(通过使用12个核中的8个)。在检查“ top”命令的结果时,可以轻松地看到多处理实际上使用了8个内核,并且行为符合预期。

移动平均值(1个核心)-> CPU Usage for Moving Average 1 core

移动平均值(8核)]--> CPU Usage for Moving Average 8 cores

我先使用SARIMA模型运行了相同的例程,而没有使用多处理程序。令我惊讶的是,它是自动在所有核心上使用所有核心/分发工作的。与移动平均模型(图1)不同,在移动平均模型中,我可以看到单个进程的CPU使用率是100%,而使用8个内核时,则是大约800%,此处单个内核的CPU使用率仅在1000%之间波动-1200%(即全部12个内核)。不出所料,在这种情况下,多处理模块对我没有太大帮助,结果差很多。

SARIMA(1核)]--> CPU USage Sarima 1 core

SARIMA(8核)]--> CPU Usage Sarima 8 core(在这种情况下,不是一个进程使用1200%,而是某些进程超过了100%)

我的问题是,为什么在SARIMA模型的情况下OS会自动在不同的内核上分配工作,而我必须在移动平均模型中明确地(使用多处理)做到这一点。可能是由于编写python程序的风格所致吗?

其他一些信息:

  1. 我正在使用http://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html进行SARIMA调整。

  2. 我正在使用进程队列技术来并行化代码

  3. [[SARIMA在1个核心上花费9个小时(如上图所示,最大为1200%,如果使用多重处理,则超过24个小时。
  4. 我是stackoverflow的新手,很乐意补充所需的任何其他信息。如果有任何不清楚的地方,请告诉我。

    更新:我在金字塔包装的正式回购中提出了一个问题,作者回答了。可以在此处访问相同内容:https://github.com/alkaline-ml/pmdarima/issues/301

我正在运行移动平均线和SARIMA模型以在具有12个内核的机器上进行时间序列预测。移动平均模型需要25分钟才能在单个内核上运行。通过使用...

显而易见的原因是SARIMA被开发为可在CPU的多个内核上工作。而移动平均线没有实现该功能。它与您编写代码的风格无关。只是软件包作者以两种不同的方式开发了软件包代码,即

    不支持移动平均的本地多处理和
  1. 对SARIMA的本地多处理支持
  • 根据您的理解,还有一点要纠正的是,

    在SARIMA的情况下,OS不会自动将工作分配到不同的内核上。 SARIMA的软件包代码是负责将所有工作分配到不同CPU内核上的大师,因为它的开发者是为支持和使用多个内核而开发的。

  • 更新:您的直觉是,具有客户端级多处理+本机多处理的多处理代码应该执行得更好。但是实际上它并没有表现更好。这是因为,

      由于SARIMA的本地多处理本身就占用了CPU所有核心的资源,因此,由于要在CPU的所有核心上使用所有计算能力,因此客户端级的多处理将具有什么计算能力来加快处理速度?通过SARIMA的本地多处理使用?
    1. 这是Linux操作系统或任何操作系统的工作方式。当某个进程没有可用的CPU资源时(在您的情况下,这是客户端级多处理进程),则该进程由OS放置在队列中,直到CPU可用为止。由于您的客户端级多处理进程被放置在队列中,并且由于根本没有CPU,因此没有积极执行,因此它一直处于停滞状态。您可以参考Linux OS文档来验证我所说的内容。
    python multithreading parallel-processing operating-system multiprocessing
    1个回答
    0
    投票
    显而易见的原因是SARIMA被开发为可在CPU的多个内核上工作。而移动平均线没有实现该功能。它与您编写代码的风格无关。只是软件包作者以两种不同的方式开发了软件包代码,即

    推荐问答