# 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 # 本文档 ``` ## 快速开始 ### 安装依赖 ```bash pip install -r requirements.txt ``` ### 启动服务 ```bash # 生产模式 bash start.sh # 开发模式(详细日志) bash start.sh dev ``` ### 查看状态 ```bash bash status.sh ``` ### 停止服务 ```bash bash stop.sh ``` ## API 接口 ### 1. 双膜预测接口 **POST** `/api/v1/process_model/double_membrance` **请求示例:** ```json { "data": [ { "datetime": "2025-10-29 10:00:00", "C.M.FT_ZGJJY1@out": 150.5, ... } ] } ``` **响应示例:** ```json { "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文档 服务启动后访问: - Swagger UI: http://localhost:7980/docs - ReDoc: http://localhost:7980/redoc ## 配置说明 编辑 `config.yaml` 文件调整参数: ```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调用示例 ```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调用示例 ```python import requests url = "http://localhost:7980/api/v1/process_model/double_membrance" response = requests.post(url, json={"data": [...]}) result = response.json() ``` ## 测试验证 ```bash # 测试导入 python test_import.py # 测试API curl http://localhost:7980/api/v1/process_model/test_double_membrance_from_file ``` ## 日志管理 ```bash # 实时查看日志 tail -f logs/api.log # 查看最近100行 tail -n 100 logs/api.log # 搜索错误 grep ERROR logs/api.log ``` ## 环境变量 ```bash # 设置日志级别 export LOG_LEVEL=INFO # 开启详细日志 export DETAILED_LOGS=true ``` ## 注意事项 1. 确保输入数据格式与训练数据一致 2. 生产环境建议使用 GPU 加速 3. 定期检查日志文件大小 4. 模型文件路径保持相对位置不变 ## 故障排查 ### 服务无法启动 ```bash # 检查端口占用 lsof -i:7980 # 查看日志 tail -f logs/api.log ``` ### GPU相关问题 切换到CPU模式,编辑 `config.yaml`: ```yaml device: use_cuda: false ``` ---