Ray 是一个开源的统一计算框架,用于扩展 Python 工作负载。在本指南中,我们将解释如何在 Ray 上使用 TimeGPT

目录

  1. 安装

  2. 加载您的数据

  3. 初始化 Ray

  4. 在 Ray 上使用 TimeGPT

  5. 关闭 Ray

1. 安装

通过 Fugue 安装 Ray。Fugue 提供了一个易于使用的分布式计算接口,允许用户在包括 Ray 在内的多个分布式计算框架之上执行 Python 代码。

注意

您可以使用 pip 安装 fugue

pip install fugue[ray]

如果在分布式 Ray 集群上执行,请确保在所有 worker 上安装了 nixtla 库。

2. 加载数据

您可以将数据加载为 pandas DataFrame。在本教程中,我们将使用一个包含不同市场每小时电价的数据集。

import pandas as pd
df = pd.read_csv(
    'https://raw.githubusercontent.com/Nixtla/transfer-learning-time-series/main/datasets/electricity-short.csv',
    parse_dates=['ds'],
) 
df.head()
unique_iddsy
0BE2016-10-22 00:00:0070.00
1BE2016-10-22 01:00:0037.10
2BE2016-10-22 02:00:0037.10
3BE2016-10-22 03:00:0044.75
4BE2016-10-22 04:00:0037.10

3. 初始化 Ray

初始化 Ray 并将 pandas DataFrame 转换为 Ray DataFrame。

import ray
from ray.cluster_utils import Cluster
ray_cluster = Cluster(
    initialize_head=True,
    head_node_args={"num_cpus": 2}
)
ray.init(address=ray_cluster.address, ignore_reinit_error=True)
ray_df = ray.data.from_pandas(df)
ray_df
MaterializedDataset(
   num_blocks=1,
   num_rows=6720,
   schema={unique_id: object, ds: datetime64[ns], y: float64}
)

4. 在 Ray 上使用 TimeGPT

Ray 上使用 TimeGPT 与非分布式情况几乎完全相同。唯一的区别是您需要使用 Ray DataFrame。

首先,实例化 NixtlaClient 类。

from nixtla import NixtlaClient
nixtla_client = NixtlaClient(
    # defaults to os.environ.get("NIXTLA_API_KEY")
    api_key = 'my_api_key_provided_by_nixtla'
)

👍 使用 Azure AI 端点

要使用 Azure AI 端点,请设置 base_url 参数

nixtla_client = NixtlaClient(base_url="you azure ai endpoint", api_key="your api_key")

然后使用 NixtlaClient 类中的任何方法,例如 forecastcross_validation

ray_df
MaterializedDataset(
   num_blocks=1,
   num_rows=6720,
   schema={unique_id: object, ds: datetime64[ns], y: float64}
)
fcst_df = nixtla_client.forecast(ray_df, h=12)

📘 Azure AI 中可用的模型

如果您正在使用 Azure AI 端点,请务必设置 model="azureai"

nixtla_client.forecast(..., model="azureai")

对于公共 API,我们支持两种模型:timegpt-1timegpt-1-long-horizon

默认情况下使用 timegpt-1。请参阅此教程,了解何时以及如何使用 timegpt-1-long-horizon

要可视化结果,请使用 to_pandas 方法将 Ray 的输出转换为 pandas DataFrame。

fcst_df.to_pandas().tail()
unique_iddsTimeGPT
55NP2018-12-24 07:00:0055.387066
56NP2018-12-24 08:00:0056.115517
57NP2018-12-24 09:00:0056.090714
58NP2018-12-24 10:00:0055.813717
59NP2018-12-24 11:00:0055.528519
cv_df = nixtla_client.cross_validation(ray_df, h=12, freq='H', n_windows=5, step_size=2)
cv_df.to_pandas().tail()
unique_iddscutoffTimeGPT
295NP2018-12-23 19:00:002018-12-23 11:00:0053.632019
296NP2018-12-23 20:00:002018-12-23 11:00:0052.512775
297NP2018-12-23 21:00:002018-12-23 11:00:0051.894035
298NP2018-12-23 22:00:002018-12-23 11:00:0051.06572
299NP2018-12-23 23:00:002018-12-23 11:00:0050.32592

您还可以在 Ray 上使用 TimeGPT 处理外部变量。为此,请参阅外部变量教程。请记住,您需要使用 Ray DataFrame 而不是 pandas DataFrame。

5. 关闭 Ray

完成后,关闭 Ray 会话。

ray.shutdown()