快轉到主要內容
  1. Posts/

基於 MLOps 的機器學習實驗管理與監控系統

MLOps 機器學習 深度學習 DevOps Automation Python PyTorch MLOps Git Grafana Prometheus Docker DVC MLflow CI/CD Ansible Drone Hydra
目錄

這專案是一個 MLOps Demo,以 文本分類任務 為例,結合 自動化、容器化、版本控制與監控,實作一個 可擴展且可復現 的機器學習開發與部署流程。此專案採用了 Hydra 進行動態配置管理,DVC 來管理資料版本,並透過 MLflow 進行實驗追蹤與模型版本控制,確保模型的最佳化與可復現性。

此外,CI/CD 流程由 Drone 驅動,確保每次模型更新都能自動測試與部署,大幅減少手動操作。資源監控部分,透過 Prometheus 和 Grafana,讓開發者能夠直接掌握 GPU 使用情況與系統運行狀態,確保部署後的系統穩定性與效能。

系統架構圖
#

Image

Demo
#

  • 資源監控
    Image
  • MLflow 實驗監控
    Image
  • MLflow 模型版本管理
    Image

🔥 專案概述
#

本專案目標是建立 機器學習訓練與部署環境,融合 自動化流程、容器化技術及資源監控,為開發者提供 標準化、可擴展且易於管理 的 MLOps 流程

🚀 專案優勢
#

MLOps 流程整合

  • 結合 Hydra、DVC、MLflow、Drone、Docker、Ansible、Prometheus 和 Grafana,打造全自動化的 ML 研發與部署環境

數據與模型版本管理,確保可復現性

  • DVC 負責資料版本管理,確保數據可追蹤、可重現
  • MLflow 進行 實驗記錄與模型版本管理,可多次訓練與模型版本控制

CI/CD 自動化流程,提高開發效率

  • Drone 監控 Git 儲存庫的變更,當有新版本推送時,會自動測試、建立 Docker 映像,確保開發流程順暢

容器化技術,確保環境一致性與可擴展性

  • 透過 Docker 和 Harbor 進行模型與應用程式的封裝與管理,確保不同環境下的執行一致性

監控與可視化,確保系統穩定運行

  • Prometheus + Grafana 提供 GPU 使用率、記憶體占用率 監控,避免資源浪費,提高系統可靠性

動態配置管理,提高靈活性與可維護性

  • Hydra 提供高彈性的動態配置,使開發者能輕鬆管理不同實驗與部署參數

🛠 專案架構與流程
#

1️⃣ 程式碼管理
#

  • 開發者撰寫程式碼並推送至 Git 儲存庫,以進行版本控制

2️⃣ CI/CD 自動化
#

  • Drone 自動化執行測試、封裝成 Docker 映像,確保新版本程式碼可穩定運行

3️⃣ 容器化與映像管理
#

  • 使用 Docker 打包應用程式與模型,確保環境一致性
  • Harbor 進行私有映像倉庫管理,集中存儲與分發映像

4️⃣ 資料與模型版本管理
#

  • DVC 管理數據版本,確保數據可追蹤與復現
  • MLflow 負責實驗與模型版本管理,確保每次訓練的可復現性與最佳化

5️⃣ 自動化部署
#

  • Ansible 負責多機部署,確保模型與應用能在不同伺服器上快速部署與更新

6️⃣ 監控與資源管理
#

  • Prometheus + Grafana 提供即時資源監控,包括 GPU 使用率、CPU 負載、記憶體占用率等,確保系統穩定運行

🔧 快速開始
#

1️⃣ 開發與版本管理
#

  • 在本地撰寫程式碼,並推送至 Git 儲存庫
git init
git add .
git commit -m "init"
git remote add origin https://github.com/your-repo.git
git push -u origin main

2️⃣ CI/CD 自動化測試與封裝
#

  • Drone 自動測試並封裝 Docker 映像

範例: 在 .drone.yml 配置 CI/CD 流程

kind: pipeline
type: docker
name: default

steps:
  - name: test
    image: python:3.9
    commands:
      - pip install -r requirements.txt
      - pytest

  - name: build Docker image
    image: docker
    commands:
      - docker build -t my-app:latest .
      - docker push my-app:latest

3️⃣ 資料版本管理
#

  • 使用 DVC 進行資料版本控制
dvc init
dvc add data/dataset.csv
git add data.dvc .gitignore
git commit -m "trace dataset"
git push origin main

4️⃣ 實驗與模型管理
#

  • 透過 MLflow 追蹤實驗,記錄指標與超參數,並管理模型版本

範例: 記錄訓練指標與超參數

import mlflow

mlflow.set_experiment("my_experiment")

with mlflow.start_run():
    mlflow.log_param("learning_rate", 0.01)
    mlflow.log_metric("accuracy", 0.95)
    mlflow.log_artifact("model.pkl")

5️⃣ 部署到伺服器
#

  • 使用 Ansible 自動化部署至指定伺服器

範例: 使用 Ansible 部署應用程式

- hosts: my_server
  tasks:
    - name: deploy
      docker_container:
        name: my-app
        image: my-app:latest
        state: started
        ports:
          - "8000:8000"

6️⃣ 系統監控
#

  • Grafana 儀表板 中監控 GPU、記憶體與系統狀態

步驟 1:啟動 Prometheus

在 prometheus.yml 配置監控目標:

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["node-exporter:9100"]

  - job_name: "gpu"
    static_configs:
      - targets: ["gpu-exporter:9400"]

然後啟動 Prometheus:

docker run -d --name=prometheus -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

步驟 2:啟動 Node Exporter

docker run -d --name=node-exporter -p 9100:9100 prom/node-exporter

步驟 3:安裝並啟動 GPU Exporter

docker run -d --name=gpu-exporter -p 9400:9400 \
  --runtime=nvidia \
  -e NVIDIA_VISIBLE_DEVICES=all \
  nvcr.io/nvidia/k8s/dcgm-exporter:latest

步驟 4:啟動 Grafana

docker run -d --name=grafana -p 3000:3000 grafana/grafana

進入 Grafana,新增 Prometheus 資料來源,並導入 GPU 監控儀表板,如 DCGM Exporter Dashboard

Ernie
作者
Ernie

相關文章

Ansible持續集成與持續部署
DevOps Automation Ansible CI/CD DevOps Shell Git SSH Automation
使用Ansible自動化部署程式碼到遠端伺服器,提升效率並減少錯誤。
GitHub Actions 自動化工作流程
DevOps GitHub Python GitHub Actions CI/CD Python 爬蟲 PTT Slack Automation
學習如何使用 GitHub Actions 自動化你的工作流程,包含設定、執行和最佳實務。
GitHub Webhook 自動化程式碼部署教學
DevOps GitHub Python Flask GitHub Webhook 自動化 部署 Python Flask Git SSH
設定 GitHub Webhook 自動拉取最新程式碼並部署到伺服器。