内置 OpenTS 时序大模型
KaiwuDB 预测分析引擎内置 OpenTS 时序大模型。用户可以通过 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 并写入相关数据。
步骤
设置预测分析引擎的域名及端口。
说明
域名和端口应与安装预测分析引擎时的配置保持一致,可通过
\cat /etc/hosts查看;端口默认为31000。SET CLUSTER SETTING ml.agent.addr = 'ml-domain-server:31000';启用内置时序大模型。
SET CLUSTER SETTING ml.enabled = true;激活内置时序大模型。
以下示例将
tsllm的第一个版本设置为活跃版本。SELECT kwdbml.set_active_version('tsllm', 1);调用内置时序大模型进行预测分析。
返回结果中,
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');
...
步骤
发起微调任务。
调用
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。查询微调任务状态。
SELECT * FROM kwdbml.jobs WHERE job_id = '550e8400-e29b-41d4-a716-446655440000';任务状态依次流转为
PENDING→RUNNING→SUCCEEDED/FAILED。等待状态变为SUCCEEDED后,再执行下一步。使用微调后的模型进行预测。
微调后的模型名称可自定义,微调完成后自动部署上线。以下示例使用微调后的模型
"tsllm-2"进行预测。SELECT kwdbml.predict( (SELECT array_agg(voltage) FROM sensor_monitoring.sensor_data) ) USING "tsllm-2";