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, 凭据扫描, 可观测性平台, 实时流处理, 异常检测, 微电网, 数据中心能源管理, 数据工程, 数据湖架构, 无后门, 时间序列预测, 机器学习, 测试用例, 电力系统分析, 电气工程, 硕士论文项目, 请求拦截, 软件成分分析, 逆变器控制, 逆向工具, 遥测数据