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
- Schließen Sie Ressourcen erstellen, um zu beginnen ab, um:
- Erstellen eines Arbeitsbereichs
- einen cloudbasierten Computeclusters, der für das Training Ihres Modells verwendet werden soll, zu erstellen
- Azure Machine Learning-Erweiterung für Azure Pipelines. Diese Erweiterung kann über den Visual Studio-Marketplace unter https://marketplace.visualstudio.com/items?itemName=ms-air-aiagility.azureml-v2 installiert werden.
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.
Wählen Sie in Azure DevOps die Option Projekteinstellungen aus, und öffnen Sie die Seite Dienstverbindungen.
Wählen Sie Dienstverbindung erstellen und dann Azure Resource Manager aus.
Wählen Sie die Standardauthentifizierungsmethode, Dienstprinzipal (automatisch), aus.
Erstellen Sie Ihre Dienstverbindung. Legen Sie die Bereichsebene, das Abonnement, die Ressourcengruppe und den Namen der Dienstverbindung fest.
Schritt 4: Erstellen einer Pipeline
Wechseln Sie zu Pipelines, und wählen Sie dann Pipeline erstellen aus.
Führen Sie die Schritte des Assistenten aus. Dabei wählen Sie zuerst GitHub als Speicherort Ihres Quellcodes aus.
Möglicherweise werden Sie zu GitHub weitergeleitet, um sich anzumelden. Geben Sie in diesem Fall Ihre Anmeldeinformationen für GitHub ein.
Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.
Sie werden möglicherweise zu GitHub weitergeleitet, um die Azure Pipelines-App zu installieren. Wählen Sie in diesem Fall Genehmigen und installieren aus.
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.
- Verwenden einer Azure Resource Manager-Dienstverbindung
- Verwenden einer generischen Dienstverbindung
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.
- Verwenden einer Azure Resource Manager-Dienstverbindung
- Verwenden einer generischen Dienstverbindung
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.