Verwenden von GitHub Actions mit Azure Machine Learning

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Beginnen Sie mit dem Trainieren eines Modells in Azure Machine Learning mithilfe von GitHub Actions.

In diesem Artikel erfahren Sie, wie Sie einen GitHub Actions-Workflow erstellen, der ein Machine Learning-Modell für Azure Machine Learning erstellt und bereitstellt. Dazu trainieren Sie ein lineares scikit-learn-Regressionsmodell mit dem NYC Taxi-Dataset.

GitHub Actions verwendet für den Workflow eine YAML-Datei (.yml) unter dem Pfad /.github/workflows/ in Ihrem Repository. Diese Definition enthält die verschiedenen Schritte und Parameter, die den Workflow bilden.

Voraussetzungen

Stellen Sie vor dem Ausführen der Schritte in diesem Artikel sicher, dass Sie über die folgenden erforderlichen Komponenten verfügen:

  • Ein Azure Machine Learning-Arbeitsbereich. Wenn keiner vorliegt, führen Sie die Schritte unter Schnellstart: Erstellen von Arbeitsbereichsressourcen aus, um einen Arbeitsbereich zu erstellen.

  • Verwenden Sie zum Installieren des Python SDK v2 den folgenden Befehl:

    pip install azure-ai-ml azure-identity
    

    Verwenden Sie den folgenden Befehl, um eine vorhandene Installation des SDK auf die neueste Version zu aktualisieren:

    pip install --upgrade azure-ai-ml azure-identity
    

    Weitere Informationen finden Sie unter Installieren des Python SDK v2 für Azure Machine Learning.

Schritt 1: Abrufen des Codes

Verzweigen Sie das folgende Repository auf GitHub:

https://github.com/azure/azureml-examples

Klonen Sie Ihr geforktes Repository lokal.

git clone https://github.com/YOUR-USERNAME/azureml-examples

Schritt 2: Authentifizieren bei Azure

Sie müssen zuerst angeben, wie die Authentifizierung bei Azure erfolgt. Sie können einen Dienstprinzipal oder OpenID Connect verwenden.

Generieren von Anmeldeinformationen für die Bereitstellung

Generieren Sie in der Azure CLI mit dem Befehl az ad sp create-for-rbac einen Dienstprinzipal. Führen Sie diesen Befehl mit Azure Cloud Shell im Azure-Portal oder durch Auswählen der Schaltfläche Ausprobieren aus.

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

Der Parameter --json-auth ist in Azure CLI-Versionen >= 2.51.0 verfügbar. Frühere Versionen nutzen --sdk-auth mit einer Einstellungswarnung.

Ersetzen Sie im obigen Beispiel die Platzhalter durch Ihre Abonnement-ID, den Ressourcengruppennamen und den App-Namen. Die Ausgabe ist ein JSON-Objekt mit den Anmeldeinformationen für die Rollenzuweisung, die ähnlich wie unten Zugriff auf Ihre App Service-App gewähren. Kopieren Sie dieses JSON-Objekt zur späteren Verwendung.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Erstellen von Geheimnissen

  1. Wechseln Sie in GitHub zu Ihrem Repository.

  2. Gehen Sie im Navigationsmenü auf Einstellungen.

  3. Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.

    Screenshot des Hinzufügens eines Geheimnisses

  4. Wählen Sie New repository secret (Neues Repositorygeheimnis) aus.

  5. Fügen Sie die gesamte JSON-Ausgabe aus dem Azure CLI-Befehl in das Wertfeld des Geheimnisses ein. Geben Sie dem Geheimnis den Namen AZURE_CREDENTIALS.

  6. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Schritt 3: Aktualisieren von setup.sh zum Herstellen einer Verbindung mit Ihrem Azure Machine Learning-Arbeitsbereich

Sie müssen die CLI-Setup-Dateivariablen Ihrem Arbeitsbereich entsprechend aktualisieren.

  1. Wechseln Sie in Ihrem geforkten Repository zu azureml-examples/cli/.

  2. Bearbeiten Sie setup.sh und aktualisieren Sie diese Variablen in der Datei.

    Variable Beschreibung
    GROUP Name der Ressourcengruppe
    LOCATION Speicherort Ihres Arbeitsbereichs (Beispiel: eastus2)
    ARBEITSBEREICH Name des Azure Machine Learning-Arbeitsbereichs

Schritt 4: Aktualisieren von pipeline.yml mit Ihrem Computeclusternamen

