Az Azure Pipelines használata az Azure Machine Learninggel

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

Egy Azure DevOps folyamat használatával automatizálhatja a gépi tanulási életciklust. Az automatizálható műveletek némelyike a következő:

  • Adat-előkészítés (kinyerési, átalakítási, betöltési műveletek).
  • Gépi tanulási modellek betanítása igény szerinti vízszintes és vertikális felskálázással.
  • Gépi tanulási modellek üzembe helyezése nyilvános vagy privát webszolgáltatásként.
  • Az üzembe helyezett gépi tanulási modellek monitorozása (például teljesítmény- vagy adateltolódás-elemzéshez).

Ez a cikk azt ismerteti, hogyan hozhat létre egy Azure folyamatot, amely egy gépi tanulási modellt hoz létre, és üzembe helyezi azt Azure Machine Learning.

Ez az oktatóanyag Azure Machine Learning Python SDK v2 és Azure CLI ML-bővítményt használ 2.

Előfeltételek

1. lépés: A kód lekérése

Forkolja a következő adattárat a(z) GitHub-ról:

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

2. lépés: Projekt létrehozása

Jelentkezzen be az Azure-ba. Keresse meg és válassza ki a Azure DevOps szervezeteket. Válassza a Saját szervezetek megtekintése lehetőséget. Válassza ki a használni kívánt szervezetet.

A kijelölt szervezeten belül hozzon létre egy projektet. Ha nincsenek projektjei a szervezetében, látni fog egy Projekt létrehozása a kezdéshez képernyőt. Ellenkező esetben válassza a New Project gombot az irányítópult jobb felső sarkában.

3. lépés: Szolgáltatáskapcsolat létrehozása

Meglévő szolgáltatáskapcsolatot is használhat.

A Azure portálon való hitelesítéshez Azure Resource Manager kapcsolatra van szükség.

  1. A Azure DevOps válassza a Project beállítások, majd a Szolgáltatás-kapcsolatok lehetőséget.

  2. Válassza a A szolgáltatáskapcsolat létrehozása, a Azure Resource Manager, majd a Next lehetőséget.

  3. Használja az identitástípus és a hitelesítő adatok alapértelmezett értékeit.

  4. Hozza létre a szolgáltatáskapcsolatot. Adja meg a kívánt hatókörszintet, előfizetést, erőforráscsoportot és kapcsolatnevet.

    Az ARM-szolgáltatáskapcsolat képernyőképe.

4. lépés: Folyamat létrehozása

  1. Lépjen a Folyamatok elemre, majd válassza a Folyamat létrehozása lehetőséget.

  2. A forráskód helyeként válassza a GitHub lehetőséget.

  3. Előfordulhat, hogy átirányítanak a GitHubhoz való bejelentkezéshez. Ha így van, adja meg a GitHub hitelesítő adatait.

  4. Amikor megjelenik az adattárak listája, válassza ki az adattárat.

  5. Előfordulhat, hogy a rendszer átirányít a GitHubra az Azure Pipelines alkalmazás telepítéséhez. Ha így van, válassza a Jóváhagyás > telepítés lehetőséget.

  6. Válassza ki az Indító csővezetéket. Frissíti a kezdőcsővezeték-sablont.

5. lépés: YAML-folyamat létrehozása a Azure Machine Learning feladat elküldéséhez

Törölje a kezdőfolyamatot, és cserélje le a következő YAML-kódra. Ebben a folyamatban a következőt kell elvégzned:

  • A Python verziófeladat használatával állítsa be a Python 3.10-et, és telepítse az SDK-követelményeket.
  • A Bash-feladattal bash-szkripteket futtathat a Azure Machine Learning SDK-hoz és parancssori felülethez.
  • A Azure CLI feladat használatával küldjön be egy Azure Machine Learning feladatot.

Válassza az alábbi lapok egyikét attól függően, hogy Azure Resource Manager szolgáltatáskapcsolatot vagy általános szolgáltatáskapcsolatot használ. A folyamat YAML-ben cserélje le a változók értékeit az erőforrásoknak megfelelő értékekre.

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"

6. lépés: Várja meg, amíg a Azure Machine Learning feladat befejeződik

Az 5. lépésben hozzáadott egy feladatot egy Azure Machine Learning feladat elküldéséhez. Ebben a lépésben egy másik feladatot ad hozzá, amely a Azure Machine Learning feladat befejezésére vár.

