Usare GitHub Actions con Azure Machine Learning

SI APPLICA A:Estensione ml dell'interfaccia della riga di comando di Azure v2 (corrente)SDK di Python azure-ai-ml v2 (corrente)

Iniziare a usare GitHub Actions per eseguire il training di un modello in Azure Machine Learning.

Questo articolo illustra come creare un flusso di lavoro di GitHub Actions che compila e distribuisce un modello di Machine Learning in Azure Machine Learning. Si eseguirà il training di un modello di regressione lineare scikit-learn nel set di dati NYC Taxi.

GitHub Actions usa un file YAML (.yml) del flusso di lavoro /.github/workflows/ nel percorso nel repository. Questa definizione contiene i vari passaggi e i parametri che costituiscono il flusso di lavoro.

Prerequisiti

Prima di seguire la procedura descritta in questo articolo, assicurarsi di disporre dei prerequisiti seguenti:

  • Un'area di lavoro di Azure Machine Learning. Se non è disponibile, seguire la procedura descritta nell'articolo Avvio rapido: Creare risorse dell'area di lavoro per crearne una.

  • Per installare l’SDK Python v2, usare il comando seguente:

    pip install azure-ai-ml azure-identity
    

    Per aggiornare un'installazione esistente di SDK alla versione più recente, usare il comando seguente:

    pip install --upgrade azure-ai-ml azure-identity
    

    Per altre informazioni, vedere Installare Python SDK v2 per Azure Machine Learning.

  • Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito.

Passaggio 1: ottenere il codice

Creare una copia tramite fork del repository seguente in GitHub:

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

Clonare il repository con fork in locale.

git clone https://github.com/YOUR-USERNAME/azureml-examples

Passaggio 2: eseguire l'autenticazione con Azure

È necessario prima definire come eseguire l'autenticazione con Azure. È possibile usare un'entità servizio o OpenID Connect.

Generare le credenziali per la distribuzione

Creare un'entità servizio con il comando az ad sp create-for-rbacdell'interfaccia della riga di comando di Azure. Eseguire questo comando con Azure Cloud Shell nel portale di Azure oppure selezionando il pulsante Prova.

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

Il parametro --json-auth è disponibile nelle versioni >dell'interfaccia della riga di comando di Azure = 2.51.0. Versioni precedenti a questo utilizzo --sdk-auth con un avviso di deprecazione.

Nell'esempio precedente sostituire i segnaposto con l'ID sottoscrizione e il nome del gruppo di risorse. L'output è un oggetto JSON con le credenziali di assegnazione di ruolo che forniscono l'accesso all'app del servizio app simile a questo esempio. Copiare l'oggetto JSON per un uso successivo.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    (...)
  }

Creare segreti

  1. In GitHub, andare al proprio repository.

  2. Passare a Impostazioni nel menu di spostamento.

  3. Selezionare Sicurezza > Segreti e variabili > Azioni.

    Screenshot dell'aggiunta di un segreto

  4. Selezionare Nuovo segreto repository.

  5. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto il nome AZURE_CREDENTIALS.

  6. Selezionare Aggiungi segreto.

Passaggio 3: aggiornare setup.sh per connettersi all'area di lavoro di Azure Machine Learning

Sarà necessario aggiornare le variabili del file di installazione dell'interfaccia della riga di comando in modo che corrispondano all'area di lavoro.

  1. Nel repository con fork passare a azureml-examples/cli/.

  2. Modificare setup.sh e aggiornare queste variabili nel file.

    Variabile Descrizione
    GROUP nome del gruppo di risorse
    LOCATION Posizione dell'area di lavoro (ad esempio: eastus2)
    AREA DI LAVORO Nome dell'area di lavoro di Azure Machine Learning

Passaggio 4: aggiornare pipeline.yml con il nome del cluster di elaborazione

