Ein Modell mit GitHub Actions bereitstellen, heraufstufen und zurückrollen

Abgeschlossen

Nachdem das Modell registriert wurde und die Produktivsetzung durch eine GitHub-Umgebung geschützt ist, können Sie Vorhersagen bereitstellen, ohne dabei jeden Benutzer einer ungetesteten Version auszusetzen.

Endpunkt und Bereitstellung erstellen

Ein verwalteter Onlineendpunkt stellt eine stabile HTTPS-Adresse bereit, die eine Clientanwendung wie das Planungssystem von Proseware aufruft, um eine Vorhersage zu erhalten. Der Endpunkt selbst führt das Modell nicht aus. Eine oder mehrere Bereitstellungen, die jeweils eine bestimmte registrierte Modellversion mit einer Rechenkonfiguration und bei MLflow-Modellen mit einer automatisch generierten Umgebung und einem Scoringskript koppeln, übernehmen die eigentliche Bereitstellung. Wenn Sie die Endpunkt-URL stabil halten, während Sie Bereitstellungen darunter ersetzen, bedeutet dies, dass sich das Planungssystem nie ändern muss, auch wenn das No-Show-Modell neu trainiert und erneut bereitgestellt wird.

Sicheres Bewerben einer neuen Version

Ein Endpunkt kann mehrere Bereitstellungen gleichzeitig hosten, und Sie steuern, welcher Prozentsatz des eingehenden Datenverkehrs jede Bereitstellung empfängt. Mit diesem Setup können Sie eine neue Modellversion auf die gleiche Weise bereitstellen, wie Sie jede Produktionssoftwareänderung bereitstellen: Stellen Sie die neue Version zusammen mit dem aktuellen auf 0% Datenverkehr bereit, bestätigen Sie, dass sie sich wie erwartet verhält, und verschieben Sie dann allmählich den Datenverkehr dorthin, ein Ansatz, der allgemein als blaugrüne Bereitstellung bezeichnet wird. Wenn die neue Version nicht erfolgreich ist, verschieben Sie den Datenverkehr zurück zur vorherigen Bereitstellung, anstatt den Endpunkt herunterzunehmen.

Tipp

Erfahren Sie mehr über das sichere Rollout für Onlineendpunkte.

Testen, bevor Sie den Datenverkehr verschieben

Bevor eine neue Bereitstellung einen Livedatenverkehr empfängt, senden Sie Anforderungen direkt an diese Bereitstellung und vergleichen ihre Antworten mit dem, was Sie erwarten. Erst wenn die neue Bereitstellung diese Prüfungen besteht, erhöhen Sie ihre Traffic-Zuweisung. Da eine Bereitstellung ein paar Minuten dauern kann, um einen bereiten Zustand zu erreichen, muss ein automatisierter Test warten, bis die Bereitstellung abgeschlossen ist, bevor anforderungen gesendet werden.

Automatisieren der Pipeline mit GitHub Actions

Das manuelle Wiederholen von Registrierung, Bereitstellung und Tests für jedes neu trainierte Modell wird nicht skaliert, sodass das Team von Proseware die Pipeline mit GitHub Actions und der Azure Machine Learning CLI (v2) automatisiert. Die aktuelle empfohlene Methode zum Authentifizieren eines Workflows für Azure ist OpenID Connect (OIDC)-Verbundanmeldeinformationen, mit denen GitHub Actions ein kurzlebiges Zugriffstoken anfordern können, anstatt einen geheimen Clientschlüssel als Repositoryschlüssel zu speichern. Sie konfigurieren eine Verbundanmeldeinformation für eine Microsoft Entra Anwendung, die auf Ihr Repository und Ihre Verzweigung festgelegt ist, und verweisen sie dann im Workflow mit der azure/login Aktion auf sie:

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

Der Block des Workflows permissions gewährt dem Job die Berechtigung id-token, die er benötigt, um ein Token von Azure anzufordern. Im Schritt azure/login wird dieses Token gegen eine authentifizierte Azure-CLI-Sitzung ausgetauscht. Nachdem ein direkter Test erfolgreich ist, leitet der Workflow 10 % des Datenverkehrs an das neue green Deployment weiter. Fördern Sie sie weiter, nachdem ihr Produktionsverhalten Ihren Akzeptanzkriterien entspricht.

Zurück zum vorherigen Modell

Halten Sie die vorherige blue Bereitstellung verfügbar, bis das neue Modell den Beobachtungszeitraum abgeschlossen hat. Wenn nach der Promotion Fehler oder inakzeptable Vorhersagen auftreten, leiten Sie den gesamten Datenverkehr zurück zu blue:

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

Das Ändern des Datenverkehrs behält die Endpunkt-URL bei und bietet eine schnellere Wiederherstellung als das Löschen und Erneutes Erstellen des Endpunkts. Nachdem der Datenverkehr wieder auf das vorherige Modell umgeleitet wurde, untersuchen Sie die green-Bereitstellung, ohne die Benutzer ihr auszusetzen. Löschen Sie die vorherige Bereitstellung erst, nachdem das neue Modell seine Akzeptanzkriterien für den erforderlichen Beobachtungszeitraum erfüllt hat.