隨著機器學習應用日益普及,構建高效的 MLOps 管線變得至關重要。本文以保險理賠詐欺偵測為例,闡述如何利用 AWS 雲端服務、MLflow 和 n8n 等工具,打造一個自動化的模型開發、佈署和監控流程。此流程涵蓋資料整合、模型訓練、效能評估、CI/CD 整合以及系統佈署等關鍵環節,並著重探討如何平衡成本效益與系統可擴充套件性。案例中使用 AWS Glue 進行資料處理、MLflow 追蹤模型實驗、n8n 建立自動化工作流程,並以 EC2 作為佈署環境,取代成本較高的 SageMaker。此外,文章也強調了模型測試、監控和版本控制的重要性,以確保模型的可靠性和持續效能提升。

機器學習維運的DevOps管線實踐

隨著機器學習(ML)在各組織中的廣泛應用,對於簡化DevOps實踐的需求變得越來越迫切。本章將透過案例研究,深入探討如何為ML維運建立有效的DevOps管線,重點關注在模型開發、佈署和監控過程中所採用的策略、工具和技術。

本章結構

本章主要涵蓋以下主題:

  1. DevOps管線的關鍵考量
  2. 案例研究:建立有效的ML維運DevOps管線
  3. 擴充套件CI/CD至MLOps管線
  4. CI/CD在Node.js中的實施範例:使用Bitbucket和Ansible
  5. 在Azure上實施CI/CD的範例
  6. CI/CD的實施細節
  7. 測試階段在CI/CD中的角色
  8. 佈署方法與資料函式庫架構調整
  9. 最佳實踐總結

學習目標

本章旨在提供對機器學習維運(MLOps)中DevOps管線開發的全面理解,涵蓋模型開發、佈署和監控,重點關注持續整合和持續交付(CI/CD)方面,如版本控制、自動化、協作和安全性。同時,本章還將探討如何在成本效益高的情況下實作可持續的ML模型佈署。

DevOps管線的關鍵考量

建立一個健全的DevOps管線需要跨多個領域進行仔細考慮。以下列出了構建成功管線的關鍵要素:

範圍定義

  • 模型開發、佈署和監控被確定為關鍵領域。
  • 其他重要考量包括:
    • 版本控制:追蹤模型和程式碼版本。
    • 自動化:透過自動化任務減少人為錯誤。
    • 協作:確保資料科學家、工程師和維運團隊之間的有效協作。
    • 安全性:實施存取控制措施。
    • 成本:強調ML模型佈署的成本效益。

技術景觀

  • 根據客戶的基礎設施量身定製DevOps管線
  • 利用無伺服器服務進行高效的ML模型佈署

成本和資源管理

  • 解決成本相關的約束
    • 透過AWS S3儲存桶管理資料儲存成本。
    • 評估第三方軟體的授權成本。
    • 透過無伺服器、按需服務最佳化雲端服務成本。
    • 考慮ML維運中專門角色的人力資源成本。

存取控制與治理

本文深入探討了存取控制的基本要素,包括身份驗證機制的實施和資料治理的關鍵方面,如資料品質、隱私和合規性。這些要素共同促進了MLOps中DevOps管線的成功:

  • 存取控制:實施身份驗證和授權機制,確保只有授權使用者能夠存取已佈署的模型和預測結果。
  • 稽核:跟蹤使用者存取情況,以滿足合規性、安全性和問題排查的需求。
  • 監控:持續監控已佈署模型的效能,以確保其功能正常並檢測問題。
  • 程式碼版本控制:儲存所有已佈署模型的先前版本,以便在必要時進行回復。
  • 資料治理:強調對用於訓練、測試和預測的資料進行適當治理,特別是在佈署規模擴大時,關注資料品質、隱私和合規性。
  • ML模型可解釋性:確保ML模型的可解釋性和理解度,並量化其價值貢獻。
  • 檔案記錄:維護已佈署模型的詳細檔案,包括架構、訓練資料和效能指標。
  • 安全措施:實施安全措施,以保護模型和預測結果免受未授權存取和惡意攻擊。

案例研究:建立有效的ML維運DevOps管線

在現代軟體開發中,DevOps與ML的交叉點已成為一個關鍵的焦點。本案例研究深入探討了一個為有效模型維運而量身定製的DevOps管線的開發過程。該案例發生在一個針對大型保險公司進行詐欺索賠檢測和管理的專案中。

專案背景

該專案旨在為一家大型保險公司開發自動化的詐欺檢測和警示系統,利用保險索賠資料,採用先進分析和經典ML演算法來識別潛在的詐欺模式和異常。主要的目標是準確、早期的檢測詐欺,從而最小化對保險公司及其客戶的財務影響。

