PythonSarima模型自动使用CPU的所有核心。怎样

2024-10-04 03:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在我的机器上运行一个用于时间序列预测的移动平均和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个核时,CPU使用率为800%,在这里,单个核的CPU使用率仅在1000%-1200%之间波动(即全部12个核)。正如所料,在这种情况下,多处理模块对我帮助不大,结果更糟

SARIMA(1芯)->CPU USage Sarima 1 core

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

我的问题是,为什么在SARIMA模型中,操作系统会自动在不同的内核上分配工作,而在移动平均模型中,我必须显式地(使用多处理)分配工作。这是因为python程序的编写风格吗

其他一些信息:

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

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

  3. SARIMA在一个核心上花费了9小时(如上图所示,最大值为1200%),如果我使用多处理,则需要24小时以上

我是stackoverflow的新手,很乐意补充所需的任何其他信息。如果有什么不清楚的地方,请告诉我

更新: 我提出了一个关于正式回购金字塔一揽子计划的问题,作者已经回答了。也可以在此处访问:https://github.com/alkaline-ml/pmdarima/issues/301


Tags: 模块core模型机器核心for进程时间
1条回答
网友
1楼 · 发布于 2024-10-04 03:18:40

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

  1. 移动平均和移动平均不支持本机多处理
  2. 对SARIMA的本机多处理支持

在您的理解中,还有一点需要纠正,操作系统在SARIMA的情况下不会自动在不同的内核上分配工作。SARIMA的软件包代码是在CPU的不同内核上分发所有工作的主代码,因为它是由其作者开发的,用于支持和使用多个内核

更新:

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

  1. 由于SARIMA的本机多处理本身占用了所有CPU核心的资源,由于SARIMA的本机多处理正在使用所有CPU核心上的所有计算能力,因此客户机级多处理将具有什么计算能力来加速该过程
  2. 这是linux操作系统或任何操作系统的工作方式。当一个进程没有剩余的CPU电源时(在您的情况下,它是用于客户端级多处理进程),该进程将由操作系统置于队列中,直到CPU可用为止。由于您的客户机级多处理进程被放置在队列中,并且由于根本没有剩余的CPU而没有积极执行,因此它正在暂停。你可以参考Linux操作系统文档来验证我所说的

相关问题 更多 >