我正在运行移动平均线和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程序的风格所致吗?
其他一些信息:
我正在使用http://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html进行SARIMA调整。
我正在使用进程队列技术来并行化代码
我是stackoverflow的新手,很乐意补充所需的任何其他信息。如果有任何不清楚的地方,请告诉我。
更新:我在金字塔包装的正式回购中提出了一个问题,作者回答了。可以在此处访问相同内容:https://github.com/alkaline-ml/pmdarima/issues/301
在SARIMA的情况下,OS不会自动将工作分配到不同的内核上。 SARIMA的软件包代码是负责将所有工作分配到不同CPU内核上的大师,因为它的开发者是为支持和使用多个内核而开发的。
更新:您的直觉是,具有客户端级多处理+本机多处理的多处理代码应该执行得更好。但是实际上它并没有表现更好。这是因为,