文档下载建议反馈入口

  • 前提条件
  • 预测分析
  • 模型微调

内置 OpenTS 时序大模型

KaiwuDB 预测分析引擎内置 OpenTS 时序大模型open in new window。用户可以通过 KAT 或 SQL 语句调用内置时序大模型,对时序数据进行预测分析和模型微调。

  • 预测分析:支持同时对单个或多个变量进行预测。各变量独立预测,结果按输入列顺序返回,每个变量默认预测未来 100 步(即 100 个时间点)。
  • 模型微调:支持对内置时序大模型进行微调,使模型更好地适配特定业务场景的时序数据。微调完成后,模型自动部署上线,可立即用于预测。

当前版本存在以下限制:

  • 预测分析
    • 不支持自定义算法。
    • 仅支持自回归预测,不支持以多个变量作为输入预测目标变量(例如,根据气温、风速等预测天气类型)。
    • 输入列数最多 10 列,每列输入数据最多 50000 行。
  • 模型微调
    • 仅支持针对单列数据进行微调。
    • 输入数据量最多 50000 行;数据量超出上限可能导致微调耗时大幅增加或任务失败。
    • 建议在 GPU 环境下执行;无 GPU 环境下微调耗时将显著延长。

本文介绍如何使用 KaiwuDB 预测分析引擎的内置时序大模型进行预测分析和模型微调。

前提条件

  • 已部署并启动 KaiwuDB 数据库(V3.1.0 及以上版本)。
  • 安装 KaiwuDB 预测分析引擎,且满足以下环境要求:
    • Kubernetes 1.20 及以上版本。
    • Python 3.8、3.9 或 3.10。
  • 已创建目标时序库和时序表,并已写入相关数据。

预测分析

以下示例假设已在 ts_db 数据库中创建时序表 t1 并写入相关数据。

步骤

  1. 设置预测分析引擎的域名及端口。

    说明

    域名和端口应与安装预测分析引擎时的配置保持一致,可通过 \cat /etc/hosts 查看;端口默认为 31000

    SET CLUSTER SETTING ml.agent.addr = 'ml-domain-server:31000';
    
  2. 启用内置时序大模型。

    SET CLUSTER SETTING ml.enabled = true;
    
  3. 激活内置时序大模型。

    以下示例将 tsllm 的第一个版本设置为活跃版本。

    SELECT kwdbml.set_active_version('tsllm', 1);
    
  4. 调用内置时序大模型进行预测分析。

    返回结果中,n_variables 表示预测的变量数量,predictions 中的每个子数组对应一个输入变量的预测结果,顺序与输入列一致。

    • 单变量预测

      以下示例对 t1 时序表的 a 列进行预测分析。

      SELECT kwdbml.predict(array_agg(a)) USING tsllm FROM t1;
      

      预期输出:

      kwdbml.predict
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      {"n_variables": 1, "predictions": [489.11163330078125, 305.67230224609375, 522.8404541015625, 593.8882446289062, 366.367431640625, 815.3488159179688, 543.037353515625, 424.76812744140625, 468.74322509765625, 448.3457336425781, ...]}
      (1 row)
      
    • 多变量预测

      以下示例同时对 t1 时序表的 a 列和 b 列进行预测分析。各变量独立预测,结果按输入列顺序返回。

      SELECT kwdbml.predict(array_agg(a), array_agg(b)) USING tsllm FROM t1;
      

      预期输出:

      kwdbml.predict
      -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      {"n_variables": 2, "predictions": [[489.11163330078125, 305.67230224609375, 522.8404541015625, 593.8882446289062, 366.367431640625, 815.3488159179688, 543.037353515625, 424.76812744140625, 468.74322509765625, 448.3457336425781, ...], [262.2967224121094, 247.99717712402344, 198.07505798339844, 216.33871459960938, 264.9329833984375, 164.69932556152344, 283.3146667480469, 291.57794189453125, 157.2838897705078, 218.97805786132812, ...]]}
      (1 row)
      

模型微调

以下示例假设已创建 sensor_monitoring 时序数据库和 sensor_data 时序表,并向表中写入数据。

-- 创建数据库
CREATE TS DATABASE sensor_monitoring;

-- 创建时序表
CREATE TABLE sensor_monitoring.sensor_data (
    ts          TIMESTAMPTZ(3) NOT NULL,
    temperature FLOAT8,
    humidity    FLOAT8,
    voltage     FLOAT8
) TAGS (device_id INT4 NOT NULL, location VARCHAR(50) NOT NULL) PRIMARY TAGS (device_id);

-- 写入数据
INSERT INTO sensor_monitoring.sensor_data VALUES ('2024-01-01 00:00:00', 25.1, 60.2, 220.5, 1, 'room_a');
INSERT INTO sensor_monitoring.sensor_data VALUES ('2024-01-01 00:01:00', 25.3, 60.5, 221.0, 1, 'room_a');
...

步骤

  1. 发起微调任务。

    调用 kwdbml.fine_tune() 函数,指定要微调的模型名称、数据源表名和目标预测列。函数返回 job_id,用于后续查询任务状态。

    SELECT kwdbml.fine_tune(
        'tsllm',                           -- model_name
        'sensor_monitoring.sensor_data',   -- data_source
        'voltage'                          -- column_name
    );
    

    参数说明:

    参数类型说明
    model_nameSTRING要微调的内置时序大模型名称
    data_sourceSTRING数据源,格式为 数据库名.表名
    column_nameSTRING要预测的目标列名

    返回值:job_id,例如 550e8400-e29b-41d4-a716-446655440000

  2. 查询微调任务状态。

    SELECT * FROM kwdbml.jobs WHERE job_id = '550e8400-e29b-41d4-a716-446655440000';
    

    任务状态依次流转为 PENDINGRUNNINGSUCCEEDED / FAILED。等待状态变为 SUCCEEDED 后,再执行下一步。

  3. 使用微调后的模型进行预测。

    微调后的模型名称可自定义,微调完成后自动部署上线。以下示例使用微调后的模型 "tsllm-2" 进行预测。

    SELECT kwdbml.predict(
        (SELECT array_agg(voltage) FROM sensor_monitoring.sensor_data)
    ) USING "tsllm-2";