立即下载 DOCA,开启高性能AI 网络之旅,实现“一站式” 编程
数据科学

利用 RAPIDS cuML 加速时间序列预测

时间序列预测是一种强大的数据科学技术,用于根据过去的数据点预测未来值

借助 skforecast 等开源 Python 库,您可以轻松地对数据运行时间序列预测。它们允许您“自带”与 scikit-learn API 兼容的回归器,让您能够灵活地与所选模型无缝协作。

随着数据集和技术(例如直接多步骤预测)的不断增加,需要您一次运行多个模型,在基于 CPU 的基础设施上运行预测时,计算成本会很快变得昂贵。

RAPIDS 是开源 GPU 加速数据科学和 AI 库的集合。 cuML 是一个 GPU 加速的 Python 机器学习库,具有 scikit-learn 兼容 API。

在这篇博文中,我们展示了如何将 RAPIDS cuML 与 skforecast 结合使用,以加速时间序列预测,从而让您能够处理更大的数据集和预测窗口。

为什么要进行时间序列预测?

在当今数据驱动的世界中,企业依靠时间序列预测来做出明智决策、优化流程并降低风险。无论是预测股票市场趋势、供需的突然变化,还是疾病的传播,准确的预测对于规划和策略都至关重要。

从历史上看,每月或每周的预测可能已经足以支持决策。但是,随着数据呈指数级增长和全球不确定性的增加,企业组织现在需要能够近乎实时地进行预测,以便对其业务做出前瞻性决策。

多步骤预测 

时间序列预测中使用的一种热门技术是递归多步骤预测 ,在此技术中,您可以训练单个模型并递归地应用该模型来预测序列中的 下 n 个值

相比之下,直接多步骤预测使用单独的模型来预测预测范围内的每个未来值。换言之,您“直接”试图预测前方的 n 个步骤,而不是通过递归来实现。这在某些情况下可以产生更好的结果,但由于需要训练多个模型,因此计算成本更高。

将加速计算引入直接多步预测

可以将 RAPIDS cuML 应用到现有的 skforecast 工作流中。在下方示例中,我们创建了具有每小时季节性和正漂移的合成时间序列数据集。然后,我们使用 skforecast 的 ForecasterDirect 类进行直接多步骤预测,并将 scikit-learn 回归器替换为 cuML 的 RandomForestRegressor:

import numpy as np
import pandas as pd
from skforecast.direct import ForecasterDirect

from sklearn.ensemble import RandomForestRegressor
import cuml

USE_GPU = False

# Parameters
n_records = 100000
drift_rate = 0.001
seasonality_period = 24
start_date = '2010-01-01'

# Create synthetic dataset with positive drift
date_rng = pd.date_range(start=start_date, periods=n_records, freq='h')
np.random.seed(42)
noise = np.random.randn(n_records)
drift = np.cumsum(np.ones(n_records) * drift_rate)
seasonality = np.sin(np.linspace(0, 2 * np.pi, n_records) * (n_records / seasonality_period))

data = noise + drift + seasonality
df = pd.DataFrame(data, index=date_rng, columns=['y'])

if USE_GPU:
    forecaster = ForecasterDirect(
        regressor=cuml.ensemble.RandomForestRegressor(
            n_estimators=200,
            max_depth=13,
        ),
        steps=100,
        lags=100,
        n_jobs=1,
    )
else:
    forecaster = ForecasterDirect(
        regressor=RandomForestRegressor(
            n_estimators=200,
            max_depth=13,
            n_jobs=-1  # parallelize Random Forest to use all CPU cores
        ),
        steps=100,
        lags=100,
        n_jobs=1,
    )

forecaster.fit(y=df['y'])
predictions = forecaster.predict()

对于包含数十万条记录的大型数据集,基于 CPU 的回归器可能需要很长时间才能完成每个预测。请记住,通过直接多步骤预测,我们正在为预测中的每个步骤训练单独的模型。在 CPU 上运行此预测需要超过 43 分钟。

切换到 cuML 的 GPU 加速回归器后,整个预测只需 103 秒即可完成,代码更改最少,速度提升 25 倍。

Barchart showing the direct multistep forecast runtime using Random Fores from RAPIDS cuML and scikit-learn
图 1、使用 scikit-learn (CPU) 与 RAPIDS cuML (GPU) 中的随机森林回归作为底层回归器来拟合 skforecast ForecasterDirect 的时间。在 NVIDIA H100 GPU 与双插槽 Intel(R) Xeon(R) Platinum 8480CL CPU 上运行。

由于预测的运行速度更快,因此我们可以更快地进行迭代并执行超参数优化以找到最佳拟合,或试用 cuML 支持的其他回归器。

结束语 

时间序列预测已存在数十年,但在今天仍然非常重要。像直接多步骤预测等技术可用于优化预测,但随着数据和预测规模的增长,计算成本会更高。

借助带有 skforecast 的 RAPIDS cuML 等加速计算库,您只需更改最少的代码,即可轻松加速预测工作。

如需了解有关加速机器学习的更多信息,请访问 cuML 文档 ,或参加 NVIDIA Deep Learning Institute 的 Fundamentals of Accelerated Data Science 课程

 

标签