Verwenden von Azure Pipelines mit Azure Machine Learning

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Sie können eine Azure DevOps-Pipeline verwenden, um den Machine Learning(ML)-Lebenszyklus zu automatisieren. Einige der Vorgänge, die Sie automatisieren können, sind:

  • Datenvorbereitung (Extrahieren, Transformieren, Ladenvorgänge)
  • Training von ML-Modellen mit bedarfsgerechter horizontaler und vertikaler Skalierung
  • Bereitstellung von Machine Learning-Modellen als öffentliche oder private Webdienste
  • Überwachung bereitgestellter ML-Modelle (z. B. für Leistungs- oder Datendriftanalyse)

In diesem Artikel erfahren Sie, wie Sie eine Azure-Pipeline erstellen, die ein Machine Learning-Modell erstellt und für Azure Machine Learning bereitstellt.

Dieses Lernprogramm verwendet das Azure Machine Learning Python-SDK v2 und die Azure CLI ML-Erweiterung v2.

Voraussetzungen

Schritt 1: Abrufen des Codes

Verzweigen Sie das folgende Repository auf GitHub:

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

Schritt 2: Anmelden bei Azure Pipelines

Melden Sie sich bei Azure Pipelines an. Nach der Anmeldung wechselt Ihr Browser zu https://dev.azure.com/my-organization-name und zeigt Ihr Azure DevOps-Dashboard an.

Erstellen Sie in Ihrer ausgewählten Organisation ein Projekt. Sollten in Ihrer Organisation noch keine Projekte vorhanden sein, wird der Bildschirm Erstellen Sie als ersten Schritt ein Projekt. angezeigt. Wählen Sie andernfalls in der rechten oberen Ecke des Dashboards die Schaltfläche Neues Projekt aus.

Schritt 3: Erstellen einer Dienstverbindung

Sie können eine vorhandene Dienstverbindung verwenden.

Sie benötigen eine Azure Resource Manager-Verbindung, um sich beim Azure-Portal zu authentifizieren.

  1. Wählen Sie in Azure DevOps die Option Projekteinstellungen aus, und öffnen Sie die Seite Dienstverbindungen.

  2. Wählen Sie + Neue Dienstverbindung und wählen Sie Azure Resource Manager.

  3. Wählen Sie die Standardauthentifizierungsmethode, Dienstprinzipal (automatisch), aus.

  4. Erstellen Sie Ihre Dienstverbindung. Legen Sie die Bereichsebene, das Abonnement, die Ressourcengruppe und den Namen der Dienstverbindung fest.

    Screenshot of ARM service connection.

Schritt 4: Erstellen einer Pipeline

  1. Navigieren Sie zu Pipelines, und wählen Sie Neue Pipeline aus.

  2. Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.

  3. Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.

  4. Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.

  5. Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen und installieren aus.

  6. Wählen Sie die Starterpipeline aus. Sie aktualisieren die Starterpipeline-Vorlage.

Schritt 5: Erstellen der YAML-Pipeline zum Übermitteln des Azure Machine Learning-Auftrags

Löschen Sie die Starterpipeline und ersetzen Sie sie durch den folgenden YAML-Code. In dieser Pipeline geschieht Folgendes:

  • Verwendung der Python-Aufgabe „Version“, um Python 3.8 einzurichten und die SDK-Voraussetzungen zu installieren.
  • Verwendung der Bash-Aufgabe, um Bash-Skripts für das Azure Machine Learning-SDK und die CLI auszuführen.
  • Verwenden Sie die Azure CLI-Aufgabe, um einen Azure Machine Learning-Auftrag zu übermitteln.

Wählen Sie die folgenden Registerkarten aus, je nachdem, ob Sie eine Azure Resource Manager-Dienstverbindung oder eine generische Dienstverbindung verwenden. Ersetzen Sie in der Pipeline-YAML den Wert von Variablen durch Ihre Ressourcen.

name: submit-azure-machine-learning-job

trigger:
- none

variables:
  service-connection: 'machine-learning-connection' # replace with your service connection name
  resource-group: 'machinelearning-rg' # replace with your resource group name
  workspace: 'docs-ws' # replace with your workspace name

jobs:
- job: SubmitAzureMLJob
  displayName: Submit AzureML Job
  timeoutInMinutes: 300
  pool:
    vmImage: ubuntu-latest
  steps:
  - task: UsePythonVersion@0
    displayName: Use Python >=3.8
    inputs:
      versionSpec: '>=3.8'

  - bash: |
      set -ex

      az version
      az extension add -n ml
    displayName: 'Add AzureML Extension'

  - task: AzureCLI@2
    name: submit_azureml_job_task
    displayName: Submit AzureML Job Task
    inputs:
      azureSubscription: $(service-connection)
      workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
      scriptLocation: inlineScript
      scriptType: bash
      inlineScript: |
      
        # submit component job and get the run name
        job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)

        # Set output variable for next task
        echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"