Fontos

A lépés mindkét várakozási mechanizmusa (a Azure Resource Manager lapon található AzureMLJobWaitTask@1 feladat és az Általános lapon található InvokeRESTAPI@1 webhook-regisztráció) attól függ, Azure Machine Learning RunTerminated értesítést küld-e vissza Azure DevOps a feladat befejezésekor. Ez az értesítési útvonal jelenleg vizsgálat alatt áll, és előfordulhat, hogy nem a várt módon fejeződik be, ezért a WaitFor* kiszolgálói feladat időtúllépést okoz ahelyett, hogy a Azure Machine Learning feladat állapotát tükrözné. Ha ezt a viselkedést tapasztalja, kérdezze le a feladat állapotát egy ügynökfeladatból az ml job show --query status által, amíg egy terminálállapotot (Completed, Failed vagy Canceled) nem kap, majd lépjen ki a feladatból a kapott állapotnak megfelelően.

Ha Resource Manager szolgáltatáskapcsolatot használ, használhatja a Machine Learning bővítményt. Ezt a bővítményt a Marketplace Azure DevOps bővítményeiben vagy közvetlenül a extension lapra kereshet. Telepítse a Machine Learning bővítményt.

Fontos

Ne telepítse a Machine Learning (klasszikus) bővítményt. Ez egy régebbi bővítmény, amely nem biztosítja ugyanazt a funkciót.

A Folyamat áttekintése ablakban adjon hozzá egy kiszolgálói feladatot. A feladat lépései között válassza az Asszisztens megjelenítése lehetőséget, majd keresse meg az AzureML-t. Válassza ki az AzureML-feladat várakozási feladatát, majd adja meg a feladat adatait.

A tevékenység négy bemenettel rendelkezik: Service Connection, Azure Resource Group Name, AzureML Workspace Name és AzureML Job Name. Adja meg ezeket a bemeneteket. A következő lépésekhez kapott YAML hasonló a következő példához:

Megjegyzés

  • A Azure Machine Learning feladat várakozási feladata egy kiszolgálói feladaton fut, amely nem használ drága ügynökkészlet-erőforrásokat, és nem igényel további díjakat. A kiszolgálói feladatok (jelezve pool: server) ugyanazon a gépen futnak, mint a pipeline. További információ: Kiszolgálói feladatok.
  • Egy Azure Machine Learning feladat várakozási művelete csak egy műveletre várhat. Minden olyan feladathoz külön feladatot kell beállítania, amelyre várni szeretne.
  • A Azure Machine Learning feladat várakozási feladata legfeljebb két napig várakozhat. Ez a korlát egy szigorú határ, amelyet az Azure DevOps csővezetékek állítanak be.
- 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)

7. lépés: A folyamat elküldése és a folyamat futtatásának ellenőrzése

Válassza a Mentés és futtatás lehetőséget. Amikor a 6. lépés várakozási mechanizmusa a tervezett módon működik, a folyamat megvárja, amíg a Azure Machine Learning feladat befejeződik, és a feladatot a WaitForJobCompletion alatt fejezi be, ugyanazzal az állapottal, mint a Azure Machine Learning feladat. Például:

  • Azure Machine Learning feladat Succeeded == Azure DevOps munkafolyamat WaitForJobCompletion feladat Succeeded

  • Azure Machine Learning feladat Failed == Azure DevOps munkafolyamat WaitForJobCompletion feladat Failed

  • Azure Machine Learning feladat Cancelled == Azure DevOps munkafolyamat WaitForJobCompletion feladat Cancelled

Megjegyzés

A 6. lépésben feltárt probléma miatt előfordulhat, hogy a WaitFor* feladat időtúllépést tapasztal ahelyett, hogy az Azure Machine Learning feladat állapotát tükrözné. A Azure Machine Learning stúdió használatával erősítse meg a feladat tényleges eredményét az értesítési útvonal visszaállításáig.

Tipp

A teljes Azure Machine Learning feladatot a Azure Machine Learning stúdió webhelyen tekintheti meg.

Erőforrások törlése

Ha nem tervezi folytatni a folyamat használatát, törölje a Azure DevOps projektet. Az Azure portálon törölje az erőforráscsoportot és az Azure Machine Learning példányt.