EngEleLuiz/datacenter-energy-platform

GitHub: EngEleLuiz/datacenter-energy-platform

面向数据中心微电网的端到端数据工程平台,集成实时遥测采集、Medallion数据湖架构与三类ML模型(异常检测、PUE预测、逆变器模式分类),用于监控分析Grid-Forming与Grid-Following逆变器运行状态。

Stars: 0 | Forks: 0

# ⚡ 数据中心能源智能平台 **硕士论文项目 — 电气工程(电力系统)** 圣卡塔琳娜联邦大学 · 弗洛里亚诺波利斯, 圣卡塔琳娜州, 巴西 ## 📋 目录 - [概述](#overview) - [架构](#architecture) - [ML 模型](#ml-models) - [本地技术栈](#local-stack) - [快速开始](#quick-start) - [项目结构](#project-structure) - [服务 URL](#service-urls) - [关键结果](#key-results) - [学术背景](#academic-context) - [许可证](#license) ## 仪表板可在此处查看: https://datacenter-energy-platform-nzqihcuimx7beqlqqfjhmt.streamlit.app/#a416fc4c ## 概述 该平台通过构建生产级的可观测性技术栈用于数据中心微电网分析,连接了**数据工程**和**电力系统研究**。它模拟、流式传输、处理并分析来自 100 台服务器、4 台 UPS 和 4 台在 Grid-Following (GFL) 和 Grid-Forming (GFM) 控制模式下运行的逆变器的遥测数据。 **核心研究问题:** ML 模型能否实时可靠地分类 GFL 与 GFM 逆变器运行模式,以及在孤岛事件期间哪些遥测特征最具辨别力? ### 关键能力 - **实时流传输** — Kafka pipeline 每 5 秒摄取 100+ 条记录 - **Medallion 数据湖** — 基于 MinIO/S3 的 Bronze → Silver → Gold 架构 - **三个 ML 模型** — 异常检测、PUE 预测 (LSTM)、GFL/GFM 分类器 - **全可观测性** — Airflow DAGs、MLflow 实验跟踪、Grafana 仪表板 - **云就绪** — Terraform 配置等效的 AWS 基础设施 (S3, Glue, Athena) ## 架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ DATA SOURCES │ │ ServerSimulator · UPSSimulator · InverterSimulator · Weather │ └─────────────────────────┬───────────────────────────────────────┘ │ 5-second intervals ▼ ┌─────────────────────────────────────────────────────────────────┐ │ STREAMING LAYER │ │ Apache Kafka (4 topics) │ │ dc.telemetry.servers · dc.telemetry.ups │ │ dc.telemetry.inverters · dc.telemetry.weather │ └─────────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ DATA LAKE (MinIO / S3) │ │ │ │ 🥉 Bronze Raw Parquet, partitioned by date, 30-day TTL │ │ 🥈 Silver Schema-validated, enriched, versioned │ │ 🥇 Gold Aggregated KPIs, 15-min windows → PostgreSQL │ └─────────────────────────┬───────────────────────────────────────┘ │ Airflow DAG (every 15 min) ▼ ┌─────────────────────────────────────────────────────────────────┐ │ ML & ANALYTICS LAYER │ │ │ │ Anomaly Detection → Random Forest (F1=0.83, AUC=0.93) │ │ PUE Forecasting → LSTM (MAE=0.000126, MAPE=0.013%) │ │ GFL/GFM Classifier → Random Forest (AUC=0.98, CV F1=0.69) │ └─────────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ PRESENTATION LAYER │ │ Streamlit Dashboard · Grafana · MLflow UI │ └─────────────────────────────────────────────────────────────────┘ ``` ## ML 模型 | 模型 | 算法 | 目标 | 关键指标 | |---|---|---|---| | 异常检测 | Random Forest + Isolation Forest | 服务器故障(热、电源、僵尸) | AUC=0.93 · F1=0.83 · 阈值=0.34 | | PUE 预测(基线) | LSTM (2层, hidden=64) | 数据中心 PUE,1小时范围 | MAE=0.000126 · MAPE=0.013% | | PUE 预测(多变量) | LSTM + Temporal Attention (20特征, hidden=128) | 融合天气 + 能源价格的 PUE | MAE, RMSE, R² 通过 MLflow 记录 | | GFL/GFM 分类器 | Random Forest (多类) | GFL / GFM / 过渡中 | AUC=0.98 · CV F1=0.69 | ### 模型设计决策 **异常检测 — 为什么选择 Random Forest 而不是 Isolation Forest?** 两者都经过了评估。Isolation Forest 达到了 ROC-AUC=0.84,但在细微故障上 F1=0.12。监督式 Random Forest 通过利用可用的真实标签达到了 AUC=0.93 和 F1=0.83。在生产中,Isolation Forest 将补充 RF 以检测训练中从未见过的新故障模式。 **GFL/GFM 分类器 — 为什么 CV F1=0.69?** 较低的 macro F1 反映了分类 `transitioning`(过渡中)状态的难度,该状态仅持续 3-8 个 tick,并且与 GFL 和 GFM 共享特征。GFL 和 GFM 类别单独达到了 F1 > 0.90。这在学术上很有趣:过渡状态正是逆变器最脆弱的时候,准确检测此窗口是核心贡献。 ## 本地技术栈 本地 Docker 环境镜像了生产云技术栈: | 本地服务 | 云等效 | 用途 | |---|---|---| | MinIO | AWS S3 | 数据湖对象存储 | | Kafka | AWS Kinesis | 实时遥测流传输 | | PostgreSQL | AWS RDS | Gold 层 KPI 存储 | | Airflow | AWS MWAA | Pipeline 编排 | | MLflow | AWS SageMaker Experiments | ML 实验跟踪 | | Grafana | AWS CloudWatch | 运维仪表板 | | Streamlit | AWS EC2 / ECS | 商业智能仪表板 | ## 快速开始 ### 前置条件 - Docker Desktop ≥ 4.x - Python 3.11(推荐 Anaconda) - Git ### 1. 克隆并设置环境 ``` git clone https://github.com//datacenter-energy-platform.git cd datacenter-energy-platform conda create -n coding python=3.11 -y conda activate coding pip install confluent-kafka pandas numpy scipy loguru python-dotenv \ jupyterlab plotly matplotlib seaborn scikit-learn xgboost \ torch mlflow joblib ``` ### 2. 启动基础设施 ``` docker compose up -d ``` 等待约 2 分钟,然后验证所有服务是否正在运行: ``` docker compose ps ``` 预期:8 个容器状态为 `Up`(airflow-init 将显示 `Exited (0)` — 这是正确的)。 ### 3. 启动数据流传输 ``` python -m ingestion.kafka_producer ``` 打开 [Kafka UI](http://localhost:8090) 以查看 4 个 topic 实时填充数据。 ### 4. 运行 notebooks ``` jupyter lab ``` 按顺序运行 notebooks: 1. `notebooks/01_eda_datacenter.ipynb` — 探索性数据分析 2. `notebooks/02_anomaly_detection.ipynb` — 异常检测 (RF + IF) + SHAP 3. `notebooks/03_gfm_gfl_classifier.ipynb` — 逆变器模式分类 4. `notebooks/04_pue_forecasting.ipynb` — 基线 LSTM + 融合外部数据的多变量 LSTM ### 5. 运行测试 ``` pytest tests/test_simulators.py -v ``` ## 项目结构 ``` datacenter-energy-platform/ │ ├── data_generator/ │ ├── server_simulator.py # 100-server telemetry with fault injection │ ├── ups_inverter_simulator.py # UPS + GFL/GFM inverter dynamics (VSM, black-start, │ │ # harmonics, droop, weak-grid) │ ├── weather_api.py # Open-Meteo API (Florianópolis, SC) │ └── external_data_fetcher.py # Weather + solar irradiance + energy price (CCEE PLD) │ # fused into multivariate LSTM features ← NEW │ ├── analysis/ │ ├── __init__.py │ ├── stability_analysis.py # Bode / Nyquist / Middlebrook criterion, PM & GM │ │ # vs SCR sweep for GFL vs GFM ← NEW │ └── shap_explainer.py # SHAP TreeExplainer wrapper, waterfall/beeswarm │ # figures, auto-diagnosis engine ← NEW │ ├── ingestion/ │ └── kafka_producer.py # Streams all simulators to Kafka │ ├── airflow_dags/ │ └── datacenter_pipeline.py # Bronze→Silver→Gold ETL + drift detection │ ├── ml/ │ ├── anomaly_model.pkl # Anomaly detector (Random Forest) │ ├── anomaly_scaler.pkl │ ├── anomaly_features.json │ ├── gfm_classifier.pkl # GFL/GFM classifier (Random Forest) │ ├── gfm_scaler.pkl │ ├── gfm_label_encoder.pkl │ ├── gfm_features.json │ ├── pue_lstm_best.pt # Baseline LSTM weights (8 features, hidden=64) │ ├── pue_feat_scaler.pkl │ ├── pue_tgt_scaler.pkl │ ├── pue_config.json │ ├── pue_lstm_multivariate_best.pt # Multivariate LSTM (20 features, attention) ← NEW │ ├── pue_feat_scaler_mv.pkl ← NEW │ ├── pue_tgt_scaler_mv.pkl ← NEW │ └── pue_config_mv.json ← NEW │ ├── notebooks/ │ ├── 01_eda_datacenter.ipynb │ ├── 02_anomaly_detection.ipynb # + SHAP explainability cells ← UPDATED │ ├── 03_gfm_gfl_classifier.ipynb │ └── 04_pue_forecasting.ipynb # + Multivariate LSTM cells ← UPDATED │ ├── dashboard/ │ └── app.py # 8-page Streamlit dashboard ← UPDATED │ # ① Virtual Inertia ② Black-Start │ # ③ Harmonics ④ Droop ⑤ Weak-Grid │ # ⑥ SHAP Explainability ← NEW │ # ⑦ Weather & Energy Price ← NEW │ # ⑧ Bode / Nyquist ← NEW │ ├── infra/ │ ├── main.tf # AWS S3, Glue, Athena, IAM, CloudWatch │ ├── variables.tf │ └── outputs.tf │ ├── tests/ │ └── test_simulators.py # 15 unit tests (pytest) │ ├── docker/ │ ├── postgres-init.sh # Creates airflow/mlflow/datacenter_gold DBs │ └── Dockerfile.streamlit │ ├── docker-compose.yml ├── requirements.txt ├── .env ├── .pre-commit-config.yaml └── .github/workflows/ci.yml # GitHub Actions: lint + pytest + smoke tests ``` ## 服务 URL | 服务 | URL | 凭证 | |---|---|---| | Streamlit 仪表板 | http://localhost:8501 | — | | Airflow | http://localhost:8081 | admin / admin123 | | MLflow | http://localhost:5000 | — | | MinIO 控制台 | http://localhost:9001 | minioadmin / minioadmin | | Kafka UI | http://localhost:8090 | — | | Grafana | http://localhost:3000 | admin / admin123 | | PostgreSQL | localhost:5432 | admin / admin123 | | Kafka Broker | localhost:29092 | — | ## 关键结果 ### 模拟器真实度 | 参数 | 值 | 依据 | |---|---|---| | 服务器空闲功耗 | 45–80 W | ASHRAE 热指南 | | 服务器 TDP 范围 | 150–350 W | Intel/AMD 服务器 CPU | | 日间高峰 | 14:00 UTC | 典型业务时段模式 | | PUE 目标 | ~1.002 | 顶尖超大规模厂商 | | 故障率 | 1–5% | 每次实验可配置 | ### GFL vs GFM 逆变器动态 | 指标 | GFL | GFM | 标准 | |---|---|---|---| | 平均 ROCOF(正常) | 0.054 Hz/s | 0.063 Hz/s | IEEE 1547: < 0.5 Hz/s | | THD(正常) | ~2.5% | ~3.3% | IEEE 519: < 5% | | ROCOF(孤岛) | > 2 Hz/s | < 0.5 Hz/s | 关键论文发现 | | 孤岛稳定性 | ❌ 不稳定 | ✅ 稳定 | VSM 虚拟惯量 | **关键发现:** 在正常并网运行中,GFL 和 GFM 表现出相似的 ROCOF 和 THD。关键区别出现在孤岛事件期间,GFL 失去 PLL 同步(ROCOF > 2 Hz/s),而 GFM 通过虚拟同步机动态保持频率稳定。这验证了 GFM 逆变器为数据中心微电网提供卓越弹性的论文假设。 ### Pipeline 性能 | 阶段 | 记录数/tick | 延迟 | 保留期 | |---|---|---|---| | Kafka 摄取 | ~106 条记录 | < 100 ms | 24 小时 | | Bronze 写入 | ~106 条记录 | < 2 s | 30 天 | | Silver 转换 | 15分钟批次 | ~10 s | 版本化 | | Gold 聚合 | 15分钟 KPI | ~5 s | 永久 | ## 学术背景 该项目支持关于 **数据中心微电网中 Grid-Forming 逆变器集成** 的研究,有助于解决以下开放性问题: 1. **可观测性:** 数据工程技术栈能否提供足够的遥测分辨率(5秒间隔)来捕捉 GFL→GFM 过渡动态? 2. **分类:** ML 模型能否使用电气遥测特征可靠地区分逆变器运行模式,从而实现自动化电网事件检测? 3. **相关性:** IT 负载模式(CPU 利用率、功耗)与微电网稳定性指标(ROCOF、频率偏差)之间是否存在统计学上的显著相关性? 4. **预测性维护:** 基于 LSTM 的 PUE 预测能否为能源优化决策提供可操作的 1 小时提前预测? ### 相关工作 - IEEE 1547-2018: *分布式能源并网及互操作性标准* - IEEE 519-2022: *电力系统谐波控制推荐规范* - ASHRAE TC 9.9: *数据处理环境热指南* ## AWS 部署 要部署云基础设施: ``` cd infra terraform init terraform plan terraform apply ``` 这将配置: - S3 buckets (bronze / silver / gold / mlflow-artifacts) - AWS Glue Catalog + crawler(自动发现 Silver schema) - Athena workgroup(1 GB 查询限制) - IAM 角色(Glue + 应用角色) - CloudWatch log group **预估费用:** 开发工作负载约为 ~$15–30/月。 ## CI/CD 每次推送到 `main` 时运行 GitHub Actions: 1. **Lint** — ruff + black 格式检查 2. **Test** — pytest 及覆盖率报告 3. **Smoke test** — 验证模拟器生成有效的 JSON 输出 4. **Docker** — 验证 `docker-compose.yml` 语法 ## 许可证 MIT License — 详情见 [LICENSE](LICENSE)。 *Built with ❤️ for the intersection of data engineering and power systems research.* *弗洛里亚诺波利斯, 圣卡塔琳娜州, 巴西 · 2026*
标签:Apache Airflow, Apache Kafka, Apex, AWS, DPI, ECS, Grafana, Grid-Following, Grid-Forming, Kubernetes, LSTM, MinIO, MLflow, PMD, PUE 预测, Python, Terraform, 凭据扫描, 可观测性平台, 实时流处理, 异常检测, 微电网, 数据中心能源管理, 数据工程, 数据湖架构, 无后门, 时间序列预测, 机器学习, 测试用例, 电力系统分析, 电气工程, 硕士论文项目, 请求拦截, 软件成分分析, 逆变器控制, 逆向工具, 遥测数据