專案團隊組成

該專案涉及一個由6人組成的緊密團隊:

  • 兩名資料科學家:負責ML模型的訓練和實驗流程。
  • 一名資料工程師:負責雲端資料函式庫整合,並與雲端專家密切合作。
  • 一名雲端專家(AWS):負責設定根據雲的系統。
  • 一名經驗豐富的UI開發者(JavaScript/React):開發直觀的ReactJS基礎UI。
  • 一名業務分析師:負責捕捉客戶需求。

圖表翻譯:

此圖示展示了ML模型開發和佈署的流程。首先,資料被收集和整合;接著,開發分析或ML模型;然後,將這些模型整合到雲端環境中;隨後進行自動化佈署;最後,對已佈署的模型進行監控和維護,以確保其持續運作和效能最佳化。

程式碼範例:使用Python進行ML模型訓練

# 匯入必要的函式庫
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd

# 載入資料集
data = pd.read_csv('insurance_claims.csv')

# 分割資料為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(data.drop('target', axis=1), data['target'], test_size=0.2, random_state=42)

# 初始化並訓練模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 進行預測並評估模型效能
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'模型準確率:{accuracy:.2f}')

內容解密:

此程式碼範例展示瞭如何使用Python和scikit-learn函式庫訓練一個隨機森林分類別器來進行保險索賠詐欺檢測。首先,載入必要的函式庫和資料集;接著,將資料分割為訓練集和測試集;然後,初始化並訓練模型;最後,進行預測並評估模型的準確率。這個範例簡潔明瞭地展示了ML模型訓練的基本流程和關鍵步驟。

n8n AI Agent與MLOps在保險理賠欺詐偵測中的應用

隨著人工智慧技術的進步,保險行業正積極採用先進的機器學習(ML)技術來偵測理賠欺詐行為。本文將詳細探討如何利用n8n AI Agent與MLOps實踐,打造一個高效的保險理賠欺詐偵測系統。

專案背景與挑戰

保險理賠欺詐偵測是一項複雜的任務,需要處理多樣化的資料來源並確保系統的高用性。傳統的手動檢測方法已無法滿足現代保險業務的需求,因此需要建立一個自動化且可擴充套件的解決方案。

技術架構設計

1. 資料來源整合

在保險理賠欺詐偵測專案中,資料來源的多樣性是一大挑戰。我們採用了以下多種資料來源:

  • 來自關係型資料函式庫的結構化資料
  • 儲存於簡單儲存位置的非結構化資料
  • 來自本地伺服器的串流資料

為了有效整合這些資料,我們設計了根據AWS服務的ETL(Extract, Transform, Load)管線:

圖表翻譯:

此圖示展示了資料從不同來源經過AWS Glue ETL處理到最終儲存的流程。首先,各類別資料被抽取到AWS Glue中,接著進行必要的轉換處理,最後將處理後的資料儲存於目標系統中,為後續的分析工作做好準備。

2. 資料處理流程

我們利用AWS Glue建立了一個無伺服器的ETL管線,實作了資料的自動化處理:

import awswrangler as wr
import pandas as pd

def process_insurance_data(glue_context, input_data):
    # 資料轉換邏輯
    df = wr.s3.read_csv(input_data, dataset=True)
    transformed_df = df.dropna()  # 移除缺失值
    return transformed_df

# 將處理後的資料寫入目標儲存
def write_to_target(df, target_path):
    wr.s3.to_csv(df, target_path, index=False)

內容解密:

此程式碼展示瞭如何使用AWS Glue進行資料處理。首先,我們使用awswrangler函式庫從S3讀取CSV檔案,接著進行資料清理(如移除缺失值),最後將處理後的資料寫回S3。這個流程實作了資料處理的自動化與可擴充套件性。

MLOps實踐

1. 模型開發與追蹤

我們選擇了MLflow作為模型開發與追蹤的工具,主要根據以下考量:

  • 跨供應商的靈活性
  • 強大的實驗追蹤功能
  • 完善的模型管理機制

MLflow的佈署架構如下:

圖表翻譯:

此圖示展示了MLflow在EC2例項上的佈署架構。MLflow Tracking Server負責記錄模型訓練過程中的各項指標和引數,訓練完成的模型會被註冊到模型登入檔中,最終佈署到生產環境中。

2. 模型訓練流程

我們建立了完整的模型訓練流程,包括資料準備、模型訓練、模型評估等步驟:

import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 初始化MLflow實驗
mlflow.set_experiment("Insurance Fraud Detection")

