使用 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 的資訊。