使用 GitHub Actions 部署、升級及復原模型

已完成

只要模型註冊並由 GitHub 環境保護生產推廣,你就能隨時提供預測,而不必讓所有用戶接觸到未經測試的版本。

建立端點與部署

受管理的線上端點提供穩定的 HTTPS 位址,客戶端應用程式(如 Proseware 的排程系統)會呼叫以取得預測。 端點本身不會執行模型。 一個或多個部署,各自將特定的註冊模型版本與計算組態配對,而對於 MLflow 模型 (自動產生的環境與評分腳本) 則負責實際的服務。 在替換底層部署時保持端點 URL 穩定,意味著排程系統永遠不需要更改,即使 no-show 模型會被重新訓練和重新部署。

提示

了解更多關於 將機器學習模型部署到線上端點的方法。

安全推廣新版本

一個端點可以同時承辦多個部署,你可以控制每個部署接收到多少百分比的流量。 這種架構讓你能像推送任何生產軟體變更一樣,推出新版本:在流量% 為零時部署新版本與現有版本並行,確認其行為如預期,然後逐步將流量轉向該版本,這種做法通常稱為 藍綠部署。 如果新版本表現不佳,你就把流量移回先前部署,而不是關閉端點。

提示

了解更多關於 線上端點安全部署的資訊。

在轉移交通前先測試一下

在新部署收到任何即時流量之前,你會直接向該部署發送請求,並比較其回應與預期。 只有在新部署通過這些檢查後,才能提高其流量配額。 由於部署可能需要幾分鐘才能達到準備狀態,自動化測試需要等待部署完成配置後才會發送請求。

用 GitHub Actions 自動化管線

對每個重新訓練的模型手動重複進行註冊、部署和測試不具擴充性,因此 Proseware 團隊使用 GitHub Actions 和 Azure Machine Learning CLI (v2) 將整個流程自動化。 目前推薦的 Azure 流程認證方式是 OpenID Connect(OIDC)聯邦憑證,讓 GitHub Actions 能請求短暫的存取權杖,而非將用戶端秘密存為儲存庫秘密。 你在 Microsoft Entra 應用程式上設定一個聯邦憑證,範圍限定在你的倉庫和分支,然後在工作流程azure/login中用以下動作參考它:

permissions:
  id-token: write
  contents: read

env:
  RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
  WORKSPACE_NAME: ${{ vars.AZURE_WORKSPACE_NAME }}
  ENDPOINT_NAME: ${{ vars.AZURE_ENDPOINT_NAME }}

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Sign in to Azure
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - name: Register and deploy the model
        run: |
          az extension add -n ml -y
          az ml model create \
            --file model.yml \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
          az ml online-deployment create \
            --name green \
            --endpoint-name $ENDPOINT_NAME \
            --file green-deployment.yml \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
      - name: Test the new deployment
        run: |
          az ml online-endpoint invoke \
            --name $ENDPOINT_NAME \
            --deployment-name green \
            --request-file sample-request.json \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME
      - name: Send limited traffic to the new deployment
        run: |
          az ml online-endpoint update \
            --name $ENDPOINT_NAME \
            --traffic "blue=90 green=10" \
            --resource-group $RESOURCE_GROUP \
            --workspace-name $WORKSPACE_NAME

工作流程的 permissions 區塊會授與該作業向 Azure 要求權杖所需的 id-token。 此azure/login步驟會將該令牌交換為已認證的 Azure CLI 會話。 直接測試成功後,工作流程會將 10% 流量傳送到新 green 部署。 只有當其生產行為符合你的接受標準後,才可進一步推廣。

回滾至上一個模型

在新模型完成觀察期前,保留先前 blue 部署的可用性。 若升級後出現錯誤或不可接受的預測,請將所有流量路由回至 blue

az ml online-endpoint update \
  --name $ENDPOINT_NAME \
  --traffic "blue=100 green=0" \
  --resource-group $RESOURCE_GROUP \
  --workspace-name $WORKSPACE_NAME

變更流量設定可保留端點 URL,且比刪除後重新建立端點恢復得更快。 流量回到先前的模型後,在不向使用者公開的情況下調查 green 部署。 只有在新模型達到所需觀察期的驗收標準後,才刪除先前的部署。

提示

了解更多關於使用 OpenID Connect 將 GitHub Actions 連接到 Azure 的資訊。