ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

TDengine TDgpt 时序基础模型(TSFM)部署与集成实战:从 MaaS 服务搭建到 SQL 预测调用

TDengine TDgpt 时序基础模型(TSFM)部署与集成实战:从 MaaS 服务搭建到 SQL 预测调用 TDengine TDgpt 时序基础模型TSFM部署与集成实战从 MaaS 服务搭建到 SQL 预测调用【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine时序基础模型Time Series Foundation ModelTSFM为时序数据分析提供了区别于统计分析、机器学习与深度学习模型的另一类可选能力。本文以 TDgpt 中 Time-MoE 模型的完整接入流程为主线详细讲解六种开源时序基础模型的环境准备、服务部署、模型适配注册与 SQL 调用方式并结合仓库源码说明 MaaS 服务与 TDgpt 之间的调用协议与配置机制。读完本文你将能够在 TDengine 分析节点anode上独立部署时序基础模型服务并通过FORECAST、IMPUTE等 SQL 函数直接调用其时序预测与补值能力。一、TDgpt 支持的时序基础模型总览自 TDgptv3.3.6.4起已陆续支持六种时序基础模型涛思时序基础模型TDtsfm v1.0、Time-MoE、Chronos、Moirai、TimesFM、Moment。其中安装包内置了 TDtsfm 与 Time-MoE 两个模型若使用其余模型需要在本地部署对应服务。第三方模型服务脚本位于 TDgpt 安装根目录下的lib/taosanalytics/tsfmservice/仓库中对应 tools/tdgpt/taosanalytics/tsfmservice/包含timemoe-server.py、moirai-server.py、chronos-server.py、timesfm-server.py、moment-server.py、tdtsfm-server.py。TDtsfm 由安装包内置服务提供不在此目录以独立*-server.py形式列出。下表列出各适配文件及能力未勾选项可能是模型本身不支持也可能是尚未适配模型文件模型名称参数 (亿)大小 (MiB)单变量预测协变量预测多变量预测异常检测补值timemoetimemoe-server.pyMaple728/TimeMoE-50M0.50227✔✘✘✘✘timemoetimemoe-server.pyMaple728/TimeMoE-200M4.53906✔✘✘✘✘moiraimoirai-server.pySalesforce/moirai-moe-1.0-R-small1.17469✔✔✘✘✘moiraimoirai-server.pySalesforce/moirai-moe-1.0-R-base9.353,740✔✔✘✘✘chronoschronos-server.pyamazon/chronos-bolt-tiny0.0935✔✘✘✘✘chronoschronos-server.pyamazon/chronos-bolt-mini0.2185✔✘✘✘✘chronoschronos-server.pyamazon/chronos-bolt-small0.48191✔✘✘✘✘chronoschronos-server.pyamazon/chronos-bolt-base2.05821✔✘✘✘✘timesfmtimesfm-server.pygoogle/timesfm-2.0-500m-pytorch4.992,000✔✘✘✘✘momentmoment-server.pyAutonLab/MOMENT-1-small0.38152✘✘✘✘✔momentmoment-server.pyAutonLab/MOMENT-1-base1.13454✘✘✘✘✔momentmoment-server.pyAutonLab/MOMENT-1-large3.461,039✘✘✘✘✔从功能划分看Time-MoE、Chronos、TimesFM 主要提供单变量预测Moirai 额外支持历史协变量预测Moment 则专用于缺失值补值imputation对应 TDgpt 中的imputat算法模块源码见 tools/tdgpt/taosanalytics/algo/imputat/moment.py。下文将以支持 Time-MoE 模型为例说明如何将一个独立部署的 MaaS 服务整合到 TDgpt 中并通过 SQL 语句调用其时序数据分析能力。整体流程可概括为准备环境 → 启动模型服务 → 校验服务状态 → 注册模型适配代码 → 配置服务地址 → 重启节点并刷新缓存 → SQL 调用。二、准备运行环境要运行时序基础模型需要先在本地部署支持其运行的 Python 环境。建议准备一个干净的虚拟环境并使用pip安装必要的依赖包pip install torch2.3.1cpu -f https://download.pytorch.org/whl/torch_stable.html pip install flask3.0.3 pip install transformers4.40.0 pip install accelerate上述命令安装的是 CPU 驱动版本的 PyTorch。如果服务部署在具有 GPU 的服务器上可以在虚拟环境中安装支持 GPU 加速的 PyTorch例如pip install torch2.3.1 -f https://download.pytorch.org/whl/torch_stable.html你可以复用 TDgpt 自带的虚拟环境也可以新创建一个虚拟环境使用该虚拟环境前务必确认上述依赖包已正确安装。仓库中的各*-server.py脚本会自动检测硬件例如 timemoe-server.py 中device torch.device(cuda if torch.cuda.is_available() else cpu)即 GPU 可用时自动使用 GPU否则回退 CPU。三、以 Time-MoE 为例的完整部署流程3.1 设置时序基础模型服务地址TDgpt 安装根目录下的./lib/taosanalytics/tsfmservice/timemoe-server.py早期版本曾使用time-moe.py负责 Time-MoE 模型的部署与服务。该脚本基于 Flask 实现对外暴露POST /ds_predict接口app.route(/ds_predict, methods[POST]) def time_moe(): #...修改host参数为需要开启的 URL 服务地址或者使用默认值亦可app.run( host0.0.0.0, port6062, threadedTrue, debugFalse )其中的port可修改为希望开启的端口使用默认值 6062 亦可。完成之后重启服务即可。在仓库源码 timemoe-server.py 中服务监听参数已参数化--host默认0.0.0.0与--port默认6062因此也可以直接通过命令行参数指定而不必修改脚本。3.2 启动 Python 脚本⚠️ 如下启动服务的方式只针对v3.3.8.0之前的版本有效如果你使用的是v3.3.8.0及之后的版本请参考下文「动态下载时序模型」与「时序模型服务启动和停止脚本」。nohup python timemoe-server.py service_output.out 21 第一次启动脚本会从 HuggingFace 自动加载 0.5 亿参数模型Maple728/TimeMoE-50M。如果你需要部署参数规模更大的版本Maple728/TimeMoE-200M请将timemoe-server.py文件中的_model_list[0]修改为_model_list[1]即可。在仓库源码中模型列表定义为model_list [ Maple728/TimeMoE-50M, # time-moe model with 50M parameters Maple728/TimeMoE-200M, # time-moe model with 200M parameters ]如果加载失败例如网络原因无法访问 HuggingFace请先尝试执行如下命令切换为国内镜像下载模型export HF_ENDPOINThttps://hf-mirror.com然后再次尝试启动服务。仓库中的下载逻辑位于 tools/tdgpt/taosanalytics/misc/hf_download.pytimemoe-server.py通过snapshot_download_with_fallback实现镜像回源下载并支持断点续传resume_downloadTrue。检查service_output.out文件有如下输出则说明服务加载成功Running on all addresses (0.0.0.0) Running on http://127.0.0.1:60623.3 检查服务状态使用 Shell 命令可以验证服务是否正常curl 127.0.0.1:6062/ds_predict如果看到如下返回信息表明服务正常自此部署 Time-MoE 完成!doctype html html langen title405 Method Not Allowed/title h1Method Not Allowed/h1 pThe method is not allowed for the requested URL./p返回405 Method Not Allowed属预期行为/ds_predict仅接受POST方法GET请求被 Flask 拒绝但说明服务进程已正常运行。此时可通过POST携带 JSON 载荷完成真实预测请求。3.4 添加模型适配代码参考仓库中的 timemoe.py 文件进行 MaaS 服务适配。TDgpt 侧所有时序基础模型服务类均从TsfmBaseService继承而来# 所有的时序基础模型服务类均是从 TsfmBaseService 继承而来 class _TimeMOEService(TsfmBaseService): # 模型名称用户可根据需求定义该名称也是后续调用该模型的 key name timemoe-fc # 说明信息 desc (Time-MoE: Billion-Scale Time Series Foundation Models with Mixture of Experts; Ref. to https://github.com/Time-MoE/Time-MoE) def __init__(self): super().__init__() # 如果配置文件中没有设置服务 URL 地址这里使用默认地址 if self.service_host is None: self.service_host http://127.0.0.1:6062/ds_predict def execute(self): # 检查是否支持历史协变量分析如果不支持触发异常。time-moe 不支持历史协变量分析因此触发异常 if len(self.past_dynamic_real): raise ValueError(covariate forecast is not supported yet) # 调用父类的 execute 方法 super().execute()将代码添加到/usr/local/taos/taosanode/lib/taosanalytics/algo/fc目录下。你可以在该路径下找到timemoe.py文件该文件即为系统内置的支持 Time-MoE 的适配文件仓库源码位于 tools/tdgpt/taosanalytics/algo/fc/timemoe.py。TDgpt 已经内置 Time-MoE 模型的支持能够使用 Time-MoE 的能力进行时序数据预测分析。执行show anodes full可以看到 Time-MoE 的预测服务timemoe-fc。源码级原理说明TsfmBaseService定义于 tools/tdgpt/taosanalytics/algo/tsfm.py它继承自AbstractForecastService。其execute()方法会组装如下 JSON 请求体并通过requests.post发送到模型服务data { input: self.list, # 输入时间序列数据 ts: self.ts_list, # 时间戳列表 next_len: self.rows, # 预测长度 past_dynamic_real: self.past_dynamic_real, # 历史协变量 dynamic_real: self.dynamic_real, # 未来协变量 conf_interval: self.conf, # 置信区间 }服务端返回200时父类会把output以及可选的lower/upper置信区间组装成 TDgpt 标准结果结构再通过insert_ts_list按起始时间戳与时间步长生成预测结果序列返回404时则判定为无效的服务地址。这正是各*-server.py中/ds_predict路由处理逻辑如 timemoe-server.py所对应的协议接收input、next_len等字段返回{status: success, output: [...]}。另外TsfmBaseService.set_params()支持在 SQL 调用时通过host参数动态指定服务地址自动补齐http://前缀。get_status()则通过requests.get探测服务连通性用于在show anodes full中展示服务可用状态。3.5 设置模型服务地址修改/etc/taos/taosanode.config.py中模型服务地址早期版本曾使用taosanode.ini的[tsfm-service]段timemoe_fc http://127.0.0.1:6062/ds_predict添加服务的地址。此时key是模型的名称即timemoe-fcvalue是 Time-MoE 本地服务的地址http://127.0.0.1:6062/ds_predict。然后重启 taosnode 服务并更新服务端算法缓存列表update all anodes之后即可通过 SQL 语句调用 Time-MoE 的时间序列数据预测服务。配置读取机制TDgpt 的配置类Configure是单例见 tools/tdgpt/taosanalytics/conf.py默认配置文件路径为/etc/taos/taosanode.config.py通过get_tsfm_service(service_name)按模型名读取服务地址。值得说明的是新版配置还支持通过models字典自动推导服务地址配置项models[模型名][port]、models[模型名][endpoint]默认/ds_predict、models[模型名][ip]默认127.0.0.1共同拼出http://ip:port/endpoint并以algo_name如tdtsfm_1、timemoe-fc作为配置 key实现「模型配置即服务地址」的单一数据源管理。3.6 通过 SQL 调用基础模型预测能力配置完成并刷新缓存后即可在 TDengine 中使用 SQL 调用 Time-MoE 的预测能力SELECT FORECAST(val, algotimemoe-fc) FROM foo;其中val为待预测的时序列algotimemoe-fc指定使用注册的 Time-MoE 预测服务foo为包含时序数据的表超级表/子表或普通表均可。如需在调用时临时指定服务地址还可追加host参数由TsfmBaseService.set_params支持。四、部署其他时序基础模型模型在本地部署服务以后在 TDgpt 中注册的逻辑与 Time-MoE 类似只需要修改类名称和模型服务名称Key、设置正确的服务地址即可。Chronos、TimesFM 等时序基础服务的适配文件已默认提供v3.3.6.4及之后版本的用户只需要在本地启动相应的服务即可。各模型的注册名与源码位置如下chronos预测服务见 tools/tdgpt/taosanalytics/algo/fc/chronos.pymoirai预测服务支持协变量见 tools/tdgpt/taosanalytics/algo/fc/moirai.pytimesfm预测服务见 tools/tdgpt/taosanalytics/algo/fc/timesfm.pymoment补值服务继承AbstractImputationService见 tools/tdgpt/taosanalytics/algo/imputat/moment.py。4.1 启动 moirai 服务为避免依赖库冲突建议准备干净的 Python 虚拟环境在虚拟环境中安装依赖库pip install torch2.3.1cpu -f https://download.pytorch.org/whl/torch_stable.html pip install uni2ts pip install flask在 moirai-server.py 文件中配置服务地址配置方式见上文并设置加载的模型如果需要_model_list [ Salesforce/moirai-moe-1.0-R-small, # small model with 117M parameters Salesforce/moirai-moe-1.0-R-base, # base model with 205M parameters ] pretrained_model MoiraiMoEModule.from_pretrained( _model_list[0] # 默认加载 small 模型改成 1 即加载 base 模型 ).to(device)执行命令启动服务首次启动会自动下载模型文件如果下载速度太慢可使用国内镜像设置方式见上文nohup python moirai-server.py service_output.out 21 检查服务状态的方式同 3.3 节。4.2 启动 chronos 服务在干净的 Python 虚拟环境中安装依赖库pip install torch2.3.1cpu -f https://download.pytorch.org/whl/torch_stable.html pip install chronos-forecasting pip install flask在 chronos-server.py 文件中设置服务地址并设置加载的模型。你也可以使用默认值def main(): app.run( host0.0.0.0, port6063, threadedTrue, debugFalse )_model_list [ amazon/chronos-bolt-tiny, # 9M parameters, based on t5-efficient-tiny amazon/chronos-bolt-mini, # 21M parameters, based on t5-efficient-mini amazon/chronos-bolt-small, # 48M parameters, based on t5-efficient-small amazon/chronos-bolt-base, # 205M parameters, based on t5-efficient-base ] model BaseChronosPipeline.from_pretrained( _model_list[0], # 默认加载 tiny 模型修改数值就可以调整加载启动的模型 device_mapdevice, torch_dtypetorch.bfloat16, )在 shell 中执行命令启动服务nohup python chronos-server.py service_output.out 21 4.3 启动 timesfm 服务在干净的 Python 虚拟环境中安装依赖库pip install torch2.3.1cpu -f https://download.pytorch.org/whl/torch_stable.html pip install timesfm pip install jax pip install flask3.0.3调整 timesfm-server.py 文件中设置服务地址如果需要然后执行下述命令启动服务nohup python timesfm-server.py service_output.out 21 4.4 启动 moment 服务在干净的 Python 虚拟环境中安装依赖库pip install torch2.3.1cpu -f https://download.pytorch.org/whl/torch_stable.html pip install transformers4.33.3 pip install numpy1.25.2 pip install matplotlib pip install pandas1.5 pip install scikit-learn pip install flask3.0.3 pip install momentfm调整 moment-server.py 文件中设置服务地址如果需要然后执行下述命令启动服务nohup python moment-server.py service_output.out 21 Moment 是 TDgpt 中用于缺失值补值的模型注册名为moment对应 SQL 函数为IMPUTE。其请求体除input、ts外还包含freq默认H与precision默认ms两个频率与时间精度参数均可在 SQL 调用时通过参数覆盖见 moment.py 的set_params。五、时序模型服务启动与停止脚本为便于启停时序基础模型服务自v3.4.0.0起提供统一的启动脚本start-model.sh与停止脚本stop-model.sh用于一键启动或停止指定或全部时序基础模型服务。5.1 启动脚本start-model.sh用于启动指定或全部时序基础模型服务。当前脚本本身只保留 Linux 入口命令内部会统一委托taosanode_service.py读取taosanode.config.py再根据模型名称选择对应的 Python 虚拟环境并启动模型服务。入口脚本固定使用安装目录下主venv的 Python不再回退到系统PATH仓库实现见 tools/tdgpt/script/start-model.sh其中resolve_python依次探测install_dir/venv/bin/python3与python。使用root安装完成后可在tdgpt根目录/bin/目录下找到该脚本安装过程通常会创建软链接/usr/bin/start-model便于全局调用。默认日志输出到/var/log/taos/taosanode/目录下的taosanode_service_model_name.log文件中。用法说明用法/usr/bin/start-model [-c 配置文件] [模型名|all] 支持的模型名tdtsfm, timesfm, timemoe, moirai, chronos, moment选项说明-c 配置文件 指定配置文件默认install_dir/cfg/taosanode.config.py找不到时回退 /etc/taos/taosanode.config.py -h, --help 显示本帮助信息入口脚本不接受模型名以外的额外位置参数模型规模或本地路径等高级参数请参阅下文「动态下载时序模型」。使用示例在后台启动全部的模型服务/usr/bin/start-model all单独启动某个模型服务例如/usr/bin/start-model timesfm支持通过-c参数指定自定义配置文件未指定时默认优先使用install_dir/cfg/taosanode.config.py找不到时回退/etc/taos/taosanode.config.py例如/usr/bin/start-model -c /path/to/custom_taosanode.config.py5.2 停止脚本stop-model.sh用于一键停止指定或全部时序基础模型服务。当前脚本同样保留为 Linux 入口命令内部统一委托taosanode_service.py执行停止逻辑使用方式与启动脚本一致便于批量运维。使用示例停止 timesfm 服务/usr/bin/stop-model timesfm一键停止全部模型服务/usr/bin/stop-model all六、动态下载时序模型自v3.3.8.0起你可以在启动模型时指定不同规模的模型。直接运行[xxx]-server.py且不指定参数时通常按model_index0加载列表中的较小模型通过start-model或配置文件启动时以taosanode.config.py中各模型的default_model为准例如 Time-MoE 默认为Maple728/TimeMoE-200MChronos 默认为amazon/chronos-bolt-baseMOMENT 默认为AutonLab/MOMENT-1-base。此外如果你手动在本地下载了模型文件可以通过指定本地模型文件路径的方式运行已经下载完成的模型# 运行在本地目录 /var/lib/taos/taosanode/model/chronos 的 chronos-bolt-tiny 模型文件 # 如果指定目录不存在则自动下载模型文件到 /var/lib/taos/taosanode/model/chronos 目录下。 # 第三个参数表示下载模型文件时是否打开镜像推荐国内用户打开该选项 python chronos-server.py /var/lib/taos/taosanode/model/chronos/ amazon/chronos-bolt-tiny True仓库中的各服务脚本如 timemoe-server.py已将这一能力参数化-i, --model-index要加载的预训练模型在model_list中的下标默认0-f, --model-folder本地模型文件目录指定后若目录中不存在model.safetensors与config.json会自动下载到该目录--model-name必填-n, --model-nameHuggingFace 模型名用于配合--model-folder下载--enable-ep下载时启用国内镜像端点https://hf-mirror.com推荐国内用户开启--host/--port服务监听地址与端口默认0.0.0.0:6062。七、时序基础模型 transformers 版本要求各模型对transformers库的版本要求不同部署前请确保虚拟环境中的版本匹配避免因 API 差异导致加载失败模型名称transformers 版本time-moe、moirai、tdtsfm4.40chronos4.55moment4.33timesfmN/A这也解释了为什么建议为不同模型准备独立的虚拟环境例如 Time-MoE/Moirai/TDtsfm 需要transformers4.40.0而 Chronos 需要 4.55、Moment 需要 4.33混装同一环境极易发生版本冲突。八、总结TDgpt 将时序基础模型以「本地 MaaS 服务 算法适配层」的方式接入 TDengine*-server.py负责加载模型并提供/ds_predictHTTP 接口algo/fc与algo/imputat目录下的适配类继承TsfmBaseService/AbstractImputationService完成请求组装与结果回填taosanode.config.py则通过timemoe_fc这类 key 或models字典完成服务地址注册。部署任意新的时序基础模型只需依次完成搭建虚拟环境安装依赖 → 启动并校验模型服务 → 编写/复用适配类 → 配置服务地址 →update all anodes刷新缓存即可通过SELECT FORECAST(val, algo模型名) FROM ...一类 SQL 直接获得大模型时序分析能力。这一设计使得 TDgpt 能够以极低的接入成本持续吸收社区涌现的开源时序基础模型为 IIoT 场景下的时序预测与数据补值提供更丰富的算法选型。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表