Si userà un file pipeline.yml per distribuire la pipeline di Azure Machine Learning. Si tratta di una pipeline di Machine Learning e non di una pipeline DevOps. È necessario eseguire questo aggiornamento solo se si usa un nome diverso da cpu-cluster per il nome del cluster del computer.

  1. Nel repository con fork passare a azureml-examples/cli/jobs/pipelines/nyc-taxi/pipeline.yml.
  2. Ogni volta che viene visualizzato compute: azureml:cpu-cluster, aggiornare il valore di cpu-cluster con il nome del cluster di elaborazione. Ad esempio, se il cluster è denominato my-cluster, il nuovo valore sarà azureml:my-cluster. Sono disponibili cinque aggiornamenti.

Passaggio 5: eseguire il flusso di lavoro di GitHub Actions

Il flusso di lavoro esegue l'autenticazione con Azure, configura l'interfaccia della riga di comando di Azure Machine Learning e usa l'interfaccia della riga di comando per eseguire il training di un modello in Azure Machine Learning.

Il file del flusso di lavoro è costituito da una sezione trigger e processi:

  • Un trigger avvia il flusso di lavoro nella sezione on. Il flusso di lavoro viene eseguito per impostazione predefinita in base a una pianificazione cronologica e quando viene effettuata una richiesta pull da rami e percorsi corrispondenti. Altre informazioni sugli eventi che attivano i flussi di lavoro.
  • Nella sezione dei processi del flusso di lavoro si estrae il codice e si accede ad Azure con il segreto dell'entità servizio.
  • La sezione processi include anche un'azione di installazione che installa e configura l'interfaccia della riga di comando di Machine Learning (v2). Dopo aver installato l'interfaccia della riga di comando, l'azione di esecuzione del processo esegue il file di Azure Machine Learning pipeline.yml per eseguire il training di un modello con i dati dei taxi di New York.

Abilitare il flusso di lavoro

  1. Nel repository con fork aprire .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml e verificare che il flusso di lavoro sia simile al seguente.

    name: cli-jobs-pipelines-nyc-taxi-pipeline
    on:
      workflow_dispatch:
      schedule:
        - cron: "0 0/4 * * *"
      pull_request:
        branches:
          - main
          - sdk-preview
        paths:
          - cli/jobs/pipelines/nyc-taxi/**
          - .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml
          - cli/run-pipeline-jobs.sh
          - cli/setup.sh
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: check out repo
          uses: actions/checkout@v2
        - name: azure login
          uses: azure/login@v1
          with:
            creds: ${{secrets.AZURE_CREDENTIALS}}
        - name: setup
          run: bash setup.sh
          working-directory: cli
          continue-on-error: true
        - name: run job
          run: bash -x ../../../run-job.sh pipeline.yml
          working-directory: cli/jobs/pipelines/nyc-taxi
    
  2. Selezionare Visualizza esecuzioni.

  3. Abilitare i flussi di lavoro selezionando Comprendo i flussi di lavoro, procedere e abilitarli.

  4. Selezionare il flusso di lavoro cli-jobs-pipelines-nyc-taxi-pipelinee scegliere Abilita flusso di lavoro. Screenshot dell'abilitazione del flusso di lavoro di GitHub Actions.

  5. Selezionare Esegui flusso di lavoro e scegliere l'opzione per eseguire flusso di lavoro ora. Screenshot dell'esecuzione del flusso di lavoro di GitHub Actions.

Passaggio 6: verificare l'esecuzione del flusso di lavoro

  1. Aprire l'esecuzione del flusso di lavoro completata e verificare che il processo di compilazione sia stato eseguito correttamente. Accanto al processo verrà visualizzato un segno di spunta verde.

  2. Aprire lo studio di Azure Machine Learning e passare a nyc-taxi-pipeline-example. Verificare che ogni parte del processo (preparazione, trasformazione, training, stima, punteggio) sia stata completata e che venga visualizzato un segno di spunta verde.

    Screenshot dell'esecuzione corretta di Machine Learning Studio.

Pulire le risorse

Quando il gruppo di risorse e il repository non sono più necessari, pulire le risorse distribuite eliminando il gruppo di risorse e il repository GitHub.

Passaggi successivi