zhanghao 1cad825443 1.更新20分钟预测模型 4 månader sedan
..
20min 1cad825443 1.更新20分钟预测模型 4 månader sedan
90day d869d1eb00 1:拆分超滤训练和开发版本 5 månader sedan
shared d869d1eb00 1:拆分超滤训练和开发版本 5 månader sedan
test_files 05d5ef48e5 1:项目结构修正 5 månader sedan
README.md d1a7231203 1:简化展示和优化数据传入记录 5 månader sedan
api_main.py d869d1eb00 1:拆分超滤训练和开发版本 5 månader sedan
config.yaml 78f25b83ab 增加代码逻辑,避免Nan值 5 månader sedan
requirements.txt d869d1eb00 1:拆分超滤训练和开发版本 5 månader sedan
start.sh 574c973f3b 1:项目结构修正 5 månader sedan
status.sh 574c973f3b 1:项目结构修正 5 månader sedan
stop.sh 574c973f3b 1:项目结构修正 5 månader sedan
test_import.py 574c973f3b 1:项目结构修正 5 månader sedan

README.md

GAT-LSTM TMP预测模型 API 服务

基于 GAT-LSTM 神经网络的跨膜压力(TMP)预测模型,提供 RESTful API 接口。

目录结构

gat-lstm_model/
├── 20min/                  # 20分钟短期预测模块
│   ├── __init__.py
│   ├── predict.py          # 预测器实现
│   ├── 20min_model.pth     # 训练好的模型权重
│   └── 20min_scaler.pkl    # 数据归一化器
│
├── 90day/                  # 90天长期预测模块
│   ├── __init__.py
│   ├── predict.py          # 预测器实现
│   ├── 90day_model.pth     # 训练好的模型权重
│   └── 90day_scaler.pkl    # 数据归一化器
│
├── shared/                 # 共享模块
│   ├── __init__.py
│   ├── gat_lstm.py         # GAT-LSTM模型结构
│   ├── args.py             # 命令行参数解析
│   ├── data_preprocessor.py  # 数据预处理
│   ├── data_trainer.py     # 模型训练工具
│   └── edge_index.pt       # 图结构边索引
│
├── test_files/             # 测试数据文件
│   └── pp.json
│
├── logs/                   # 日志目录
│   ├── api.log            # API服务日志
│   └── 20min_predict.log  # 预测日志
│
├── received_data/          # 接口接收数据存档
│   └── request_*.json     # 请求数据文件
│
├── api_main.py            # FastAPI主程序
├── config.yaml            # 配置文件
├── start.sh               # 启动脚本
├── stop.sh                # 停止脚本
├── status.sh              # 状态查询脚本
├── cleanup_old_files.sh   # 旧文件清理脚本
├── test_import.py         # 导入测试脚本
├── requirements.txt       # Python依赖
└── README.md             # 本文档

快速开始

安装依赖

pip install -r requirements.txt

启动服务

# 生产模式
bash start.sh

# 开发模式(详细日志)
bash start.sh dev

查看状态

bash status.sh

停止服务

bash stop.sh

API 接口

1. 双膜预测接口

POST /api/v1/process_model/double_membrance

请求示例:

{
  "data": [
    {
      "datetime": "2025-10-29 10:00:00",
      "C.M.FT_ZGJJY1@out": 150.5,
      ...
    }
  ]
}

响应示例:

{
  "success": true,
  "predict_result": [
    {
      "datetime": "2025-10-29 10:04:00",
      "C.M.UF1_DB@press_PV_Predicted": 25.3,
      ...
    }
  ]
}

2. 测试接口

GET /api/v1/process_model/test_double_membrance_from_file

从本地JSON文件加载测试数据进行预测。

API文档

服务启动后访问:

配置说明

编辑 config.yaml 文件调整参数:

model:
  seq_len: 10              # 输入序列长度
  output_size: 5           # 预测步长
  labels_num: 16           # 预测目标数量
  feature_num: 79          # 输入特征维度
  batch_size: 512          # 批处理大小

logging:
  level: 'INFO'            # 日志级别
  log_file: 'logs/20min_predict.log'

device:
  use_cuda: true           # 是否使用GPU
  cuda_device: 0           # GPU设备编号

直接调用预测器

Python调用示例

import sys
import os
import importlib.util
import pandas as pd

# 加载20分钟预测模块
model_dir = '/path/to/gat-lstm_model'
spec = importlib.util.spec_from_file_location(
    "predict_20min",
    os.path.join(model_dir, "20min", "predict.py")
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

# 使用预测器
predictor = module.Predictor()
df = pd.read_csv('input_data.csv')
predictions = predictor.predict(df)
result_df = predictor.save_predictions(predictions, start_date)

API调用示例

import requests

url = "http://localhost:7980/api/v1/process_model/double_membrance"
response = requests.post(url, json={"data": [...]})
result = response.json()

测试验证

# 测试导入
python test_import.py

# 测试API
curl http://localhost:7980/api/v1/process_model/test_double_membrance_from_file

日志管理

# 实时查看日志
tail -f logs/api.log

# 查看最近100行
tail -n 100 logs/api.log

# 搜索错误
grep ERROR logs/api.log

环境变量

# 设置日志级别
export LOG_LEVEL=INFO

# 开启详细日志
export DETAILED_LOGS=true

注意事项

  1. 确保输入数据格式与训练数据一致
  2. 生产环境建议使用 GPU 加速
  3. 定期检查日志文件大小
  4. 模型文件路径保持相对位置不变

故障排查

服务无法启动

# 检查端口占用
lsof -i:7980

# 查看日志
tail -f logs/api.log

GPU相关问题

切换到CPU模式,编辑 config.yaml

device:
  use_cuda: false