Condividi tramite


Usare GitHub Actions con Azure Machine Learning

SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK 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 esegue il training di un modello di regressione lineare scikit-learn nel set di dati NYC Taxi.

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

Prerequisiti

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

Prima di tutto, definire come eseguire l'autenticazione con Azure. L'opzione consigliata e più sicura consiste nell'accedere usando OpenID Connect con un'applicazione Microsoft Entra o un'identità gestita assegnata dall'utente. Se necessario, è anche possibile accedere utilizzando un'entità servizio e un segreto. Questo approccio è meno sicuro e non consigliato.

Generare le credenziali per la distribuzione

Per usare l'azione di accesso di Azure con OIDC, è necessario configurare una credenziale di identità federata in un'applicazione Microsoft Entra o in un'identità gestita assegnata dall'utente.

Opzione 1: Applicazione Microsoft Entra

Opzione 2: Identità gestita assegnata dall'utente

Creare segreti

È necessario fornire l'ID client, l'ID directory (tenant) e l'ID sottoscrizione della tua applicazione all'azione di accesso. Questi valori possono essere forniti direttamente nel flusso di lavoro oppure possono essere archiviati nei segreti gitHub e riportati nel flusso di lavoro. Salvare i valori come segreti GitHub è l'opzione più sicura.

  1. In GitHub, andare al proprio repository.

  2. Selezionare Sicurezza > Segreti e variabili > Azioni.

    Screenshot dell'aggiunta di un segreto

  3. Seleziona nuovo segreto del repository.

    Nota

    Per migliorare la sicurezza del flusso di lavoro nei repository pubblici, usare i segreti dell'ambiente anziché i segreti del repository. Se è richiesta l'approvazione dell'ambiente, un processo non può accedere ai segreti dell'ambiente finché uno dei revisori richiesti non lo approvi.

  4. Creare segreti per AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Copiare questi valori dall'applicazione Microsoft Entra o dall'identità gestita assegnata dall'utente per i segreti GitHub:

    Segreto GitHub Applicazione Microsoft Entra o identità gestita assegnata dall'utente
    AZURE_CLIENT_ID ID del cliente
    AZURE_SUBSCRIPTION_ID ID sottoscrizione
    AZURE_TENANT_ID ID della directory (tenant)

    Nota

    Per motivi di sicurezza, è consigliabile usare i segreti di GitHub anziché passare i valori direttamente al flusso di lavoro.

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

Aggiornare le variabili dell'interfaccia a riga di comando del file di configurazione 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)
    WORKSPACE Nome dell'area di lavoro di Azure Machine Learning

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

Usare un pipeline.yml file per distribuire la pipeline di Azure Machine Learning. La pipeline è una pipeline di Machine Learning e non una pipeline DevOps. È necessario eseguire questo aggiornamento solo se si usa un nome diverso cpu-cluster da quello del nome del cluster di calcolo.

  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, viene estratto il codice e si effettua l'accesso ad Azure con l'azione di accesso ad Azure usando OpenID Connect.
  • 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 addestrare un modello con i dati dei taxi di New York.

Abilitare il flusso di lavoro

  1. Nel tuo repository forkato, apri .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml e verifica che il flusso di lavoro sia simile a questo.

    Nota

    Il file del flusso di lavoro nel repository può includere passaggi aggiuntivi, ad esempio il bootstrap e la convalida, non illustrati qui. L'esempio seguente illustra i passaggi principali.

    name: cli-jobs-pipelines-nyc-taxi-pipeline
    on:
      workflow_dispatch:
      schedule:
        - cron: "0 0/4 * * *"
      pull_request:
        branches:
          - main
        paths:
          - cli/jobs/pipelines/nyc-taxi/**
          - .github/workflows/cli-jobs-pipelines-nyc-taxi-pipeline.yml
          - cli/run-pipeline-jobs.sh
          - cli/setup.sh
    permissions:
      id-token: write
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: check out repo
          uses: actions/checkout@v4
        - name: azure login
          uses: azure/login@v2
          with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - 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. Seleziona il flusso di lavoro cli-jobs-pipelines-nyc-taxi-pipeline e scegli di abilitare il flusso di lavoro.

    Screenshot del flusso di lavoro di abilitazione di GitHub Actions.

  5. Selezionare Esegui flusso di lavoro e scegliere l'opzione per eseguire flusso di lavoro ora.

    Screenshot del flusso di lavoro eseguito con 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 viene visualizzata una spunta verde.

  2. Aprire Azure Machine Learning Studio e passare a nyc-taxi-pipeline-example. Verificare che ogni parte del processo (preparazione, trasformazione, addestramento, previsione, punteggio) sia stata completata e che sia presente un segno di spunta verde.

    Screenshot dell'esecuzione riuscita 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