La pila postmoderna
Panoramica
Come tutte le cose belle giungono alla fine, siamo giunti all’ultimo episodio della nostra serie, con un nuovo repo open-source che riunisce molti dei temi discussi nelle puntate precedenti e che riassumiamo qui prima di iniziare:
- MLops senza molto Ops: in cui introduciamo il principio di concentrarsi su ciò che conta;
- ML e MLOps a scala ragionevole: dove spieghiamo la “scala ragionevole”. Tra l’infrastruttura su scala planetaria per i giganti della tecnologia e gli scenari no-code, c’è un mondo di lavoro entusiasmante per i professionisti più sofisticati: lo chiamiamo “la scala ragionevole”, ed è in effetti dove avviene la maggior parte dei dataOps e MLOps;
- Hagakure per gli MLOps: in cui discutiamo i principi dei moderni MLOps e di come i piccoli team possano essere produttivi grazie a un ecosistema aperto in continua espansione;
- Il modello di dati moderno: in cui presentiamo (batterie, dati e codice open source inclusi) una soluzione pragmatica al problema dell’ingestione, della trasformazione e dell’interrogazione dei dati su scala.
Se ci avete seguito da vicino, l’Episodio 4 ci ha portato al limite di Data Land e all’inizio di ML Land: ora è il momento di chiudere il cerchio, e portare quelle righe di dati ben trasformate in un modello di apprendimento automatico che serva previsioni agli utenti.
TL;DR: in questo post combineremo ancora una volta contenuti tecnici e saggezza organizzativa:
– Introduciamo il “Post-Modern Stack”, ovvero una decostruzione (vedete il gioco di parole?) del moderno stack di dati che abbiamo condiviso in precedenza. Riutilizziamo gli strumenti DataOps dell’Episodio 4 (Snowflake + dbt) per alimentare la nostra configurazione MLOps preferita, una pipeline Metaflow che combina senza soluzione di continuità l’elaborazione locale e quella nel cloud, colmando il divario tra dati, formazione e inferenza in modo serverless.
– Torniamo al punto di partenza e discutiamo di nuovo, alla luce di ciò che abbiamo imparato, i principi di base di MLOps senza Ops, e di come questi si adattano (o dovrebbero adattarsi) a molte discussioni tradizionali sulle organizzazioni software: personale, build vs buy, ecc.
Clonate il repo, guardate il video, allacciate le cinture e unitevi a noi per un ultimo viaggio insieme.
Unire il moderno data stack con il moderno ML stack
Il modern data stack (MDS) ha consolidato una serie di best practice relative alla raccolta, all’archiviazione e alla trasformazione dei dati. Particolarmente efficace con i dati strutturati o semi-strutturati, l’MDS si basa in genere su tre elementi chiave:
– Un meccanismo di ingestione scalabile, attraverso strumenti o infrastrutture;
– Un data warehouse per l’archiviazione e il calcolo (le prestazioni di interrogazione sono piuttosto impressionanti su scala ragionevole);
– Uno strumento di trasformazione per operazioni di tipo DAG sui dati grezzi, possibilmente basato su SQL come lingua franca per diverse figure (ingegneri dei dati, analisti, addetti al ML).
Il web è pieno di esempi (compreso il nostro!) su come configurare l’MDS. Tuttavia, potrebbero lasciarvi a chiedervi cosa succede “sul lato ML”: una volta che i dati sono pre-aggregati e le caratteristiche precalcolate, come vengono consumati a valle per produrre valore di business? Questo post si propone di rispondere a questa domanda, proponendo una toolchain leggera che sfrutta Metaflow come spina dorsale per le operazioni di ML: la reazione della comunità al repo “Bigger boat” è stata estremamente positiva, ma abbiamo pensato di proporre anche un’alternativa a basso impatto per i team che vogliono iniziare più rapidamente.
Lo stack postmoderno
Poiché un diagramma di flusso vale più di mille README, il nostro Post-Modern Stack (PMS) si presenta così:
Abbiamo quattro fasi “funzionali” principali, due nella Terra dei Dati, due nella Terra del ML:
- Archiviazione: utilizziamo Snowflake per archiviare i dati grezzi – riutilizziamo il fantastico set di dati aperti per l’e-commerce rilasciato da Coveo lo scorso anno, contenente milioni di eventi di acquisto anonimizzati nel mondo reale.
- Trasformazione: usiamo dbt come framework di trasformazione – eseguiamo una serie di query SQL di tipo DAG all’interno di Snowflake e prepariamo i nostri dati grezzi per essere consumati dal codice Python.
- Formazione: utilizziamo un framework di deep learning, Keras, per addestrare un modello sequenziale per le raccomandazioni sugli acquisti: dato un elenco di prodotti con cui l’acquirente ha interagito, qual è l’interazione successiva più probabile?
- Serving: utilizziamo Sagemaker come piattaforma di servicing PaaS, in modo che i) possiamo utilizzare codice Python per attivare il deployment e ii) utilizzando AWS, otteniamo un’ottima interoperabilità con Metaflow (cioè gli artefatti del modello sono già in s3).
Il PDP non è particolarmente più complesso della pipeline Metaflow standard: delegando le aggregazioni a Snowflake, il calcolo distribuito è astratto per una scala ragionevole; introducendo il supporto per il dbt, lo scienziato end-to-end può preparare le proprie caratteristiche e versionare il proprio set di dati in un’unica mossa; utilizzando Metaflow, possiamo eseguire tutto il codice Python che vogliamo, dove vogliamo: possiamo unire dataOps e MLOps in un modo unificato e basato su principi, e possiamo scegliere dove è necessaria l’accelerazione hardware.
Il PDP è una pipeline a costo zero, senza fronzoli ma del tutto realistica, per iniziare a trasformare i dati grezzi in previsioni in tempo reale.
Meglio ancora, si tratta di una pipeline fortemente basata sull’open-source e che richiede poco tempo: lo sviluppo, l’addestramento e la distribuzione possono essere eseguiti da un ingegnere di ML senza alcuna conoscenza dell’infrastruttura e senza richiedere il supporto di devOps.
Prima di esplorare tutte le conseguenze di questa configurazione per l’organizzazione, e non solo per il codice, può essere un buon momento per menzionare alcune gemme nascoste per il lettore interessato ai dettagli nerd:
– dbt cloud: dbt offre una versione SaaS del suo strumento per la collaborazione all’interno e tra i team. Per supportare questo scenario, includiamo la possibilità di eseguire lo stesso flusso collegandosi a un’istanza dbt cloud: sebbene sia un po’ meno intuitivo dal punto di vista del flusso, riteniamo che l’offerta cloud abbia un valore, soprattutto in un’organizzazione più grande con un insieme più diversificato di persone coinvolte nello stack di dati.
– Test del modello: includiamo una fase di test prima della distribuzione per sensibilizzare sull’importanza di un test approfondito prima della distribuzione. Combiniamo la potenza di RecList con le schede Metaflow per mostrare come il software open-source possa aiutare a sviluppare modelli più affidabili e una documentazione più completa. Restate sintonizzati per un’integrazione più profonda nel prossimo futuro!
In un momento di fioritura, ma anche di crescita confusa dello spazio, ci auguriamo che il nostro stack aperto fornisca un primo passo affidabile per i team che stanno testando le acque di MLOps, mostrando come pochi, semplici pezzi facciano molta strada verso la costruzione di sistemi ML su scala.
Non sarà la fine del vostro viaggio, ma crediamo che possa essere un ottimo inizio.
MLOps e peopleOps
Se ricordate la nostra panoramica del panorama, i team che operano su scala ragionevole sono piccole startup in rapida crescita o team che stanno avviando una pratica di ML in un’azienda grande ma tradizionale (una startup all’interno di un’impresa, se volete): la velocità per chiudere il ciclo di feedback è tutto ciò che vogliono, quindi NoOps è ciò di cui hanno bisogno. In particolare, il nostro approccio al ciclo di vita del ML mette in evidenza l’importanza di non spendere tempo di progettazione iniziale per supportare una scala e una sofisticazione che non sono certamente necessarie al primo giorno (e forse nemmeno al primo giorno).
Rispetto ai tutorial del “mondo dei giocattoli”, il nostro progetto ha il vantaggio di crescere con voi: se avete bisogno di sostituire X con Y al giorno 1000, il resto degli strumenti potrebbe essere ancora in perfetta sintonia tra loro.
Vogliamo concludere la nostra serie evidenziando alcune implicazioni di questo approccio sul modo in cui le organizzazioni lavorano e concepiscono lo sviluppo di dati e ML per i loro prodotti.
– Efficienza al di là degli effettivi. Consideriamo le metriche tradizionali, come l’organico della R&S: un approccio MLOps moderno può mettere in discussione alcuni principi consolidati che ruotano intorno a questo aspetto. Ad esempio, l’adozione di un moderno approccio MLOps significa che i costi delle merci vendute (COGS) possono comprendere un conto AWS più elevato, ma la manodopera diretta coinvolta nella produzione di beni e servizi sarà probabilmente inferiore. Inoltre, ciò significa anche che le metriche tradizionali, come l’organico di R&S o il numero di brevetti depositati, potrebbero dover essere riconsiderate e potrebbero essere necessari parametri di riferimento diversi. Poiché il mondo della tecnologia sta cambiando rapidamente, il nostro approccio alle metriche deve tenerne conto.
– Verticalità flessibile. Il ML sta diventando un componente di prodotto importante per molte aziende (e Coveo è certamente una di queste). La scomoda verità sulla possibilità di incorporare le funzionalità di ML in un prodotto è che gli ingegneri di ML devono essere addestrati al problema aziendale tanto quanto all’ottimizzazione degli iperparametri. Per questo motivo, avere più di 10 data scientist in un’unità orizzontale indipendente potrebbe non essere la strada giusta da percorrere, in quanto li distacca dal campo e rallenta il ciclo di feedback tra dati e decisioni. In alternativa, si potrebbe pensare di inserire i ninja del ML direttamente nelle unità aziendali, in modo che possano apprendere i problemi di business in prima persona. L’unico problema è che se le unità aziendali non sono preparate ad assorbire gli ingegneri di ML, è facile che finiscano per avere un impatto minore di quanto ci si aspetterebbe. L’adozione di pratiche MLOps forti è un modo per rendere la verticalizzazione del team di ML più consapevole, in quanto le business unit possono assorbire i Data Scientist in modo più efficiente. La topologia MLOps a “scala ragionevole” si presenta come una via di mezzo tra verticale e orizzontale – una forma a T, se volete: alcuni componenti orizzontali sono presenti per rendere tutti produttivi e per riutilizzare le conoscenze e le competenze (ad esempio, l’adozione diffusa di Metaflow); ma poi le funzionalità sono sviluppate verticalmente all’interno delle linee di business, tenendo conto della specificità del caso d’uso.
– Trattenere i talenti: stare lontani dall’infrastruttura. Probabilmente la conseguenza più importante di questo approccio è che gli MLOp possono servire come parte della proposta per attrarre e trattenere i talenti critici. Scambiando un maggior numero di calcoli con un minor impegno umano, si otterrà un piccolo e felice team di ML, nettamente migliore di un gruppo più grande e meno focalizzato. La maggior parte dei talenti tecnici è entusiasta di svolgere un lavoro all’avanguardia con i migliori strumenti, concentrandosi su problemi impegnativi e vedendo l’impatto del proprio lavoro nella produzione. Senza la giusta pratica MLOps, i migliori talenti si sentiranno rapidamente frustrati dal fatto di lavorare su attività transazionali e di non vedere il loro lavoro avere un impatto tangibile sul business. Quindi, una spesa AWS forse maggiore è spesso compensata da un tasso di fidelizzazione più elevato e da una maggiore produttività dei ML. Come ha affermato McKinsey in un articolo sul “Grande logorio”, le aziende vogliono i migliori e si tengono i peggiori, e una delle ragioni principali del turnover dei professionisti del ML è il fatto di dedicare una parte considerevole del loro tempo a compiti a basso impatto, come la preparazione dei dati e la manutenzione dell’infrastruttura.
Infine, l’adozione del nostro approccio MLOps avrà un chiaro impatto sulle decisioni strategiche prese dai CFO e li renderà più felici.
È diffusa l’idea che un modo efficiente di gestire la spesa per la R&S comporti la riduzione dei costi infrastrutturali. Ma questo è spesso un modo fuorviante di vedere le cose. Acquistare piuttosto che costruire può portare a stime e previsioni più accurate del COGS, soprattutto per le linee di business meno mature e più sperimentali: proverbialmente, il tempo è davvero denaro, e le infrastrutture possono sembrare molto più economiche se viste alla luce del costo opportunità di una lenta esplorazione. Inoltre, abbiamo spesso riscontrato che i costi effettivi di costruzione e manutenzione delle infrastrutture in una startup sono meno prevedibili nel tempo di quanto la maggior parte delle persone possa pensare. Non solo è estremamente facile sottovalutare lo sforzo totale richiesto nel lungo periodo, ma ogni volta che si crea un team al solo scopo di costruire un’infrastruttura si introduce la quintessenza dell’imprevedibilità del fattore umano.