{count, plural, one {Corso} other {Corsi}}
Sempre più spesso le aziende desiderano integrare il machine learning (ML) nei propri prodotti o migliorare i processi usando l’ML. Di conseguenza, capire come gestire le sue complessità insieme al software tradizionale è più importante che mai.
DevOps è stato introdotto per affrontare le sfide legate allo sviluppo software. Mira ad abbattere i silos tra i team di sviluppo e i team operativi, con il risultato di rilasciare nuove funzionalità più velocemente e introdurle in produzione con meno difficoltà.
MLOps si basa su questi principi ma affronta sfide specifiche dell’ML, come dataset enormi e in rapida evoluzione, modelli da tracciare e versionare, e il monitoraggio per gestire problemi come il data drift o il concept drift.
Sebbene le due discipline condividano principi comuni, differiscono notevolmente per focus, flussi di lavoro e strumenti.
In questo articolo esploreremo DevOps e MLOps, evidenziando somiglianze e differenze e quando usare quale approccio. Vedremo anche i flussi di lavoro tipici e quali strumenti utilizzare nelle diverse fasi.
Iniziamo!
Che cos’è DevOps?
DevOps è una metodologia di ingegneria del software ideata per accelerare lo sviluppo e la distribuzione del software. L’obiettivo principale è migliorare la collaborazione tra team di sviluppo e team operativi. Colma il divario tra queste funzioni tradizionalmente a silos e consente una consegna del software più rapida e affidabile.
In sintesi, DevOps punta a creare una cultura collaborativa e ad automatizzare il più possibile per migliorare l’efficienza complessiva e la velocità con cui si possono consegnare nuove funzionalità software.
Oggi, grandi aziende come Meta, Amazon e molte altre riescono a rilasciare nuove funzionalità quotidianamente grazie a DevOps.
Se vuoi familiarizzare con questo ambito, ti consiglio il corso Introduction to DevOps.
Gli obiettivi principali di DevOps sono:
- Cicli di sviluppo più rapidi: Ridurre il tempo tra il rilascio e la distribuzione di una nuova funzionalità per ottenere cicli di release più rapidi mantenendo la stabilità.
- Integrazione e consegna continua (CI/CD): Automatizzare l’integrazione del codice, i test e le pipeline di deployment per migliorare la delivery.
- Collaborazione migliorata: Favorire una comunicazione stretta tra team di sviluppo e team operativi.
- Efficienza operativa: Ridurre le attività manuali, minimizzare gli errori e aumentare la produttività tramite l’automazione.
DevOps comprende i seguenti componenti chiave:
- Pipeline CI/CD:
- Test, build e deployment del codice automatizzati.
- Cicli di feedback più rapidi per gli sviluppatori.
- Meno errori e maggiore stabilità.
- Infrastructure as Code (IaC):
- Gestire l’infrastruttura tramite codice anziché con processi manuali.
- Garantire coerenza e stabilità.
- Una nuova infrastruttura può essere predisposta in pochi secondi e senza interventi manuali.
- Monitoraggio e osservabilità:
- Tracciare in tempo reale le prestazioni del sistema e lo stato delle applicazioni.
- Identificare e risolvere i problemi il prima possibile.
Sono disponibili strumenti standard di settore che aiutano a implementare i componenti principali di DevOps. Ecco alcuni dei più popolari:
- Strumenti CI/CD: Jenkins, GitLab CI/CD, CircleCI.
- Strumenti IaC: Terraform, Ansible, Chef, Puppet.
- Containerizzazione e orchestrazione: Docker, Kubernetes.
- Strumenti di monitoraggio: Prometheus, Grafana, Datadog.
Che cos’è MLOps?
MLOps estende i principi di DevOps condividendo l’obiettivo comune di automatizzare i processi. MLOps comprende pratiche pensate per distribuire e mantenere il machine learning in produzione in modo continuo, affidabile ed efficiente.
La parte fondamentale è che si concentra sul machine learning in produzione, non su modelli addestrati in locale per piccoli esperimenti.
MLOps può automatizzare e snellire tutte le fasi del ciclo di vita di un progetto di machine learning.

