Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Sie können eine Azure DevOps pipeline verwenden, um den Lebenszyklus des maschinellen Lernens zu automatisieren. Einige der Vorgänge, die Sie automatisieren können, sind:
- Datenvorbereitung (Extraktion, Transformation, Laden)
- Training von maschinellen Lernmodellen mit bedarfsorientiertem horizontalem und vertikalem Skalieren.
- Bereitstellung von Machine Learning-Modellen als öffentliche oder private Webdienste.
- Überwachung bereitgestellter Machine Learning-Modelle (z. B. zur Leistungs- oder Datenabweichungsanalyse).
In diesem Artikel wird beschrieben, wie Sie eine Azure Pipeline erstellen, die ein Machine Learning-Modell erstellt und in Azure Machine Learning bereitstellt.
In diesem Lernprogramm werden Azure Machine Learning Python SDK v2 und Azure CLI ML-Erweiterung v2 verwendet.
Voraussetzungen
- Führen Sie das Lernprogramm „Ressourcen erstellen“ durch, um zu beginnen:
- Erstellen Sie einen Arbeitsbereich.
- Erstellen Sie einen cloudbasierten Computecluster , der für die Schulung Ihres Modells verwendet werden soll.
- Python 3.10 oder höher für die lokale Ausführung Azure ML SDK v2-Skripts installiert.
- Installieren Sie die Azure Machine Learning-Erweiterung für Azure Pipelines. Sie können diese Erweiterung über den Visual Studio marketplace installieren.
Schritt 1: Abrufen des Codes
Erstellen Sie einen Fork von folgendem Repository auf GitHub:
https://github.com/azure/azureml-examples
Schritt 2: Erstellen eines Projekts
Melden Sie sich bei Azure an. Suchen Sie nach Azure DevOps Organisationen und wählen Sie diese aus. Wählen Sie "Meine Organisationen anzeigen" aus. Wählen Sie die Organisation aus, die Sie verwenden möchten.
Erstellen Sie in Ihrer ausgewählten Organisation ein Projekt. Wenn Sie keine Projekte in Ihrer Organisation haben, wird ein Bildschirm " Erstellen eines Projekts für die ersten Schritte " angezeigt. Wählen Sie andernfalls die Schaltfläche Neues Projekt in der oberen rechten Ecke des Dashboards 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 einstellungen Project aus, und wählen Sie dann Service connections aus.
Wählen Sie Dienstverbindung erstellen, wählen Sie Azure Resource Manager und dann Next aus.
Verwenden Sie die Standardwerte für den Identitätstyp und die Anmeldeinformationen.
Erstellen Sie Ihre Dienstverbindung. Legen Sie die bevorzugte Bereichsebene, das Abonnement, die Ressourcengruppe und den Verbindungsnamen fest.
Schritt 4: Erstellen einer Pipeline
Wechseln Sie zu Pipelines, und wählen Sie dann "Pipeline erstellen" aus.
Wählen Sie GitHub als Speicherort des Quellcodes aus.
Möglicherweise werden Sie zu GitHub umgeleitet, um sich anzumelden. Wenn Sie sind, geben Sie Ihre GitHub Anmeldeinformationen ein.
Wenn die Liste der Repositorys angezeigt wird, wählen Sie Ihr Repository aus.
Möglicherweise werden Sie zu GitHub umgeleitet, um die Azure Pipelines-App zu installieren. Wenn Sie sind, wählen Sie "Genehmigen und Installieren" aus.
Wählen Sie die Starterpipeline aus. Sie überarbeiten die Startpipeline-Schablone.
Schritt 5: Erstellen einer YAML-Pipeline zum Übermitteln des Azure Machine Learning Auftrags
Löschen Sie die Startpipeline, und ersetzen Sie sie durch den folgenden YAML-Code. In dieser Pipeline führen Sie Folgendes aus:
- Verwenden Sie die Python Versionsaufgabe, um Python 3.10 einzurichten und die SDK-Anforderungen zu installieren.
- Verwenden Sie die 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 eine der folgenden Registerkarten aus, je nachdem, ob Sie eine Azure Resource Manager Dienstverbindung oder eine generische Dienstverbindung verwenden. Ersetzen Sie in der Pipeline YAML die Werte von Variablen durch Werte, die Ihren Ressourcen entsprechen.
- 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.10
inputs:
versionSpec: '>=3.10'
- 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 Job 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.
Wichtig
Beide Wartemechanismen in diesem Schritt (die Aufgabe AzureMLJobWaitTask@1 auf der Registerkarte Azure Resource Manager und die InvokeRESTAPI@1-Webhook-Registrierung auf der Registerkarte "Allgemein") hängen davon ab, dass Azure Machine Learning eine RunTerminated-Benachrichtigung an Azure DevOps zurücksendet, wenn der Auftrag abgeschlossen ist. Dieser Benachrichtigungspfad wird derzeit untersucht und könnte möglicherweise nicht wie erwartet abgeschlossen werden, was dazu führen könnte, dass der WaitFor*-Serverauftrag ein Timeout hat, anstatt den Status des Azure Machine Learning-Auftrags widerzuspiegeln. Wenn dieses Verhalten auftritt, rufen Sie den Auftragsstatus eines Agentauftrags ab, indem Sie az ml job show --query status verwenden, bis ein Endzustand (Completed, Failed, oder Canceled) zurückgegeben wird, und schließen Sie die Aufgabe mit einem entsprechenden Status ab.
- Verwenden einer Azure Resource Manager-Dienstverbindung
- Verwenden einer generischen Dienstverbindung
Wenn Sie eine Resource Manager Dienstverbindung verwenden, können Sie die Machine Learning Erweiterung verwenden. Sie können auf der Seite Azure DevOps Erweiterungen Marketplace nach dieser Erweiterung suchen oder direkt zur Seite Extension wechseln. Installieren Sie die Machine Learning Erweiterung.
Wichtig
Installieren Sie die erweiterung Machine Learning (classic) nicht. Es handelt sich um eine ältere Erweiterung, die nicht dieselbe Funktionalität bereitstellt.
Fügen Sie im Fenster "Pipelineüberprüfung" einen Serverauftrag hinzu. Wählen Sie im Schritteteil des Auftrags Assistent anzeigen aus, und suchen Sie dann nach AzureML. Wählen Sie die Aufgabe "AzureML-Auftrag warten" aus , und geben Sie dann die Informationen für den Auftrag an.
Der Vorgang verfügt über vier Eingaben: Service Connection, Azure Resource Group Name, AzureML Workspace Name und AzureML Job Name. Geben Sie diese Eingaben an. Das resultierende YAML für diese Schritte ähnelt dem folgenden Beispiel:
Hinweis
- Der Azure Machine Learning Job-Wartetask läuft auf einem Server-Job, was keine teuren Ressourcen aus dem Agentenpool verwendet und keine zusätzlichen Kosten verursacht. Serveraufträge (angegeben durch
pool: server) werden auf demselben Computer wie Ihre Pipeline ausgeführt. Weitere Informationen finden Sie unter Serveraufträge. - Ein Azure Machine Learning Wartetask kann nur auf einen Auftrag warten. Sie müssen für jeden Auftrag, auf den Sie warten möchten, eine separate Aufgabe einrichten.
- Der Azure Machine Learning Auftragswartevorgang kann maximal zwei Tage lang warten. Dieser Grenzwert 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:
# Save the name of the azureMl job submitted in the previous step to a variable. It will be used as an input 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
Wählen Sie "Speichern" und "Ausführen" aus. Wenn der Wartemechanismus in Schritt 6 wie geplant funktioniert, wartet die Pipeline auf den Abschluss des Azure Machine Learning Auftrags und beendet den Vorgang unter WaitForJobCompletion mit demselben Status wie der Azure Machine Learning Auftrag. Zum Beispiel:
Azure Machine Learning Job
Succeeded== Azure DevOps Aufgabe unterWaitForJobCompletionJobSucceededAzure Machine Learning Job
Failed== Azure DevOps Aufgabe unterWaitForJobCompletionJobFailedAzure Machine Learning Aufgabe
Cancelled== Azure DevOps Aufgabe innerhalbWaitForJobCompletionAufgabeCancelled
Hinweis
Aufgrund des Problems, das in Schritt 6 hervorgehoben wurde, kann beim WaitFor*-Job ein Timeout auftreten, anstatt den Status des Azure Machine Learning-Auftrags widerzuspiegeln. Verwenden Sie Azure Machine Learning Studio, um das tatsächliche Auftragsergebnis zu bestätigen, bis der Benachrichtigungspfad wiederhergestellt wird.
Tipp
Sie können den vollständigen Azure Machine Learning Auftrag in Azure Machine Learning Studio anzeigen.
Bereinigen von Ressourcen
Wenn Sie nicht beabsichtigen, die Pipeline weiterhin zu verwenden, löschen Sie Ihr Azure DevOps Projekt. Löschen Sie im Azure-Portal Ihre Ressourcengruppe und Azure Machine Learning Instanz.