Molti modelli di Machine Learning su larga scala con Azure Machine Learning

Azure Data Factory
Azure Data Lake
Azure Databricks
Azure Machine Learning
Azure Synapse Analytics

Questo articolo descrive un'architettura per molti modelli che usa Machine Learning e cluster di elaborazione. Offre un'ottima versatilità per le situazioni che richiedono una configurazione complessa.

Un articolo complementare, Molti modelli di Machine Learning su larga scala in Azure con Spark usano Apache Spark in Azure Databricks o Azure Synapse Analytics.

Architettura

Diagramma dell'architettura per molti modelli di Machine Learning su larga scala in Azure con Azure Machine Learning.

Scaricare un file di Visio di questa architettura.

Workflow

  1. Inserimento dati: Azure Data Factory estrae i dati da un database di origine e li copia in Azure Data Lake Storage. Quindi li archivia in un archivio dati di Machine Learning come set di dati tabulari.
  2. Pipeline di training dei modelli:
    1. Preparare i dati: la pipeline di training estrae i dati dall'archivio dati e li trasforma ulteriormente, in base alle esigenze. Raggruppa inoltre i dati in set di dati per il training dei modelli.
    2. Training dei modelli: la pipeline esegue il training dei modelli per tutti i set di dati creati durante la preparazione dei dati. Utilizza la classe ParallelRunStep per eseguire il training di più modelli in parallelo. Dopo il training di un modello, la pipeline lo registra in Machine Learning insieme alle metriche di test.
  3. Pipeline di promozione del modello:
    1. Valutare i modelli: la pipeline di promozione valuta i modelli con training prima di spostarli in produzione. Una pipeline DevOps applica la logica di business per determinare se un modello soddisfa i criteri per la distribuzione. Ad esempio, potrebbe controllare che l'accuratezza dei dati di test sia superiore all'80%.
    2. Registrare i modelli: la pipeline di promozione registra i modelli idonei per l'area di lavoro di Machine Learning.
  4. Pipeline di assegnazione dei punteggi batch del modello:
    1. Preparare i dati: la pipeline di assegnazione dei punteggi batch estrae i dati dall'archivio dati e trasforma ulteriormente ogni file in base alle esigenze. Raggruppa inoltre i dati in set di dati per l'assegnazione del punteggio.
    2. Modelli di punteggio: la pipeline utilizza la classe ParallelRunStep per assegnare il punteggio a più set di dati in parallelo. Trova il modello appropriato per ogni set di dati in Machine Learning eseguendo una ricerca dei tag del modello. Scarica quindi il modello e lo utilizza per assegnare il punteggio al set di dati. Usa la classe DataTransferStep per scrivere i risultati in Azure Data Lake e quindi passa le stime da Azure Data Lake a Synapse SQL per la gestione.
  5. Assegnazione del punteggio in tempo reale: il servizio Azure Kubernetes può eseguire l'assegnazione del punteggio in tempo reale, se necessario. A causa del numero elevato di modelli, devono essere caricati su richiesta e non possono essere precaricati.
  6. Risultati:
    1. Previsioni: la pipeline di assegnazione del punteggio batch salva le stime in Synapse SQL.
    2. Metriche: Power BI si connette alle stime del modello per recuperare e aggregare i risultati per la presentazione.

