Sdílet prostřednictvím


Použití Azure Pipelines se službou Azure Machine Learning

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

K automatizaci životního cyklu strojového učení můžete použít kanál Azure DevOps. Mezi operace, které můžete automatizovat, patří:

  • Příprava dat (extrakce, transformace, operace načítání)
  • Trénování modelů strojového učení s horizontálním škálováním a vertikálním škálováním na vyžádání.
  • Nasazení modelů strojového učení jako veřejných nebo privátních webových služeb
  • Monitorování nasazených modelů strojového učení (například pro analýzu výkonu nebo posunu dat)

Tento článek popisuje, jak vytvořit kanál Azure, který sestaví model strojového učení a nasadí ho do služby Azure Machine Learning.

V tomto kurzu se používá sada Azure Machine Learning Python SDK v2 a rozšíření Azure CLI ML v2.

Požadavky

Krok 1: Získání kódu

Vytvoření forku následujícího úložiště z GitHubu:

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

Krok 2: Vytvoření projektu

Přihlaste se k Azure. Vyhledejte a vyberte organizace Azure DevOps. Vyberte Zobrazit mé organizace. Vyberte organizaci, kterou chcete použít.

Ve vybrané organizaci vytvořte projekt. Pokud ve vaší organizaci nemáte žádné projekty, zobrazí se obrazovka Vytvořit projekt, který vám umožní začít . V opačném případě vyberte tlačítko Nový projekt v pravém horním rohu řídicího panelu.

Krok 3: Vytvoření připojení služby

Můžete použít existující připojení služby.

K ověření pomocí webu Azure Portal potřebujete připojení Azure Resource Manageru.

  1. V Azure DevOps vyberte Nastavení projektu a pak vyberte Připojení služeb.

  2. Vyberte Vytvořit připojení služby, vyberte Azure Resource Manager a pak vyberte Další.

  3. Použijte výchozí hodnoty pro typ identity a přihlašovací údaje.

  4. Vytvořte připojení ke službě. Nastavte upřednostňovanou úroveň oboru, předplatné, skupinu prostředků a název připojení.

    Snímek obrazovky s připojením služby ARM

Krok 4: Vytvoření kanálu

  1. Přejděte na Kanály a pak vyberte Vytvořit kanál.

  2. Jako umístění zdrojového kódu vyberte GitHub .

  3. Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud jste, zadejte svoje přihlašovací údaje GitHubu.

  4. Až se zobrazí seznam úložišť, vyberte úložiště.

  5. K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud jste, vyberte Schválit a nainstalovat.

  6. Vyberte počáteční kanál. Aktualizujete výchozí šablonu pipeline.

Krok 5: Vytvoření kanálu YAML pro odeslání úlohy Azure Machine Learning

Odstraňte počáteční kanál a nahraďte ho následujícím kódem YAML. V tomto potrubí:

  • Pomocí úlohy verze Pythonu nastavte Python 3.10 a nainstalujte požadavky sady SDK.
  • Pomocí úlohy Bash spusťte skripty Bash pro sadu Azure Machine Learning SDK a rozhraní příkazového řádku.
  • Pomocí úlohy Azure CLI odešlete úlohu Azure Machine Learning.

V závislosti na tom, zda používáte připojení služby Azure Resource Manager nebo obecné připojení ke službě, vyberte jednu z následujících karet. V kanálu YAML nahraďte hodnoty proměnných hodnotami, které odpovídají vašim prostředkům.

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"

Krok 6: Počkejte na dokončení úlohy Azure Machine Learning

V kroku 5 jste přidali úlohu pro odeslání úlohy Azure Machine Learning. V tomto kroku přidáte další úlohu, která čeká na dokončení úlohy Azure Machine Learning.

Pokud používáte připojení služby Resource Manager, můžete použít rozšíření Machine Learning. Toto rozšíření můžete vyhledat na Marketplace s rozšířeními Azure DevOps nebo přejít přímo na stránku rozšíření. Nainstalujte rozšíření Machine Learning.

Důležité

Neinstalujte rozšíření Machine Learning (Classic). Jedná se o starší rozšíření, které neposkytuje stejné funkce.

V okně revize kanálu přidejte úlohu serveru. V části úlohy vyberte Zobrazit asistenta a vyhledejte AzureML. Vyberte úlohu AzureML Job Wait a zadejte informace pro úlohu.

Úkol má čtyři vstupy: Service Connection, Azure Resource Group Name, AzureML Workspace Namea AzureML Job Name. Zadejte tyto vstupy. Výsledný YAML pro tyto kroky je podobný následujícímu příkladu:

Poznámka:

  • Úloha čekání Azure Machine Learning běží na serverové úloze, která nepoužívá nákladné prostředky fondu agentů a nevyžaduje žádné další poplatky. Úlohy serveru (označené pool: server) běží na stejném počítači jako váš kanál. Další informace naleznete v tématu Úlohy serveru.
  • Jedna čekací úloha v Azure Machine Learning může čekat pouze na jednu úlohu. Pro každou úlohu, na kterou chcete čekat, musíte nastavit samostatný úkol.
  • Úloha čekání na úlohu v Azure Machine Learning může čekat maximálně dva dny. Tento limit je pevný limit nastavený kanály Azure DevOps.
- 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)

Krok 7: Odeslání kanálu a ověření spuštění kanálu

Zvolte Uložit a Spustit. Potrubí čeká na dokončení úlohy Azure Machine Learning a poté ukončí úlohu pod WaitForJobCompletion se stejným stavem, jaký má úloha Azure Machine Learning. Například:

  • Úloha Succeeded Azure Machine Learning == Úloha Azure DevOps v rámci WaitForJobCompletion úlohy Succeeded

  • Úloha Failed Azure Machine Learning == Úloha Azure DevOps v rámci WaitForJobCompletion úlohy Failed

  • Úloha Cancelled Azure Machine Learning == Úloha Azure DevOps v rámci WaitForJobCompletion úlohy Cancelled

Návod

Kompletní úlohu Azure Machine Learning můžete zobrazit v studio Azure Machine Learning.

Vyčištění prostředků

Pokud neplánujete pokračovat v používání kanálu, odstraňte projekt Azure DevOps. Na webu Azure Portal odstraňte skupinu prostředků a instanci služby Azure Machine Learning.