返回目錄
A
洞察決策:大數據分析實務手冊 - 第 5 章
第五章 模型部署與監控
發布於 2026-02-28 18:24
# 第五章 模型部署與監控
> 本章將帶你從「模型開發」走向「產品落地」,並學會如何確保模型在真實環境中持續表現。\n
> 章節重點:容器化、CI/CD、漂移偵測、A/B 測試、回饋迴圈,並以案例說明如何把模型變成企業價值的「動態資產」。
---
## 5.1 為什麼要部署?
- **價值實現**:模型若不部署,僅是紙上談兵。部署是把洞察轉為可執行行動的關鍵環節。
- **可重複性**:部署流程標準化,可在多個環境重複使用,減少人為差錯。
- **可監控性**:部署後可持續追蹤模型表現,及時偵測漂移與失效。
> **小結**:部署不是最後一步,而是「模型生命週期」中的關鍵節點,直接影響商業效益與用戶體驗。
## 5.2 容器化:Docker + Kubernetes
| 步驟 | 說明 |
|---|---|
| 1️⃣ **建置 Dockerfile** | 把模型、依賴、環境設定打包為容器鏡像。 |
| 2️⃣ **多階段建置** | 第一階段安裝依賴與編譯,第二階段拷貝模型,減少鏡像體積。 |
| 3️⃣ **容器註冊** | 推送至私有或公有 registry(如 Docker Hub、AWS ECR)。 |
| 4️⃣ **K8s 部署** | 使用 Deployment + Service 定義,實現水平擴容。 |
### Dockerfile 範例
dockerfile
# 1️⃣ 建構階段
FROM python:3.10-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 2️⃣ 產出階段
FROM python:3.10-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.10/site-packages ./lib
COPY model.pkl .
COPY api.py .
ENV PYTHONPATH=/app/lib
CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8080"]
> **Tip**:將預測 API 使用 FastAPI + Uvicorn,可自動產生 OpenAPI 文檔,利於前端整合。
## 5.3 CI/CD Pipeline(GitHub Actions + Argo CD)
1️⃣ **CI**:每次 push 觸發
- 代碼 lint (flake8, black)
- 單元測試(pytest)
- 數據驗證(Great Expectations)
- 打包 Docker 映像
2️⃣ **CD**:推送到 Registry,Argo CD 監控變更,自動同步到 Kubernetes
yaml
# .github/workflows/ci.yml
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.10
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest tests/
- name: Build Docker image
run: docker build -t myregistry/model:${{ github.sha }} .
- name: Push Docker image
run: |
echo ${{ secrets.REGISTRY_PASSWORD }} | docker login myregistry --username ${{ secrets.REGISTRY_USER }} --password-stdin
docker push myregistry/model:${{ github.sha }}
> **關鍵**:CI 只檢查模型行為,CD 則確保環境一致,兩者合起來大幅降低「藍綠部署」風險。
## 5.4 監控:Prometheus + Grafana + MLflow
- **Prometheus**:收集容器指標(CPU、Memory、Request Latency)。
- **Grafana**:可視化 dashboard,設定告警。
- **MLflow Tracking**:記錄每一次推理請求的特徵、預測值與真實值,方便回溯。
### 監控範例
yaml
# prometheus.yml
scrape_configs:
- job_name: 'model_api'
metrics_path: '/metrics'
static_configs:
- targets: ['model-service:8080']
> **Alert**:若 request latency 超過 200ms 連續 3 次,觸發 Slack 通知。
## 5.5 漂移偵測(Concept Drift)
### 5.5.1 監測指標
| 指標 | 目的 |
|---|---|
| Population Stability Index (PSI) | 監測特徵分佈變化 |
| Prediction Error Drift | 監測預測誤差上升 |
| Kullback–Leibler Divergence | 監測多維分佈變化 |
### 5.5.2 實作範例
python
import numpy as np
from sklearn.metrics import mean_absolute_error
# 舊資料
X_old = np.load('old_features.npy')
# 新資料
X_new = np.load('new_features.npy')
psi = compute_psi(X_old, X_new)
if psi > 0.1:
print('警告:特徵分佈漂移')
> **策略**:漂移偵測到後,先做「小幅 retrain」或「模型回滾」;若漂移嚴重,則重新蒐集新標籤資料。
## 5.6 A/B 測試:線上驗證
1️⃣ **設計**:將流量分為兩組,A 組使用舊模型,B 組使用新模型。
2️⃣ **指標**:業務 KPI(如 Conversion Rate)與技術 KPI(Latency)。
3️⃣ **統計檢定**:使用 Chi‑Square 或 t‑test,確保差異顯著。
### A/B 測試流程圖
[Traffic] --> {A: 50% -> Model v1, B: 50% -> Model v2} --> {Metrics} --> {Statistical Test}
> **結論**:A/B 測試不僅驗證模型效能,更能洞察模型對業務的真實影響,降低「模型失敗」風險。
## 5.7 回饋迴圈:持續改進
| 步驟 | 內容 |
|---|---|
| 1️⃣ 收集實際輸出 | 與使用者互動時收集真實標籤。 |
| 2️⃣ 資料清洗 | 轉換成訓練可用格式。 |
| 3️⃣ 模型再訓練 | 以批次或增量方式更新。 |
| 4️⃣ 重新部署 | 透過 CI/CD 自動部署新版。 |
> **實務提示**:將回饋流程整合至 MLOps 平台,確保「一次部署」即涵蓋「一次學習」。
## 5.8 商業價值落地:案例總結
### 案例:線上零售客戶推薦
- **部署**:使用 Docker + Kubernetes,模型容器化,水平擴容滿足 1M 日訪問。 |
- **監控**:Grafana dashboard 顯示即時 CTR 與 latency。 |
- **漂移**:每週檢測 PSI,發現節慶期間特徵漂移,進行增量 retrain。 |
- **A/B**:新模型提升 5% CTR,成本下降 12%。 |
- **回饋**:每日收集用戶點擊行為,24h 內完成模型更新。 |
> **總結**:透過完整的部署與監控流程,模型不再是一次性成果,而是能夠隨時自我優化、適應市場變化的「動態決策引擎」。
---
> **後記**:下一章將進一步探討「資料治理與倫理」,協助你在部署模型時兼顧合規與社會責任。