Componenti

  • Azure Machine Learning è un servizio di Machine Learning di livello aziendale per la creazione e la distribuzione di modelli rapidamente. Offre agli utenti a tutti i livelli di competenza una finestra di progettazione con poco codice, un ML automatizzato (AutoML) e un ambiente Jupyter notebook ospitato che supporta vari ambienti di sviluppo integrato.
  • Azure Databricks è uno strumento di engineering dei dati basato sul cloud basato su Apache Spark. Può elaborare e trasformare grandi quantità di dati ed esplorarli usando modelli di Machine Learning. È possibile scrivere processi in R, Python, Java, Scala e Spark SQL.
  • Azure Synapse Analytics è un servizio di analisi che riunisce integrazione dei dati, data warehousing aziendale e analisi di Big Data.
  • Synapse SQL è un sistema di query distribuite per T-SQL che consente scenari di data warehousing e virtualizzazione dei dati ed estende T-SQL per gli scenari di streaming e ML. Offre modelli di risorse serverless e dedicate.
  • Azure Data Lake Storage è un servizio di archiviazione altamente scalabile e sicuro per carichi di lavoro di analisi a elevate prestazioni.
  • Il servizio Azure Kubernetes è il servizio completamente gestito di Kubernetes per la distribuzione e la gestione di applicazioni in contenitori. Il servizio Azure Kubernetes semplifica la distribuzione di un cluster del servizio Azure Kubernetes gestito tramite l'offload del sovraccarico operativo in Azure.
  • Azure DevOps è un set di servizi per sviluppatori che offrono una gestione completa del ciclo di vita dell'applicazione e dell'infrastruttura. DevOps include soluzioni di rilevamento del lavoro, controllo del codice sorgente, compilazione e CI/CD, gestione dei pacchetti e test.
  • Microsoft Power BI è una raccolta di servizi software, app e connettori che interagiscono per trasformare le origini dati non correlate in informazioni dettagliate coerenti, visivamente accattivanti e interattive.

Alternative

  • I dati di origine possono provenire da qualsiasi database.
  • Per distribuire l'inferenza in tempo reale, è possibile usare un endpoint online gestito o il servizio Azure Kubernetes.

Dettagli dello scenario

Molti problemi di Machine Learning sono troppo complessi per risolvere un singolo modello di Machine Learning. Che si tratti di stimare le vendite per ogni elemento di ogni negozio o di manutenzione della modellazione per centinaia di pozzi petroliferi, la presenza di un modello per ogni istanza potrebbe migliorare i risultati in molti problemi di Machine Learning. Questo modello di molti modelli è comune in un'ampia gamma di settori e ha molti casi d'uso reali. Grazie all'uso di Azure Machine Learning, una pipeline end-to-end di molti modelli può includere il training del modello, la distribuzione dell'inferenza batch e la distribuzione in tempo reale.

Una soluzione molti modelli richiede un set di dati diverso per ogni modello durante il training e l'assegnazione del punteggio. Ad esempio, se l'attività prevede la previsione di vendita per ogni articolo di ogni negozio, ogni set di dati sarà specifico di una combinazione univoca di articoli e negozi.

Potenziali casi d'uso

  • Vendita al dettaglio: una catena di negozi di alimentari deve creare un modello di previsione dei ricavi separato per ogni negozio e articolo, per un totale di oltre 1000 modelli per negozio.
  • Supply chain: per ogni combinazione di magazzino e prodotto, una società di distribuzione deve ottimizzare l'inventario.
  • Ristoranti: una catena con migliaia di locali in franchising deve prevedere la domanda per ognuno di essi.

Considerazioni