Schritt 6: Warten, bis der Azure Machine Learning-Auftrag abgeschlossen ist

In Schritt 5 haben Sie einen Auftrag hinzugefügt, um einen Azure Machine Learning-Auftrag zu übermitteln. In diesem Schritt fügen Sie einen weiteren Auftrag hinzu, der auf den Abschluss des Azure Machine Learning-Auftrags wartet.

Wenn Sie eine Azure Resource Manager-Dienstverbindung verwenden, können Sie die Erweiterung „Machine Learning” verwenden. Sie können im Marketplace für Azure DevOps-Erweiterungen nach dieser Erweiterung suchen oder direkt zur Erweiterung wechseln. Installieren der Erweiterung „Machine Learning”

Wichtig

Installieren Sie nicht versehentlich die Erweiterung Machine Learning (classic). Es handelt sich um eine ältere Erweiterung, die nicht die gleiche Funktionalität bietet.

Fügen Sie im Pipelineüberprüfungsfenster einen Serverauftrag hinzu. Wählen Sie im Schrittteil des Auftrags die Option Assistent anzeigen aus, und suchen Sie nach AzureML. Wählen Sie die Aufgabe AzureML Job Wait (Warten auf AzureML-Auftrag) aus, und geben Sie die Informationen für den Auftrag ein.

Die Aufgabe verfügt über vier Eingaben: Service Connection, Azure Resource Group Name, AzureML Workspace Name und AzureML Job Name. Füllen Sie diese Eingaben aus. Das resultierende YAML für diese Schritte ähnelt dem folgenden Beispiel:

Hinweis

  • Die Azure Machine Learning-Auftragswarteaufgabe wird auf einem Serverauftrag ausgeführt, der keine teuren Agentpoolressourcen aufbraucht und keine zusätzlichen Gebühren erfordert. Serveraufträge (angegeben durch pool: server) werden auf demselben Computer wie Ihre Pipeline ausgeführt. Weitere Informationen finden Sie unter Serveraufträge.
  • Eine Azure Machine Learning-Auftragswarteaufgabe kann nur auf einen Auftrag warten. Sie müssen eine separate Aufgabe für jeden Auftrag einrichten, auf den Sie warten möchten.
  • Die Azure Machine Learning-Auftragswarteaufgabe kann maximal 2 Tage warten. Dies ist ein harter Grenzwert, der von Azure DevOps Pipelines festgelegt wird.
- job: WaitForAzureMLJobCompletion
  displayName: Wait for AzureML Job Completion
  pool: server
  timeoutInMinutes: 0
  dependsOn: SubmitAzureMLJob
  variables: 
    # We are saving the name of azureMl job submitted in previous step to a variable and it will be used as an inut to the AzureML Job Wait task
    azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ] 
  steps:
  - task: AzureMLJobWaitTask@1
    inputs:
      serviceConnection: $(service-connection)
      resourceGroupName: $(resource-group)
      azureMLWorkspaceName: $(workspace)
      azureMLJobName: $(azureml_job_name_from_submit_job)

Schritt 7: Übermitteln der Pipeline und Überprüfen der Pipelineausführung

Klicken Sie auf Speichern und ausführen. Die Pipeline wartet, bis der Azure Machine Learning-Auftrag abgeschlossen ist, und beendet die Aufgabe unter WaitForJobCompletion mit demselben Status wie der Azure Machine Learning-Auftrag. Beispiel: Azure Machine Learning-Auftrag Succeeded == Azure DevOps-Aufgabe unter WaitForJobCompletion Auftrag Succeeded Azure Machine Learning-Auftrag Failed == Azure DevOps-Aufgabe unter WaitForJobCompletion Auftrag Failed Azure Machine Learning-Auftrag Cancelled == Azure DevOps-Aufgabe unter WaitForJobCompletion Auftrag Cancelled

Tipp

Sie können den vollständigen Azure Machine Learning-Auftrag in Azure Machine Learning Studio anzeigen.

Bereinigen von Ressourcen

Wenn Sie Ihre Pipeline nicht weiterhin verwenden möchten, löschen Sie Ihr Azure DevOps-Projekt. Löschen Sie im Azure-Portal Ihre Ressourcengruppe und Azure Machine Learning-Instanz.