Ciclo di vita di un progetto di machine learning. Immagine dell’autore
Ma perché abbiamo bisogno di MLOps? Perché dovremmo investire ulteriore impegno per impostare flussi di lavoro e processi puliti? Diciamolo chiaramente: all’inizio comporta un notevole sforzo extra e gli sviluppatori potrebbero essere tentati di ignorarlo per portare velocemente un modello in produzione. Tuttavia, questo approccio introduce rischi.
Come nello sviluppo software tradizionale, ignorare processi puliti e buone pratiche nelle fasi iniziali porta nel tempo a una complessità crescente e a una minore manutenibilità.
Questo problema è ancora più rilevante nei sistemi ML a causa delle sfide uniche nella gestione delle dipendenze dai dati, dei modelli in evoluzione e dei feedback loop.
Come evidenziato nell’influente articolo “Hidden Technical Debt in Machine Learning Systems”, i sistemi di machine learning accumulano debito tecnico in modi diversi rispetto al software tradizionale.
Senza principi MLOps, quindi, il costo di rifattorizzare in seguito un sistema ML ingestibile spesso supera lo sforzo necessario per costruire da subito un flusso di lavoro robusto.
Consiglio l’ottimo corso MLOps Concepts se vuoi approfondire questo ambito.
Gli obiettivi principali di MLOps sono:
- Automazione del ciclo di vita ML: Semplificare processi come raccolta dati, addestramento del modello, deployment e monitoraggio, riducendo il lavoro manuale.
- Riproducibilità e coerenza: Garantire che esperimenti e flussi di lavoro siano ripetibili, portando a risultati affidabili.
- Collaborazione: Supportare la comunicazione tra data scientist, ML engineer, data engineer e team operativi.
- Scalabilità: Consentire ai modelli di machine learning di gestire carichi di produzione e adattarsi alla crescita dei dati e della domanda.
- Gestione delle sfide specifiche dell’ML: Gestire cambiamenti nelle distribuzioni dei dati, dataset di grandi dimensioni e la necessità di riaddestrare i modelli.
Vediamo ora i componenti principali di MLOps:
- Pipeline di addestramento e riaddestramento dei modelli: Automatizzare il processo di training significa:
- Preelaborazione dei dati e feature engineering.
- Validazione del modello e tracciamento delle prestazioni.
- Riaddestrare i modelli per adattarli ai nuovi dati quando necessario.
- Versioning di modelli e dati e tracciamento degli esperimenti:
- Versionare modelli ML e dati di training per documentare i cambiamenti nel tempo e consentire rollback.
- Monitorare iperparametri, metriche e tutti i risultati di una sessione di training tramite experiment tracking.
- Orchestrazione delle pipeline dati:
- Automatizzare la preparazione, la trasformazione e la validazione dei dati. Garantirne affidabilità e ripetibilità.
- Affrontare le sfide legate a dataset in cambiamento.
- Monitoraggio e manutenzione:
- Monitorare continuamente le prestazioni dei modelli in produzione per rilevare il prima possibile problemi come drift o degradazione.
- Attivare automaticamente il riaddestramento e automatizzare l’addestramento per aggiornare rapidamente i modelli quando necessario.
- Infrastructure as Code (IaC):
- Usare strumenti come Kubernetes e Terraform per predisporre e gestire un’infrastruttura scalabile per i carichi ML.
Il campo di MLOps è ancora in rapida evoluzione. Tuttavia, esistono già standard di settore per implementarne i componenti chiave:
- Experiment tracking: MLFlow o Weights and Biases.
- Versioning dei dati: DVC (Data Version Control).
- Orchestrazione delle pipeline: Apache Airflow, Kubeflow o Dagster.
- Deployment dei modelli: TensorFlow Serving, Seldon Core, Amazon SageMaker.
- Monitoraggio: Prometheus, Grafana, WhyLabs.
- Infrastructure as Code: Kubernetes, Docker, Terraform.
Differenze tra MLOps e DevOps
Anche se MLOps si basa su DevOps e quindi ha molte aree di sovrapposizione, differisce per focus, artefatti gestiti, cicli di vita, strumenti e strutture dei team. Ciò è dovuto principalmente alle sfide e ai requisiti unici dei flussi di lavoro di machine learning.
Nei prossimi sottocapitoli mi concentrerò sulle differenze tra le due discipline in aree specifiche.
Focus e ambito
DevOps si concentra sulle applicazioni software e assicura sviluppo, test, distribuzione e manutenzione efficienti. DevOps è incentrato sul codice.
MLOps si concentra su modelli di machine learning e flussi di lavoro sui dati, affrontando le sfide della preparazione dei dati, dell’addestramento dei modelli, del deployment e del monitoraggio.
Per MLOps è fondamentale che l’intero flusso end-to-end, dalla preparazione dei dati all’addestramento del modello, sia tracciato e riproducibile. MLOps è quindi incentrato su dati e modelli.
Artefatti gestiti
Mentre DevOps gestisce principalmente artefatti software come codice sorgente, binari e file di configurazione, MLOps gestisce artefatti specifici dell’ML come modelli, dataset, feature e configurazioni e risultati degli esperimenti.
Gli artefatti DevOps sono statici, mentre quelli MLOps sono dinamici poiché evolvono con il riaddestramento e i cambiamenti nei dati.
La differenza chiave è quindi che MLOps deve gestire il ciclo di vita sia del codice software sia degli artefatti guidati dai dati. Per questo MLOps si basa su DevOps ma lo estende in alcune aree.
Cicli di vita
DevOps si concentra su fasi come build, test, deploy e monitoraggio. Una volta che un’applicazione è in produzione, il suo comportamento è del tutto prevedibile.
MLOps si focalizza sulle stesse fasi di DevOps ma incorpora fasi aggiuntive come preelaborazione dei dati, feature engineering, addestramento e riaddestramento del modello, e monitoraggio di data o concept drift.
Il comportamento dell’applicazione è meno prevedibile ed è altamente iterativo, poiché il modello ha bisogno di aggiornamenti frequenti per adattarsi ai cambiamenti del dataset.
La differenza chiave è dunque che i cicli di vita MLOps sono guidati dai dati, mentre quelli DevOps sono più incentrati sul codice.
Strumenti e pipeline
DevOps è focalizzato sul codice e si affida a pipeline CI/CD per automatizzare le fasi di build, test e deploy. Si possono usare strumenti come GitLab CI/CD, Jenkins o Terraform.
MLOps, invece, deve costruire pipeline per l’elaborazione dei dati, l’addestramento e il deployment dei modelli. Richiede quindi strumenti e pipeline per creare flussi di lavoro su dati e training, che possono essere realizzati con MLFlow, Kubeflow, Airflow o SageMaker.
In alcuni casi, le pipeline MLOps necessitano anche di supporto per infrastrutture specifiche, come le GPU, non richieste dalle pipeline DevOps.
Struttura del team
DevOps prevede la collaborazione tra team software e team operativi. C’è anche una chiara separazione dei compiti: gli ingegneri software si concentrano sul codice, mentre i team operativi sull’infrastruttura.
I progetti MLOps coinvolgono data scientist, ML engineer, data engineer e team operativi. Inoltre, questi progetti richiedono anche esperti di dominio se il data scientist non è la principale figura di riferimento per il dominio.
Questo significa che entrambe le discipline richiedono strutture organizzative diverse nelle aziende.
Aree di sovrapposizione tra MLOps e DevOps
Ora che abbiamo discusso le differenze, possiamo concentrarci sulle aree di sovrapposizione tra le due discipline.
Per ribadire la parte più importante: MLOps si basa su DevOps estendendolo per adattarsi alle sfide uniche del machine learning. Entrambe le discipline mirano ad automatizzare i flussi di lavoro, migliorare la collaborazione e garantire qualità e scalabilità.
Pipeline CI/CD
Entrambe le discipline automatizzano i propri flussi usando le pipeline CI/CD. MLOps e DevOps devono gestire codice da buildare, testare e distribuire.
MLOps estende questo includendo la validazione dei dati, l’addestramento e il deployment dei modelli.
In ogni caso, entrambe usano la CI/CD per semplificare il passaggio dallo sviluppo alla produzione.
Gestione dell’infrastruttura
Entrambe usano l’Infrastructure as Code (IaC) per predisporre, gestire e scalare automaticamente l’infrastruttura senza passaggi manuali. Strumenti come Docker, Terraform e Kubernetes sono ampiamente utilizzati in entrambe.
Entrambe includono il provisioning di server applicativi, database e API. MLOps aggiunge solo la necessità di predisporre infrastrutture per la gestione di grandi dataset, training distribuito e model serving.
Monitoraggio e osservabilità
DevOps e MLOps si affidano a sistemi di monitoraggio per rilevare i problemi il prima possibile e garantire affidabilità. Strumenti come Prometheus e Grafana sono comunemente usati in entrambi gli ambiti.
Entrambe le discipline devono monitorare prestazioni applicative, uptime e log per il debug. Tuttavia, MLOps aggiunge il monitoraggio di metriche specifiche del modello, come accuratezza, drift e latenza.
Quando usare MLOps o DevOps
Ora che abbiamo discusso aree di sovrapposizione e differenze, possiamo parlare di quando usare ciascuna disciplina.
Come detto, MLOps è data-centric e ha sempre senso quando i progetti sono centrati sui dati. Tali progetti possono riguardare guida autonoma, analytics in tempo reale o riconoscimento di immagini.
Tuttavia, MLOps è essenziale anche per prodotti in cui il machine learning è una funzionalità core, come i sistemi di raccomandazione (es. Netflix, Amazon), il rilevamento frodi nei servizi finanziari o le applicazioni di elaborazione del linguaggio naturale come i chatbot. Puoi anche usare MLOps ogni volta che un modello ML deve essere aggiornato e riaddestrato frequentemente.
DevOps, invece, ha più senso nelle applicazioni software tradizionali che si concentrano su servizi web, app mobile o API, per citare alcuni esempi. Possono includere piattaforme e-commerce, sistemi di gestione dei contenuti o strumenti SaaS.
DevOps è indicato anche quando vuoi accorciare i cicli di sviluppo e distribuire rapidamente nuove funzionalità garantendo l’affidabilità del sistema.
Sfide e considerazioni
MLOps e DevOps sono discipline potenti che semplificano i flussi di lavoro e migliorano l’efficienza. Tuttavia, comportano anche delle sfide.
Per implementarle con successo, vanno affrontate sfide culturali, complessità della toolchain e problemi di scalabilità.
Nei seguenti sottocapitoli mi concentrerò su alcune sfide che ho riscontrato.
Sfide culturali
DevOps implica la collaborazione tra sviluppatori software e team operativi.
MLOps aggiunge data scientist, data engineer e ML engineer. Questo aumenta la necessità di collaborazione interfunzionale.
Ciascuno di questi gruppi ha priorità e competenze proprie:
- Sviluppatori software: Si concentrano sul codice.
- Team operativi: Si concentrano sull’infrastruttura e sulla sua affidabilità e scalabilità.
- Data scientist: Danno priorità alla sperimentazione e alle prestazioni del modello; quindi lavorano sul codice, ma con meno attenzione ai principi di clean code rispetto a uno sviluppatore software.
- Data engineer: Si concentrano sulle pipeline di dati.
- ML engineer: Si concentrano sull’infrastruttura e la scalabilità per le applicazioni ML.
Queste diverse competenze e priorità possono spesso causare problemi di comunicazione e obiettivi divergenti.
La resistenza al cambiamento è un’altra sfida da superare. Entrambe le discipline sono dirompenti. Puntano ad automatizzare i flussi di lavoro e a cambiare il modo di pensare e lavorare delle persone. Questo spesso porta a resistenze e al rifiuto di integrare questi flussi nella quotidianità.
Complessità della toolchain
Entrambe le discipline prevedono un ventaglio di strumenti da predisporre e imparare. Tuttavia, il panorama degli strumenti per DevOps è meno complesso e più standardizzato rispetto a MLOps.
MLOps coinvolge una varietà di strumenti e la loro integrazione può essere complessa e dispendiosa in termini di tempo.
I team devono investire tempo per apprenderli, mentre i team operativi devono integrarli nell’infrastruttura aziendale, il che può creare difficoltà.
Scalabilità
Entrambe le discipline presentano sfide di scalabilità. DevOps si concentra soprattutto sullo scaling di applicazioni e servizi per soddisfare la domanda degli utenti, mentre MLOps deve affrontare la crescita di dati e modelli.
Per MLOps emergono sfide particolari. L’ML richiede spesso l’elaborazione di dataset di grandi dimensioni e l’addestramento di modelli ampi, che possono necessitare di infrastrutture specifiche come GPU o TPU.
La crescita dei dati introduce sfide in termini di archiviazione, elaborazione e altri temi come il versioning. Inoltre, i modelli vanno distribuiti e i requisiti di bassa latenza possono rendere il serving particolarmente complesso.
Queste difficoltà rendono ancora più evidente perché automazione e IaC siano fondamentali per affrontarle.
Conclusione
In questo articolo abbiamo discusso MLOps e DevOps, insieme a somiglianze e differenze.
Entrambe le discipline sono fondamentali per semplificare i flussi di lavoro e migliorare l’efficienza.
Tuttavia, DevOps si focalizza soprattutto su processi tradizionali di sviluppo e distribuzione del software, mentre MLOps si concentra su progetti data-centric e ML-centric.
MLOps stesso si basa sui principi di DevOps, poiché anche i progetti ML contengono software e quindi condividono le basi.
Ma MLOps li estende per affrontare sfide specifiche dell’ML, come dataset grandi e in rapida evoluzione, modelli ML da versionare e riaddestrare frequentemente e un monitoraggio che deve gestire problemi come data drift e concept drift.
Se ti interessa approfondire MLOps e DevOps, ti consiglio i seguenti corsi:
FAQs
Qual è la principale differenza tra MLOps e DevOps?
MLOps gestisce il ciclo di vita del machine learning, inclusi i flussi di lavoro sui dati, l’addestramento dei modelli e il monitoraggio, mentre DevOps si concentra sui processi tradizionali di sviluppo e distribuzione del software.
MLOps e DevOps possono essere usati insieme?
Sì, MLOps si basa sui principi DevOps. La maggior parte delle applicazioni di machine learning coinvolge anche lo sviluppo software, quindi spesso è necessario combinare entrambe le pratiche.
Quali sono alcuni strumenti standard usati in MLOps e DevOps?
In MLOps, gli strumenti popolari includono MLflow, Kubeflow e SageMaker, mentre in DevOps si usano comunemente Jenkins, Kubernetes e Terraform per CI/CD e automazione dell’infrastruttura.
Quali competenze servono per implementare efficacemente MLOps?
Implementare MLOps richiede competenze di machine learning, data engineering e principi DevOps, oltre alla familiarità con strumenti come Kubernetes, Airflow e MLflow.
Sono un Cloud Engineer con una solida base in Ingegneria Elettrica, machine learning e programmazione. Ho iniziato la mia carriera nella visione artificiale, concentrandomi sulla classificazione delle immagini, per poi passare a MLOps e DataOps. Mi occupo di creare piattaforme MLOps, supportare i data scientist e fornire soluzioni basate su Kubernetes per semplificare i flussi di lavoro di machine learning.


