我正在使用 Nixtla 的 StatsForecast 库运行多个产品的时间序列预测。这是一座辉煌的图书馆。其最吸引人的特点是其 autoARIMA 脚本的速度和可靠性。根据文档,它的速度归功于使用 Numba 编译 Python 函数的底层函数。
它在我的本地计算机上以承诺的速度运行预测。但是,我在第二代 Google Cloud 函数中部署了相同的脚本,很明显,每次调用 autoARIMA 时都会对其进行编译。据我所知,这是因为 Google Cloud Functions 的无服务器特性不允许函数维护状态。因此,它永远不会保持编译状态。
我需要最简单的方法将脚本部署到Google Cloud平台,以便autoARIMA函数可以编译。换句话说,我需要最简单的方法来维护函数的状态。我的建议是使用 Compute Engine 中的预定虚拟机 (VM)。我相信它应该保持状态并允许该函数仅编译一个。
请验证这种方法是否可行,分享类似的经验并提出比当前提案更好的解决方案。
编辑:
因此 Nixtla StatsForecast 提供了多种执行预测的方法。人们可以通过单个函数调用预测一个时间序列,通过单个调用预测多个时间序列,甚至可以使用其与 Dask、Ray 和 Spark 的集成来实现进一步的并发优化。我对前两个感兴趣。
每次第一次调用 Nixtla 预测对象时,它都会使用 Numba 编译其 Python 组件,并将编译后的函数缓存在
__pycache__
目录中。云函数不提供这样做的选项。没有什么可以阻止人们在编译后重复使用同一个预测对象。如果人们只是对训练模型并推出预测和残差感兴趣,那么这种方法就很有效。我确信预测对象维护其自身内部状态可能会带来限制。目前,我还没有遇到这样的限制,因为
fit
方法会重置我的应用程序所需的一切。我认为使用保角预测区间可能会出现问题。因此,对于前两种方法,只需运行一次预测对象即可进行编译,然后它就会以令人印象深刻的 Numba 速度运行。应注意在只有一个时间序列的小数据集上进行编译,否则编译时间太长。