Queste considerazioni implementano i pilastri di Azure Well-Architected Framework, che è un set di set di principi guida che possono essere usati per migliorare la qualità di un carico di lavoro. Per altre informazioni, vedere Framework ben progettato di Microsoft Azure.

  • Partizioni di dati: il partizionamento dei dati è la chiave per l'implementazione dei criteri molti modelli. Se si vuole creare un modello per negozio, un set di dati include tutti i dati per un negozio e sono disponibili tanti set di dati quanti sono i negozi. Se si vuole creare un modello di prodotti per negozio, sarà disponibile un set di dati per ogni combinazione di prodotto e negozio. A seconda del formato dei dati di origine, potrebbe essere facile partizionare i dati oppure potrebbe richiedere un'ampia sequenza di dati casuali e trasformazioni. La scalabilità di Spark e Synapse SQL è molto adatta per tali attività, al contrario di Python Pandas, in quanto viene eseguito solo in un nodo e in un processo.
  • Gestione dei modelli: le pipeline di training e assegnazione del punteggio identificano e richiamano il modello appropriato per ogni set di dati. A tale scopo, calcolano i tag che caratterizzano il set di dati e quindi usano i tag per trovare il modello corrispondente. I tag identificano la chiave di partizione dati e la versione del modello e possono anche fornire altre informazioni.
  • Scelta dell'architettura appropriata:
    • Spark è appropriato quando la pipeline di training ha requisiti complessi di trasformazione e raggruppamento dei dati. Offre tecniche flessibili di suddivisione e raggruppamento per raggruppare i dati in base a combinazioni di caratteristiche, ad esempio prodotto-negozio o posizione-prodotto. I risultati possono essere inseriti in un dataframe Spark per essere utilizzati nei passaggi successivi.
    • Quando gli algoritmi di training e assegnazione dei punteggi di Machine Learning sono semplici, è possibile partizionare i dati con librerie come scikit-learn. In questi casi, potrebbe non essere necessario Spark, quindi è possibile evitare possibili complessità che possono verificarsi durante l'installazione di Azure Synapse o Azure Databricks.
    • Quando i set di dati di training sono già stati creati, ad esempio in file separati o in righe o colonne separate, non è necessario Spark per trasformazioni di dati complesse.
    • La soluzione Machine Learning e di cluster di elaborazione offre un'ottima versatilità per le situazioni che richiedono una configurazione complessa. Ad esempio, è possibile usare un contenitore Docker personalizzato, scaricare file o scaricare modelli con training preliminare. La visione artificiale e il Deep Learning di elaborazione del linguaggio sono esempi di applicazioni che potrebbero richiedere tale versatilità.
  • Training e assegnazione del punteggio di Spark: quando si usa l'architettura Spark, è possibile usare l'API della funzione Spark Pandas per l'assegnazione del punteggio e il training paralleli.
  • Repository di modelli separati: per proteggere i modelli distribuiti, è consigliabile archiviarli nel loro repository che non viene interessato dalle pipeline di training e test.
  • Classe ParallelRunStep: La classe ParallelRunStep di Python è un'opzione avanzata per eseguire il training e l'inferenza di molti modelli. Può partizionare i dati in diversi modi e quindi applicare lo script di Machine Learning agli elementi della partizione in parallelo. Analogamente ad altre forme di training di Machine Learning, è possibile specificare un ambiente di training personalizzato con accesso ai pacchetti PyPI (Python Package Index) o un ambiente Docker personalizzato più avanzato per le configurazioni che richiedono più di PyPI standard. È possibile scegliere tra molte CPU e GPU.
  • Inferenza online: se una pipeline carica e memorizza nella cache tutti i modelli all'inizio, i modelli potrebbero esaurire la memoria del contenitore. Caricare quindi i modelli su richiesta nel metodo di esecuzione, anche se potrebbe aumentare leggermente la latenza.

Ottimizzazione dei costi

L'ottimizzazione dei costi riguarda l'analisi dei modi per ridurre le spese non necessarie e migliorare l'efficienza operativa. Per altre informazioni, vedere Panoramica del pilastro di ottimizzazione dei costi.

Per comprendere meglio il costo di esecuzione di questo scenario in Azure, usare il Calcolatore prezzi. I presupposti di partenza sono i seguenti:

  • Il training dei modelli di servizio viene eseguito ogni giorno per mantenerli al corrente.
  • Per un set di dati di 40 milioni di righe con 10.000 combinazioni di negozio e prodotto, il training su Azure Databricks usando un cluster di cui è stato effettuato il provisioning con 12 macchine virtuali che usano istanze di Ls16_v2 richiede circa 30 minuti.
  • L'assegnazione del punteggio batch con lo stesso set di dati richiede circa 20 minuti.
  • È possibile usare Machine Learning per distribuire l'inferenza in tempo reale. A seconda del volume di richiesta, scegliere un tipo di macchina virtuale e le dimensioni del cluster appropriati.
  • Un cluster del servizio Azure Kubernetes viene ridimensionato automaticamente in base alle esigenze, determinando in media l'attività di due nodi al mese.

Per vedere le differenze di prezzo per il caso d'uso, modificare le variabili in modo che corrispondano alle dimensioni dei dati previste e ai requisiti di carico. Per dati di training di dimensioni maggiori o minori, aumentare o diminuire le dimensioni del cluster Azure Databricks. Per gestire più utenti simultanei durante la gestione del modello, aumentare le dimensioni del cluster del servizio Azure Kubernetes.

Collaboratori

Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.

Autore principale:

Passaggi successivi