with mlflow.start_run():
    # 紀錄模型引數
    mlflow.log_param("n_estimators", 100)
    
    # 訓練模型
    model = RandomForestClassifier(n_estimators=100)
    model.fit(X_train, y_train)
    
    # 評估模型
    predictions = model.predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    mlflow.log_metric("accuracy", accuracy)
    
    # 紀錄模型
    mlflow.sklearn.log_model(model, "model")

內容解密:

此程式碼展示瞭如何使用MLflow進行模型訓練與追蹤。我們首先設定了實驗名稱,接著在start_run上下文中訓練一個隨機森林分類別器,並記錄模型的引數、評估指標和模型本身,實作了完整的模型生命週期管理。

n8n AI Agent整合

1. 自動化工作流程

我們利用n8n AI Agent建立了自動化的工作流程,實作了從資料處理到模型佈署的端對端自動化:

{
  "nodes": [
    {
      "parameters": {
        "triggerTimes": {
          "item": {
            "mode": "everyHour"
          }
        }
      },
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "typeVersion": 1
    },
    {
      "parameters": {
        "functionCode": "const data = items.map(item => item.json);\nreturn data.map(d => ({json: {data: d}}));"
      },
      "name": "Function",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1
    }
  ]
}

內容解密:

此JSON組態定義了一個n8n工作流程,其中包含一個每小時觸發一次的Cron節點,以及一個用於資料處理的Function節點。這個工作流程實作了定時觸發資料處理任務,為後續的模型分析提供了資料來源。

系統佈署與維運

1. 佈署策略

我們選擇了AWS EC2作為主要的佈署環境,主要根據以下考量:

  • 高用性
  • 彈性擴充套件能力
  • 符合成本效益

EC2例項的組態與管理流程如下:

圖表翻譯:

此圖示展示了EC2例項的啟動與組態流程。從啟動例項、組態安全群組到安裝軟體和佈署應用程式,每一步都經過精心設計,以確保佈署的順利進行。

擴充套件MLOps中的CI/CD流程

在完成資料準備、運算環境建立以及模型實驗和追蹤伺服器的設定後,我們的下一個重點是組態MLOps流程。經過資料收集、模型建立和實驗後,邏輯上的進展涉及模型評估、佈署、監控、版本控制以及實施CI/CD流程。以下高階步驟闡述了這些元件如何整合到我們的MLOps流程中:

AWS CI/CD工具介紹

在深入流程實作之前,讓我們簡要介紹將用於建立CI/CD MLOps流程的AWS工具,其中許多是無伺服器架構,有助於流程的開發:

  • CodeCommit:一個完全託管的版本控制服務,作為原始碼的集中式儲存函式庫。在我們的專案中,CodeCommit充當遠端專案儲存函式庫。
  • CodeBuild:一個完全託管的建置服務,用於編譯、測試和封裝程式碼。與CodeCommit無縫整合,自動化由程式碼變更觸發的建置。
  • CodeDeploy:另一個完全託管的佈署服務,自動化程式碼佈署到各種環境。在我們的案例中,它促進了佈署到AWS EC2例項。
  • CodePipeline:一個提供視覺化介面用於流程管理的AWS服務。協調了發布流程中的每個步驟,與其他AWS服務無縫整合。

整合CI/CD元件到MLOps流程

以下步驟闡述了這些元件如何被整合到我們的MLOps流程中:

  1. Git安裝:開發人員在其本地系統上安裝Git。
  2. CodeCommit儲存函式庫設定:為專案建立新的儲存函式庫,開發人員使用SSH/HTTPS在本地克隆它。
  3. 本地建置和測試:在將變更提交到CodeCommit儲存函式庫之前,在本地進行建置和測試活動。
  4. 前端/UI開發:在將變更推播到遠端儲存函式庫之前,在本地對根據React JS的UI/API進行嚴格測試。
  5. 提取請求和程式碼審查:開發人員建立提取請求以提出變更,由高階開發人員/程式碼審查員監督合併到主分支的過程。
  6. 設定MLflow:如前一節所述,MLflow被整合用於實驗和追蹤。
  7. 主儲存函式庫克隆到EC2:CodeCommit中的主儲存函式庫被克隆到EC2例項環境中,執行ML應用程式後端的Python程式碼。這觸發了一系列ML模型實驗,選擇最佳模型進行生產階段。
  8. CodeBuild執行:觸發CodeBuild來編譯、測試和封裝程式碼。
  9. CodeDeploy佈署:如果建置成功,則觸發CodeDeploy,自動將程式碼佈署到目標環境(例如AWS EC2)。
  10. CodePipeline協調:利用CodePipeline來管理流程,提供視覺化介面以檢視每個階段的狀態。
  11. CodePipeline整合:將其他AWS服務整合到CodePipeline中,協調軟體交付流程。