Sie verwenden eine pipeline.yml-Datei zum Bereitstellen Ihrer Azure Machine Learning-Pipeline. Dies ist eine Machine Learning-Pipeline und keine DevOps-Pipeline. Sie müssen diese Aktualisierung nur vornehmen, wenn Sie einen anderen Namen als cpu-cluster für Ihren Computerclusternamen verwenden.

  1. Wechseln Sie in Ihrem geforkten Repository zu azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml.
  2. Wenn compute: azureml:cpu-cluster angezeigt wird, aktualisieren Sie den Wert cpu-cluster mit Ihrem Computeclusternamen. Heißt Ihr Cluster z. B. my-cluster, wäre der neue Wert azureml:my-cluster. Es gibt fünf Aktualisierungen.

Schritt 5: Ausführen des GitHub Actions-Workflows

Ihr Workflow führt die Authentifizierung bei Azure durch, richtet die Azure Machine Learning-CLI ein und verwendet die CLI, um ein Modell in Azure Machine Learning zu trainieren.

Ihre Workflowdatei besteht aus einem Auslöserabschnitt und Aufträgen:

  • Ein Auslöser startet den Workflow im Abschnitt on. Der Workflow wird standardmäßig gemäß einem Cron-Zeitplan ausgeführt sowie wenn eine Pull-Anforderung aus übereinstimmenden Zweigen und Pfaden erfolgt. Erfahren Sie mehr über Ereignisse zum Auslösen von Workflows.
  • Im Abschnitt „Aufträge“ des Workflows können Sie Code auschecken und sich mit Ihrem Dienstprinzipalschlüssel bei Azure anmelden.
  • Der Abschnitt „Aufträge“ enthält außerdem eine Setup-Aktion, die die Machine Learning-CLI (v2) installiert und einrichtet. Nachdem die CLI installiert wurde, führt die Aktion „Auftrag ausführen“ Ihre Azure Machine Learning pipeline.yml-Datei aus und trainiert ein Modell mit NYC-Taxidaten.

Aktivieren Ihres Workflows

  1. Öffnen Sie im geforkten Repository .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml und überprüfen Sie, ob Ihr Workflow wie folgt aussieht.

    name: cli-jobs-pipelines-nyc-taxi-pipeline
    on:
      workflow_dispatch:
      schedule:
        - cron: "0 0/4 * * *"
      pull_request:
        branches:
          - main
          - sdk-preview
        paths:
          - cli/jobs/pipelines/nyc-taxi/**
          - .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml
          - cli/run-pipeline-jobs.sh
          - cli/setup.sh
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: check out repo
          uses: actions/checkout@v2
        - name: azure login
          uses: azure/login@v1
          with:
            creds: ${{secrets.AZURE_CREDENTIALS}}
        - name: setup
          run: bash setup.sh
          working-directory: cli
          continue-on-error: true
        - name: run job
          run: bash -x ../../../run-job.sh pipeline.yml
          working-directory: cli/jobs/pipelines/nyc-taxi
    
  2. Wählen Sie Ausführungen anzeigen aus.

  3. Aktivieren Sie Workflows, indem Sie die Option „I understand my workflows, go ahead and enable them“ (Ich verstehe meine Workflows, und sie sollen aktiviert werden) auswählen.

  4. Wählen Sie den Workflow cli-jobs-pipelines-nyc-taxi-pipeline aus und wählen Sie Workflow aktivieren. Screenshot der Aktivierung von GitHub Actions-Workflows.

  5. Wählen Sie Workflow ausführen aus und wählen Sie aus, dass der Workflow jetzt ausgeführt werden soll. Screenshot der Ausführung von GitHub Actions-Workflows.

Schritt 6: Überprüfen der Workflowausführung

  1. Öffnen Sie den abgeschlossenen Workflow und überprüfen Sie, ob der Buildauftrag erfolgreich ausgeführt wurde. Neben dem Auftrag wird ein grünes Häkchen angezeigt.

  2. Öffnen Sie Azure Machine Learning Studio und navigieren Sie zu nyc-taxi-pipeline-example. Stellen Sie sicher, dass alle Teile Ihres Auftrags abgeschlossen wurden (prep, transform, train, predict, score) und dass ein grünes Häkchen angezeigt wird.

    Screenshot der erfolgreichen Ausführung von Machine Learning Studio.

Bereinigen von Ressourcen

Wenn Ihre Ressourcengruppe und das Repository nicht mehr benötigt werden, bereinigen Sie die bereitgestellten Ressourcen, indem Sie die Ressourcengruppe und Ihr GitHub-Repository löschen.

Nächste Schritte