Configurare MLOps con Azure DevOps

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

Azure Machine Learning consente di eseguire l'integrazione con la pipeline di Azure DevOps per automatizzare il ciclo di vita di apprendimento automatico. Alcune delle operazioni che è possibile automatizzare sono:

  • Distribuzione dell'infrastruttura di Azure Machine Learning
  • Preparazione dei dati (operazioni di estrazione, trasformazione, caricamento)
  • Training di modelli di Machine Learning con scale-out e scale-up su richiesta
  • Distribuzione di modelli di Machine Learning come servizi Web pubblici o privati
  • Monitoraggio dei modelli di Machine Learning distribuiti (ad esempio per l'analisi delle prestazioni)

Questo articolo spiega come usare Azure Machine Learning per configurare una pipeline MLOps end-to-end che esegue una regressione lineare per stimare le tariffe dei taxi a NYC. La pipeline è costituita da componenti, ognuno dei quali gestisce funzioni differenti, che è possibile registrare nell'area di lavoro, eseguire il controllo delle versioni e riutilizzare con vari input e output. Si utilizzerà l'architettura di Azure consigliata per MLOps e l'acceleratore di soluzioni Azure MLOps (v2) per configurare rapidamente un progetto MLOps in Azure Machine Learning.

Suggerimento

È consigliabile comprendere alcune delle architetture di Azure consigliate per MLOps prima di implementare una soluzione. È necessario scegliere l'architettura migliore per il progetto di Machine Learning specificato.

Prerequisiti

Nota

È necessario Git versione 2.27 o successiva. Per altre informazioni sull'installazione del comando Git, vedere https://git-scm.com/downloads e selezionare il sistema operativo

Importante

I comandi dell'interfaccia della riga di comando in questo articolo sono stati testati usando Bash. Se si usa una shell diversa, è possibile che si verifichino errori.

Configurare l'autenticazione con Azure e DevOps

Prima di configurare un progetto MLOps con Azure Machine Learning, è necessario configurare l'autenticazione per Azure DevOps.

Creare un'entità servizio

Per l'uso della demo, è necessaria la creazione di uno o due principi di servizio, a seconda del numero di ambienti su cui si vuole lavorare (sviluppo o produzione o entrambi). Questi principi possono essere creati usando uno dei metodi seguenti:

  1. Avviare il Azure Cloud Shell.

    Suggerimento

    Al primo avvio di Cloud Shell, verrà richiesto di creare un account di archiviazione per Cloud Shell.

  2. Se richiesto, scegliere Bash come ambiente usato in Cloud Shell. È anche possibile modificare gli ambienti nell'elenco a discesa sulla barra di navigazione superiore

    Screenshot of the cloud shell environment dropdown.

  3. Copiare i seguenti comandi bash nel computer e aggiornare le variabili projectName, subscriptionId e environment con i valori relativi al progetto. Se si sta creando un ambiente sia Dev che Prod, sarà necessario eseguire questo script una volta per ogni ambiente, in modo da creare un'entità servizio per ogni ambiente. Questo comando concederà anche il ruolo Collaboratore all'entità servizio nella sottoscrizione specificata. Questa operazione è necessaria perché Azure DevOps sia in grado di usare correttamente le risorse in tale sottoscrizione.

    projectName="<your project name>"
    roleName="Contributor"
    subscriptionId="<subscription Id>"
    environment="<Dev|Prod>" #First letter should be capitalized
    servicePrincipalName="Azure-ARM-${environment}-${projectName}"
    # Verify the ID of the active subscription
    echo "Using subscription ID $subscriptionID"
    echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes     /subscriptions/$subscriptionId"
    az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId
    echo "Please ensure that the information created here is properly save for future use."
    
  4. Copiare i comandi modificati in Azure Shell ed eseguirli (Ctrl + Maiusc + v).

  5. Dopo aver eseguito questi comandi, verranno visualizzate informazioni correlate all'entità servizio. Salvare queste informazioni in un percorso sicura, che verrà usato più avanti nella demo per configurare Azure DevOps.

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. Ripetere il passaggio 3 se si creano entità servizio per gli ambienti di sviluppo e produzione. Per questa demo verrà creato solo l'ambiente di produzione (Prod).

  7. Una volta create le entità servizio, chiudere Cloud Shell.

Configurare Azure DevOps

  1. Passare ad Azure DevOps.

  2. Selezionare Crea nuovo progetto (in questa esercitazione denominare il progetto mlopsv2).

    Screenshot of ADO Project.

  3. Nel progetto, in Impostazioni progetto (in basso a sinistra della pagina del progetto) selezionare Connessioni al servizio.

  4. Selezionare Crea connessione al servizio.

    Screenshot of ADO New Service connection button.

  5. Selezionare Azure Resource Manager e scegliere Avanti, selezionare Entità servizio (manuale) e scegliere Avanti, quindi impostare Livello ambito su Sottoscrizione.

    • Nome sottoscrizione: usare il nome della sottoscrizione in cui è archiviata l'entità servizio.
    • ID sottoscrizione: usare il valore subscriptionId usato nel passaggio 1 come ID sottoscrizione
    • ID entità servizio: usare il valore appId usato nel passaggio 1 come ID entità servizio
    • Chiave entità servizio: usare il valore password usato nel passaggio 1 come chiave dell'entità servizio
    • ID tenant: usare il valore tenant usato nel passaggio 1 come ID tenant
  6. Denominare la connessione al servizio Azure-ARM-Prod.

  7. Selezionare Concedi l'autorizzazione di accesso a tutte le pipeline, quindi selezionare Verifica e salva.

La configurazione di Azure DevOps è stata completata correttamente.

Configurare il repository di origine con Azure DevOps

  1. Aprire il progetto creato in Azure DevOps.

  2. Aprire la sezione Repository e selezionare Importa repository.

    Screenshot of Azure DevOps import repo first time.

  3. Immettere https://github.com/Azure/mlops-v2-ado-demo nel campo URL clone. Selezionare Importa nella parte inferiore della pagina.

    Screenshot of Azure DevOps import MLOps demo repo.

  4. Aprire la sezione Impostazioni del progetto nella parte inferiore del riquadro di spostamento a sinistra

  5. Nella sezione Repository selezionare Repository. Selezionare il repository creato nel passaggio precedente. Selezionare la scheda Sicurezza.

  6. Nella sezione Autorizzazioni utente selezionare l'utente mlopsv2 Build Service. Impostare l'autorizzazione Contribuire su Consenti e l'autorizzazione Crea ramo su Consenti. Screenshot of Azure DevOps permissions.

  7. Aprire la sezione Pipeline nel riquadro di spostamento a sinistra e selezionare i tre punti verticali accanto al pulsante Crea pipeline. Selezionare Gestisci sicurezza.

    Screenshot of Pipeline security.

  8. Selezionare l'account mlopsv2 Build Service per il progetto nella sezione Utenti. Impostare l'autorizzazione Modifica pipeline di compilazione su Consenti.

    Screenshot of Add security.

Nota

Questa operazione termina la sezione dei prerequisiti e la distribuzione dell'acceleratore di soluzioni può avere luogo di conseguenza.

Distribuzione dell'infrastruttura tramite Azure DevOps

Questo passaggio distribuisce la pipeline di training nell'area di lavoro di Azure Machine Learning creata nei passaggi precedenti.

Suggerimento

Prima di esaminare il repository MLOps v2 e distribuire l'infrastruttura, assicurarsi di comprendere i modelli architetturali dell'acceleratore di soluzioni. Negli esempi si userà il tipo di progetto ML classico.

Eseguire la pipeline dell'infrastruttura di Azure

  1. Passare al repository mlops-v2-ado-demo e selezionare il file config-infra-prod.yml.

    Importante

    Assicurarsi di aver selezionato il ramo principale del repository.

    Screenshot of Repo in ADO.

    Questo file di configurazione usa i valori dello spazio dei nomi e del suffisso nei nomi degli artefatti per garantire l'univocità. Aggiornare la sezione seguente nella configurazione in base alle proprie esigenze.

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: eastus
    

    Nota

    Se si esegue un carico di lavoro di Deep Learning, ad esempio CV o NLP, assicurarsi che il calcolo GPU sia disponibile nella zona di distribuzione.

  2. Selezionare Commit e push codice per recuperare questi valori nella pipeline.

  3. Passare alla sezione Pipeline.

    Screenshot of ADO Pipelines.

  4. Seleziona Crea pipeline.

  5. Selezionare GIT Azure Repos.

    Screenshot of ADO Where's your code.

  6. Selezionare il repository clonato nella sezione mlops-v2-ado-demo precedente.

  7. Selezionare File YAML di Azure Pipelines esistente.

    Screenshot of Azure DevOps Pipeline page on configure step.

  8. Selezionare il ramo main e scegliere mlops/devops-pipelines/cli-ado-deploy-infra.yml, quindi selezionare Continua.

  9. Eseguire la pipeline; il completamento richiederà alcuni minuti. La pipeline deve creare gli artefatti seguenti:

    • Gruppo di risorse per l'area di lavoro, tra cui account di archiviazione, Registro Container, Application Insights, Keyvault e area di lavoro di Azure Machine Learning stessa.
    • Nell'area di lavoro è presente anche un cluster di elaborazione creato.
  10. Ora viene distribuita l'infrastruttura per il progetto MLOps. Screenshot of ADO Infra Pipeline screen.

    Nota

    Gli avvisi relativi all'impossibilità di spostare e riutilizzare il repository esistente nella posizione richiesta possono essere ignorati.

Scenario di training e distribuzione di esempio

L'acceleratore di soluzione include codice e dati per una pipeline di Machine Learning end-to-end di esempio che esegue una regressione lineare per stimare le tariffe dei taxi a NYC. La pipeline è costituita da componenti, ognuno dei quali gestisce funzioni differenti, che è possibile registrare nell'area di lavoro, eseguire il controllo delle versioni e riutilizzare con vari input e output. Le pipeline e i flussi di lavoro di esempio per gli scenari di Visione artificiale e NLP avranno passaggi e fasi di distribuzione differenti.

Questa pipeline di training contiene i passaggi seguenti:

Preparare i dati

  • Questo componente accetta diversi set di dati sui taxi (gialli e verdi), unisce/filtra i dati e prepara i set di dati train/val e valutazione.
  • Input: dati locali in ./data/ (diversi file .csv)
  • Output: singolo set di dati preparato (.csv) e set di dati train/val/test.

Eseguire il training del modello

  • Questo componente esegue il training di un regressore lineare con il set di training.
  • Input: set di dati di training
  • Output: modello con training (formato pickle)

Evaluate Model (Valuta modello)

  • Questo componente usa il modello con training per prevedere le tariffe dei taxi nel set di test.
  • Input: modello di ML e set di dati di test
  • Output: prestazioni del modello e flag di distribuzione se distribuire o meno.
  • Questo componente confronta le prestazioni del modello con tutti i modelli distribuiti precedenti nel nuovo set di dati di test e decide se promuovere o meno il modello nell'ambiente di produzione. La promozione del modello nell'ambiente di produzione avviene registrando il modello nell'area di lavoro AML.

Registrare il modello

  • Questo componente assegna un punteggio al modello in base alla precisione delle previsioni nel set di test.
  • Input: modello con training e flag di distribuzione.
  • Output: modello registrato in Azure Machine Learning.

Distribuzione della pipeline di training del modello

  1. Passare alle pipeline ADO.

    Screenshot of ADO Pipelines.

  2. Selezionare Nuova pipeline.

    Screenshot of ADO New Pipeline button.

  3. Selezionare GIT Azure Repos.

    Screenshot of ADO Where's your code.

  4. Selezionare il repository clonato nella sezione mlopsv2 precedente.

  5. Selezionare File YAML di Azure Pipelines esistente.

    Screenshot of ADO Pipeline page on configure step.

  6. Selezionare main come ramo e scegliere /mlops/devops-pipelines/deploy-model-training-pipeline.yml, quindi selezionare Continua.

  7. Salvare ed eseguire la pipeline

Nota

A questo punto, l'infrastruttura è configurata e viene distribuito il ciclo di prototipazione dell'architettura MLOps. A questo punto è possibile passare al modello con training nell'ambiente di produzione.

Distribuzione del modello con training

Questo scenario include flussi di lavoro predefiniti per due approcci alla distribuzione di un modello con training, l'assegnazione di punteggi batch o la distribuzione di un modello a un endpoint per l'assegnazione dei punteggi in tempo reale. È possibile eseguire uno o entrambi questi flussi di lavoro per testare le prestazioni del modello nell'area di lavoro di Azure Machine Learning. In questo esempio verrà usato l'assegnazione dei punteggi in tempo reale.

Distribuire l'endpoint del modello di Machine Learning

  1. Passare alle pipeline ADO.

    Screenshot of ADO Pipelines.

  2. Selezionare Nuova pipeline.

    Screenshot of ADO New Pipeline button for endpoint.

  3. Selezionare GIT Azure Repos.

    Screenshot of ADO Where's your code.

  4. Selezionare il repository clonato nella sezione mlopsv2 precedente.

  5. Selezionare File YAML di Azure Pipelines esistente.

    Screenshot of Azure DevOps Pipeline page on configure step.

  6. Selezionare main come ramo, scegliere l'endpoint online gestito /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml e quindi selezionare Continua.

  7. I nomi degli endpoint online devono essere univoci, quindi impostare taxi-online-$(namespace)$(postfix)$(environment) su un nome univoco diverso e quindi selezionare Esegui. Non è necessario modificare l'impostazione predefinita se non ha esito negativo.

    Screenshot of Azure DevOps batch deploy script.

    Importante

    Se l'esecuzione non riesce a causa di un nome di endpoint online esistente, ricreare la pipeline come descritto in precedenza e modificare [nome-endpoint] impostandolo su [nome endpoint (numero casuale)].

  8. Al termine dell'esecuzione, l'output generato sarà simile al seguente:

    Screenshot of ADO Pipeline batch run result page.

  9. Per testare questa distribuzione, passare alla scheda Endpoint nell'area di lavoro di Azure Machine Learning, selezionare l'endpoint e fare clic sulla scheda Test. È possibile usare i dati di input di esempio presenti nel repository clonato in /data/taxi-request.json per testare l'endpoint.

Pulire le risorse

  1. Se non si intende continuare a usare la pipeline, eliminare il progetto Azure DevOps.
  2. Nel portale di Azure eliminare il gruppo di risorse e l'istanza di Azure Machine Learning.

Passaggi successivi