圖表翻譯:

此圖示展示了CI/CD流程中的各個階段,從Git安裝開始到CodePipeline整合結束。流程中的每個步驟都與特定的AWS服務相關聯,展示了從原始碼管理到自動化佈署的完整CI/CD流程。

為什麼不選擇AWS SageMaker

儘管AWS SageMaker在ML模型佈署中很流行,但我們的專案出於以下原因選擇不使用它:

  • 更高的使用成本:考慮到例項型別、佈署模型大小和資料傳輸等因素,SageMaker的使用成本較高。
  • 傳統佈署的便利性:對於具有根據JavaScript的前端和根據Python ML的後端的應用程式,傳統的EC2例項佈署被證明更為方便。
  • 操作簡便性:使用AWS CodePipeline在EC2例項上進行傳統佈署被認為更容易操作。
  • 自定義需求:SageMaker在自定義環境和存取底層作業系統方面的限制導致了不使用AWS SageMaker的決定。

模型測試和監控

模型測試和監控是ML的一個關鍵階段,涉及評估訓練模型的效能和穩健性。請遵循以下步驟:

  1. 模型測試指標:在詐欺偵測中,關鍵指標包括召回率和模型提升。使用提升圖來視覺化模型效能,以比較預測與實際結果。為了量化資料品質驗證,我們納入了資料剖析指標,例如識別異常值、追蹤較高的缺失百分比和評估資料完整性。
  2. 解決資料漂移:為了應對資料漂移,我們採取了全面的方法,包括資料品質驗證、模型效能監控和漂移評估與反饋。除了定期檢查資料漂移外,我們還實施了特定的資料剖析指標來量化資料特徵的變化。
import pandas as pd
from sklearn.metrics import recall_score

# 假設 y_true 和 y_pred 是實際標籤和預測標籤
recall = recall_score(y_true, y_pred)
print(f"召回率:{recall}")

內容解密:

此程式碼計算了模型在詐欺偵測任務中的召回率。召回率是衡量模型正確識別正類別(在此案例中為詐欺交易)的能力的重要指標。程式碼使用了sklearn.metrics中的recall_score函式,需要實際標籤y_true和預測標籤y_pred作為輸入。

其他CI/CD流程開發導向

當我們深入探討建立健全的CI/CD MLOps流程的複雜性時,本文探討了基礎之外的其他方面。為了進一步提升模型的效能和可靠性,我們實施了以下措施:

  • 分析模型錯誤和模式:我們對模型錯誤和模式進行了深入分析,以找出需要改進的領域。
  • 比較生產模型效能與基準模型:採用A/B測試來比較生產模型與基準模型的效能。
  • 即時監控:即時監控使我們能夠立即檢測和回應問題。
  • 偏差檢測測試和特徵重要性測試:我們納入了偏差檢測測試以識別和減輕模型預測中的偏差,並進行了特徵重要性測試以量化各個特徵對模型效能的影響。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title MLOps DevOps管線實踐

package "CI/CD管線" {
    component [版本控制 Git] as git
    component [自動化建置] as build
    component [自動化測試] as test
    component [持續部署] as deploy_cd
}

package "AWS服務整合" {
    component [S3資料儲存] as s3
    component [Glue資料處理] as glue
    component [EC2部署環境] as ec2
}

package "MLOps工具" {
    component [MLflow追蹤] as mlflow
    component [n8n工作流程] as n8n
    component [模型版本控制] as model_ver
}

package "治理與監控" {
    component [存取控制] as access
    component [效能監控] as perf_mon
    component [模型可解釋性] as explain
    component [稽核日誌] as audit
}

git --> build : 觸發
build --> test : 驗證
test --> deploy_cd : 通過

s3 --> glue : 資料流
glue --> mlflow : 訓練追蹤
mlflow --> ec2 : 部署

model_ver --> n8n : 自動化
n8n --> perf_mon : 監控

access --> audit
explain --> audit

note right of mlflow : 實驗追蹤與模型註冊
note right of ec2 : 取代SageMaker降低成本
note right of n8n : 低程式碼自動化

@enduml

圖表翻譯:

此圖示展示了模型測試和監控的不同方面,包括分析模型錯誤、比較模型效能、即時監控以及進行偏差和特徵重要性測試。這些措施共同確保了模型的高效能和可靠性。