使用Amazon SageMaker部署Chronos时间序列预测模型

使用Amazon SageMaker部署Chronos时间序列预测模型

chronos-forecasting chronos-forecasting 项目地址: https://gitcode.com/gh_mirrors/ch/chronos-forecasting

概述

时间序列预测是许多业务场景中的核心需求,从销售预测到资源规划都离不开准确的预测模型。Chronos是亚马逊科学团队开发的一系列基于Transformer架构的时间序列预测模型,其中Chronos-Bolt是其轻量级版本,专为高效预测而设计。

本文将详细介绍如何将Chronos-Bolt模型部署到Amazon SageMaker平台,使其成为可扩展的生产级预测服务。

为什么选择SageMaker部署?

在本地运行预测模型适合开发和测试阶段,但在生产环境中会面临以下挑战:

  1. 扩展性问题:本地资源有限,难以应对高并发请求
  2. 可靠性问题:单点故障风险高
  3. 维护成本:需要自行管理基础设施

通过SageMaker部署模型可以解决这些问题:

  • 自动扩展:根据负载动态调整资源
  • 高可用性:内置故障转移机制
  • 托管服务:AWS负责底层基础设施管理
  • 无缝集成:可与AWS其他服务轻松对接

部署准备

环境配置

首先需要确保已安装最新版的SageMaker Python SDK:

!pip install -U -q sagemaker

模型选择

Chronos提供多个预训练模型变体,主要分为两类:

  1. Chronos-Bolt系列(推荐):

    • autogluon-forecasting-chronos-bolt-base:基础版
    • autogluon-forecasting-chronos-bolt-small:轻量版
  2. 原始Chronos系列

    • autogluon-forecasting-chronos-t5-small
    • autogluon-forecasting-chronos-t5-base
    • autogluon-forecasting-chronos-t5-large

注意:原始Chronos模型需要GPU支持,运行速度较慢且不支持协变量。对于大多数实际应用,推荐使用Chronos-Bolt系列。

模型部署步骤

1. 创建JumpStart模型

使用JumpStartModel类初始化模型配置:

from sagemaker.jumpstart.model import JumpStartModel

model_id = "autogluon-forecasting-chronos-bolt-base"

model = JumpStartModel(
    model_id=model_id,
    instance_type="ml.c5.2xlarge",  # CPU实例
    # role="your-sagemaker-execution-role"  # 可选:指定IAM角色
)

关键参数说明:

  • model_id:指定要使用的模型ID
  • instance_type:定义用于服务的AWS实例类型
    • CPU选项:ml.c5.2xlargeml.m5.xlarge
    • GPU选项:ml.g5.2xlarge

2. 部署模型端点

调用deploy()方法创建预测端点:

predictor = model.deploy()

部署过程通常需要几分钟,SageMaker会完成以下操作:

  1. 配置计算实例
  2. 加载模型
  3. 设置端点服务

重要提示:端点会持续产生费用,使用完毕后应手动删除以避免不必要的开支。

端点使用指南

基本预测请求

向端点发送包含历史时间序列数据的JSON格式请求:

payload = {
    "inputs": [
        {"target": [0.0, 4.0, 5.0, 1.5, -3.0, -5.0, -3.0, 1.5, 5.0, 4.0]},
    ],
    "parameters": {
        "prediction_length": 10
    }
}
response = predictor.predict(payload)

响应包含预测值及分位数信息:

{
    "predictions": [{
        "mean": [1.41, 1.5, 1.49],
        "0.1": [0.12, -0.08, -0.25],
        "0.5": [1.41, 1.5, 1.49],
        "0.9": [3.29, 3.82, 4.09]
    }]
}

多时间序列预测

可以同时预测多个时间序列,每个序列可包含唯一标识和时间信息:

payload = {
    "inputs": [
        {
            "target": [1.0, 2.0, 3.0, 2.0, 0.5],
            "item_id": "product_A",
            "start": "2024-01-01T01:00:00"
        },
        {
            "target": [5.4, 3.0, 3.0, 2.0, 1.5],
            "item_id": "product_B",
            "start": "2024-02-02T03:00:00"
        }
    ],
    "parameters": {
        "prediction_length": 5,
        "freq": "1h"
    }
}

使用协变量预测

Chronos-Bolt支持使用协变量(外生特征)提升预测精度:

payload = {
    "inputs": [{
        "target": [1.0, 2.0, 3.0, 2.0, 0.5],
        "past_covariates": {
            "temperature": [20, 22, 21, 23, 19],
            "promotion": ["No", "Yes", "Yes", "No", "No"]
        },
        "future_covariates": {
            "temperature": [18, 17, 16],
            "promotion": ["No", "Yes", "No"]
        }
    }],
    "parameters": {
        "prediction_length": 3,
        "covariate_model": "GBM"  # 可选的协变量模型
    }
}

数据格式转换

实际业务数据通常以长格式数据框存储,我们可以使用以下工具函数进行格式转换:

import pandas as pd

def df_to_payload(df, target_col, item_id_col=None, time_col=None):
    """将长格式数据框转换为端点请求格式"""
    payload = {"inputs": []}
    
    if item_id_col:
        groups = df.groupby(item_id_col)
    else:
        groups = [(None, df)]
    
    for item_id, group in groups:
        series = {"target": group[target_col].tolist()}
        if item_id:
            series["item_id"] = item_id
        if time_col:
            series["start"] = group[time_col].min().isoformat()
        payload["inputs"].append(series)
    
    return payload

def response_to_df(response):
    """将端点响应转换为数据框"""
    records = []
    for pred in response["predictions"]:
        item_id = pred.get("item_id", "default")
        for quantile, values in pred.items():
            if quantile not in ["item_id", "start"]:
                for i, value in enumerate(values):
                    records.append({
                        "item_id": item_id,
                        "timestamp": pred.get("start"),
                        "step": i+1,
                        "quantile": quantile,
                        "value": value
                    })
    return pd.DataFrame(records)

最佳实践与注意事项

  1. 数据要求

    • 每个时间序列至少包含30个观测值
    • 少于5个观测值将导致错误
    • 预测长度建议不超过64步
  2. 性能优化

    • 使用batch_size参数控制并行处理数量
    • 对于大批量预测,考虑使用异步端点
  3. 成本控制

    • 测试阶段使用CPU实例
    • 生产环境根据负载选择合适的实例类型
    • 不使用时应删除端点
  4. 模型选择

    • 简单场景使用Chronos-Bolt-small
    • 复杂模式使用Chronos-Bolt-base
    • 需要极高精度时考虑原始Chronos-large(需GPU)

总结

通过Amazon SageMaker部署Chronos时间序列预测模型,我们可以快速构建高可用、可扩展的预测服务。本文详细介绍了从模型选择、部署配置到实际使用的完整流程,并提供了处理实际业务数据的最佳实践。

Chronos-Bolt模型特别适合需要快速、准确预测的生产环境,其轻量级设计和协变量支持使其成为业务预测场景的理想选择。

chronos-forecasting chronos-forecasting 项目地址: https://gitcode.com/gh_mirrors/ch/chronos-forecasting

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓禄嘉Ernestine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值