目錄
Stock MLOps 以台股與美股歷史資料為基礎,實作完整的端到端 ML 系統,涵蓋 ETL 排程、模型訓練、版本管理、即時推理、漂移監控與 CI/CD,讓模型從訓練到部署全程可追蹤。
背景
機器學習課程中的模型往往停留在 Jupyter Notebook,缺乏生產化所需的版本管理、排程重訓與監控機制。這個專案以股價預測為主題,實作完整 MLOps 工作流,練習將實驗性代碼轉化為可維護的 ML 系統。
挑戰
需在單機 Docker Compose 環境中協調多個異質元件——Prefect 排程、Celery 非同步任務、Kafka 事件流、MLflow 模型版本管理、Evidently 漂移偵測與 Nginx 負載均衡——確保各元件在資料管線中正確串接,且推理與訓練請求能分流至不同後端。
解法
以 Docker Compose 統一部署,Nginx 負責路由分流,各元件職責單一:
- 以 MLflow 追蹤每次訓練實驗,管理模型版本與 artifact(存放於 MinIO)
- 以 Prefect 2 建置 ETL 排程,從 Yahoo Finance 爬取台股/美股資料並存入 ClickHouse
- 以 FastAPI + Scikit-learn 建置容器化推理 API,Nginx 依路由分流至預測/訓練後端
- 以 Celery + Redis 處理非同步訓練任務,Kafka 串接即時預測結果推送
- 以 Evidently + Prometheus + Grafana 建置資料漂移偵測與模型效能監控看板
- 以 GitHub Actions 建置 CI/CD,整合 pytest、Black、flake8 與 Discord 通知
架構圖
graph TD
U[User Browser] -->|"HTTP Requests"| NG[Nginx\nReverse Proxy]
NG -->|"/api/predict"| B1[backend1]
NG -->|"/api/train"| B2[backend2]
NG -->|"Static files"| Static[React Build]
B1 & B2 -->|"Query data"| CH[("ClickHouse")]
B1 & B2 -->|"Push task"| Redis[("Redis")]
subgraph ETL
Prefect[Prefect 2] -->|"Fetch + Clean"| CH
end
subgraph Training
Celery[Celery Worker] -->|"Read data"| CH
Celery -->|"Track"| MLflow[MLflow Registry]
MLflow -->|"Artifacts"| MinIO[("MinIO")]
end
Redis --> Celery
subgraph Monitoring
Prometheus --> Grafana
Evidently --> Prometheus
end
流程圖
flowchart TD
A(["使用者送出預測請求"]) --> B[Nginx 路由 /api/predict]
B --> C[FastAPI 推理 API]
C --> D[從 ClickHouse 取特徵]
D --> E[Scikit-learn 模型推理]
E --> F[推送結果至 Kafka]
F --> G(["回傳預測值"])
H(["Prefect 每日排程"]) --> I[Yahoo Finance 爬蟲]
I --> J[清洗 + 存入 ClickHouse]
J --> K[觸發 Celery 重訓任務]
K --> L[MLflow 記錄實驗]
L --> M[Evidently 漂移偵測]
成果
完成端到端 MLOps 工作流,涵蓋資料爬取、實驗追蹤、模型部署、漂移監控與 CI/CD,以台股(2330.TW)與美股(AAPL、TSM)為資料集驗證完整管線。
相關標籤
相關文章
LLM Assistant
arXiv 論文 RAG 平台:每日自動爬取 + 混合向量搜尋 + 雙語 Q&A + Grafana 監控。
Live English Tutor
即時語音 AI 英文家教:WebRTC 麥克風互動 + Gemini 即時糾錯 + 課後中文報告。
STT-TTS Unified
Edge TTS(322 語音)+ 本地 Whisper 的一站式語音平台,完全免費無需 API Key。