DevOps per Machine Learning
DevOps e MLOps
In What is DevOps?, l'autore Donovan Brown descrive DevOps come l'unione di persone, processi e prodotti per fornire costantemente valore agli utenti finali.
Per comprendere l'utilità di DevOps per l'uso di modelli di Machine Learning, verranno approfonditi alcuni principi essenziali.
DevOps è una combinazione di strumenti e procedure che guidano gli sviluppatori nella creazione di applicazioni affidabili e riproducibili. L'obiettivo per cui vengono usati i principi di DevOps è quello di fornire rapidamente valore all'utente finale.
Se si vuole offrire più facilmente valore integrando modelli di Machine Learning nelle pipeline di trasformazione dei dati o nelle applicazioni in tempo reale, è possibile trarre vantaggio dall'implementazione dei principi di DevOps. La conoscenza di DevOps sarà utile per organizzare e automatizzare il lavoro.
La creazione, la distribuzione e il monitoraggio di modelli affidabili e riproducibili per offrire valore all'utente finale è l'obiettivo delle operazioni di Machine Learning (MLOps).
Ogni volta che si parla di operazioni di Machine Learning (MLOps) è necessario combinare tre processi:
ML include tutti i carichi di lavoro di Machine Learning di cui è responsabile un data scientist, che eseguirà le operazioni seguenti:
- Analisi esplorativa dei dati
- Progettazione delle caratteristiche
- Training e ottimizzazione dei modelli
DEV fa riferimento allo sviluppo di software e include quanto segue:
- Pianificazione: definire i requisiti e le metriche delle prestazioni del modello.
- Creazione: creare gli script di training e assegnazione di punteggi del modello.
- Verifica: verificare la qualità del codice e del modello.
- Creazione del pacchetto: preparare la soluzione per la distribuzione tramite il processo di gestione temporanea.
OPS fa riferimento alle operazioni e include quanto segue:
- Rilascio: distribuire il modello nell'ambiente di produzione.
- Configurazione: standardizzare le configurazioni dell'infrastruttura con Infrastructure as Code (IaC).
- Monitoraggio: tenere traccia delle metriche e assicurarsi che il modello e l'infrastruttura funzionino come previsto.
Verranno ora illustrati alcuni principi di DevOps che sono essenziali per MLOps.
Principi di DevOps
Uno dei principi fondamentali di DevOps è l'automazione. Automatizzando le attività, si mira a distribuire più rapidamente nuovi modelli nell'ambiente di produzione. Tramite l'automazione, si creeranno anche modelli riproducibili, affidabili e coerenti in tutti gli ambienti.
Soprattutto quando si vuole migliorare regolarmente il modello nel tempo, l'automazione consente di eseguire rapidamente tutte le attività necessarie per garantire che il modello nell'ambiente di produzione offra sempre le migliori prestazioni.
Un concetto chiave per implementare l'automazione è CI/CD, un acronimo che fa riferimento a una serie di attività di integrazione continua e recapito continuo.
Integrazione continua
L'integrazione continua riguarda le attività di creazione e verifica. L'obiettivo è quello di creare il codice e verificare la qualità del codice e del modello tramite test automatizzati.
Con MLOps, l'integrazione continua può includere:
- Refactoring in script Python o R del codice esplorativo nei notebook di Jupyter.
- Linting per verificare la presenza di eventuali errori stilistici o programmatici negli script Python o R. Ad esempio, verificare se una riga nello script contiene meno di 80 caratteri.
- Testing unità per verificare le prestazioni del contenuto degli script. Ad esempio, controllare se il modello genera stime accurate su un set di dati di test.
Suggerimento
Informazioni su come convertire gli esperimenti di Machine Learning nel codice Python di produzione
Per eseguire il linting e il testing unità, è possibile usare strumenti di automazione come Azure Pipelines in Azure DevOps o GitHub Actions.
Recapito continuo
Dopo aver verificato la qualità del codice degli script Python o R usati per eseguire il training del modello, è necessario portare il modello nell'ambiente di produzione. Il recapito continuo prevede i passaggi da eseguire per distribuire un modello nell'ambiente di produzione, preferibilmente automatizzando il più possibile.
Per distribuire un modello nell'ambiente di produzione, è prima necessario crearne il pacchetto e distribuirlo in un ambiente di pre-produzione. Tramite la gestione temporanea del modello in un ambiente di pre-produzione, è possibile verificare se tutto funziona come previsto.
Dopo aver distribuito il modello nella fase di gestione temporanea, è possibile approvarne la distribuzione anche in ambiente di produzione.
Per collaborare alla creazione di script Python o R per eseguire il training del modello e di qualsiasi codice necessario per distribuire il modello in ogni ambiente, si userà il controllo del codice sorgente.
Controllo del codice sorgente
Il controllo del codice sorgente (o controllo della versione) viene in genere implementato usando un repository basato su Git. Per repository si intende la posizione in cui è possibile archiviare tutti i file pertinenti a un progetto software.
Con i progetti di Machine Learning, probabilmente si avrà un repository per ogni progetto in uso. Il repository includerà, tra le altre cose, notebook di Jupyter, script di training, script di assegnazione dei punteggi e definizioni di pipeline.
Nota
È preferibile non archiviare i dati di training nel repository. In alternativa, i dati di training vengono archiviati in un database o in un data lake e vengono recuperati da Azure Machine Learning direttamente dall'origine dati usando archivi dati.
I repository basati su Git sono disponibili tramite Azure Repos in Azure DevOps o un repository GitHub.
Ospitando tutto il codice pertinente in un repository, è possibile collaborare facilmente alla scrittura del codice e tenere traccia delle modifiche apportate da altri membri del team. Ogni membro può lavorare sulla propria versione del codice. È possibile visualizzare tutte le modifiche apportate in passato e rivedere le modifiche prima di eseguirne il commit nel repository principale.
Per decidere chi lavora su una determinata parte del progetto, è consigliabile usare la pianificazione Agile.
Pianificazione Agile
Quando si vuole distribuire rapidamente un modello nell'ambiente di produzione, la pianificazione Agile è ideale per i progetti di Machine Learning.
La pianificazione Agile consiste nell'isolare il lavoro in sprint. Gli sprint sono brevi periodi di tempo entro i quali si intende raggiungere parte degli obiettivi del progetto.
L'obiettivo è pianificare gli sprint per migliorare rapidamente qualsiasi codice, che sia usato per l'esplorazione di dati e modelli o per la distribuzione di un modello nell'ambiente di produzione.
Il training di un modello di Machine Learning può essere un processo senza fine. Ad esempio, in qualità di data scientist si può avere la necessità di migliorare le prestazioni del modello a causa della deriva dei dati oppure di modificare il modello per allinearlo meglio ai nuovi requisiti aziendali.
Per evitare di dedicare troppo tempo al training del modello, la pianificazione Agile può aiutare a definire l'ambito del progetto e a trovare un accordo con tutti gli utenti sui risultati a breve termine.
Per pianificare il lavoro, è possibile usare uno strumento come Azure Boards in Azure DevOps o GitHub Issues.
Infrastruttura come codice (IaC)
L'applicazione dei principi di DevOps ai progetti di Machine Learning si traduce nella creazione di soluzioni affidabili e riproducibili. In altre parole, tutto ciò che si esegue o si crea deve poter essere ripetuto o automatizzato.
Per ripetere e automatizzare l'infrastruttura necessaria per eseguire il training del modello e distribuirlo, il team userà Infrastructure as Code (IaC). Quando si eseguono il training e la distribuzione di modelli in Azure, l'approccio basato su IaC presuppone che tutte le risorse di Azure necessarie per il processo siano definite nel codice e che il codice venga archiviato in un repository.
Suggerimento
Acquisire familiarità con DevOps esplorando i moduli di Microsoft Learn nel percorso di trasformazione DevOps