使用 GitHub Actions 部署、升级和回滚模型

已完成

当模型完成注册,并且其生产升级已由 GitHub 环境提供保护后,你即可提供预测服务,而不会让所有用户都直接接触到未经测试的版本。

创建终结点和部署

托管在线终结点提供一个稳定的 HTTPS 地址,客户端应用程序(如 Proseware 的日程安排系统)可通过调用该地址来获取预测结果。 终结点本身不会运行模型。 一个或多个部署负责实际提供服务;每个部署都将特定的已注册模型版本与计算配置相配对,而对于 MLflow 模型,还会配有自动生成的环境和评分脚本。 在替换下方的部署时保持终结点 URL 稳定,这意味着排班系统永远无需更改,即使失约模型在重新训练和重新部署后亦是如此。

提示

详细了解如何将 机器学习模型部署到联机终结点。

安全地推广新版本

终结点一次可以托管多个部署,并且控制每个部署接收的传入流量的百分比。 通过此设置,可以像推出任何生产软件更改一样推出新的模型版本:将新版本与当前版本一起部署为 0% 流量,确认其行为按预期方式运行,然后逐渐将流量转移到其中,这一方法通常称为 蓝绿部署。 如果新版本表现不佳,可将流量移回以前的部署,而不是关闭终结点。

提示

详细了解联机终结点的安全部署。

在转移流量之前进行测试

在新部署接收任何实时流量之前,将请求直接发送到该部署,并将其响应与预期进行比较。 只有在新部署通过这些检查之后,才提高分配给它的流量。 由于部署可能需要几分钟时间才能达到就绪状态,因此自动测试需要等待部署完成预配,然后再发送请求。

使用 GitHub Actions 自动化流水线

对每个重新训练后的模型都手动重复执行注册、部署和测试,无法扩展,因此,Proseware 团队使用 GitHub Actions 和 Azure 机器学习 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。