我正在我的机器上运行一个用于时间序列预测的移动平均和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程序的编写风格吗
其他一些信息:
我正在使用http://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html进行SARIMA调优
我正在使用进程队列技术来并行化代码
SARIMA在一个核心上花费了9小时(如上图所示,最大值为1200%),如果我使用多处理,则需要24小时以上
我是stackoverflow的新手,很乐意补充所需的任何其他信息。如果有什么不清楚的地方,请告诉我
更新: 我提出了一个关于正式回购金字塔一揽子计划的问题,作者已经回答了。也可以在此处访问:https://github.com/alkaline-ml/pmdarima/issues/301
显而易见的原因是,SARIMA是为在CPU的多核上工作而开发的。然而,移动平均线并没有这种功能。这与您编写代码的风格无关。只是软件包作者以两种不同的方式开发了软件包代码,即
在您的理解中,还有一点需要纠正,操作系统在SARIMA的情况下不会自动在不同的内核上分配工作。SARIMA的软件包代码是在CPU的不同内核上分发所有工作的主代码,因为它是由其作者开发的,用于支持和使用多个内核
更新:
您的直觉是,具有客户端级多处理+本机多处理的多处理代码应该性能更好。但实际上,它并没有表现得更好。因为,
相关问题 更多 >
编程相关推荐