Cos'è l'inferenza distribuita?
Con l'inferenza distribuita i modelli di IA elaborano i carichi di lavoro in modo più efficiente, suddividendo le attività di inferenza su un gruppo di dispositivi interconnessi. È l'equivalente software del proverbio: "L'unione fa la forza".
L'inferenza distribuita supporta un sistema che suddivide le richieste su un parco hardware costituito da server fisici e cloud, in cui parallelamente ogni server di inferenza elabora la parte assegnata e genera un output. Ne risulta un sistema resiliente e osservabile per l'erogazione di servizi basati sull'IA coerenti e scalabili.
L'analogia della cena
Immagina di organizzare una cena per 10 persone. Vuoi offrire a tutti quattro portate: un antipasto, una portata principale, un'insalata e un dolce, ma hai solo due ore a disposizione. Riuscire a preparare tutto in autonomia è quasi impossibile, perché ne risentirebbero o il risultato finale (la qualità del cibo) o la velocità di preparazione.
Per risolvere il problema, puoi chiedere aiuto ad alcuni amici e, in base alla loro esperienza, assegnare a ciascuno un piatto. Ad esempio, l'amico che non cucina spesso può preparare l'insalata, mentre quello con il diploma alberghiero in enogastronomia può occuparsi della più complessa portata principale. Sfruttando le competenze di ogni persona e dedicandosi contemporaneamente alle singole attività, la cena è pronta in orario e il risultato è ottimo.
In questa analogia, l'azione degli amici che lavorano in simultanea è l'inferenza distribuita, ogni piatto è una richiesta e ogni amico è un diverso tipo di server di inferenza.
L'inferenza distribuita garantisce velocità, scalabilità e risparmio
Di pari passo alla crescente complessità dei modelli di IA, aumentano anche le loro dimensioni. Ad esempio, un modello linguistico di grandi dimensioni (LLM) può contenere centinaia di miliardi di parametri. I parametri determinano il modo in cui un LLM comprende il linguaggio: più parametri ha un modello e più complesse sono le attività che può eseguire con maggiore precisione.
Alcuni modelli di IA (come DeepSeek con 671 miliardi di parametri) sono semplicemente troppo grandi per essere utilizzati con una singola unità di elaborazione grafica (GPU) e, per funzionare, richiedono un intervento simile all'inferenza distribuita.
All'aumento del numero di parametri corrisponde un aumento della necessità di risorse hardware.
L'archiviazione di questi modelli enormi e l'esecuzione dei calcoli di inferenza richiedono grandi quantità di memoria e potenza di elaborazione. Per superare questa sfida, hai diverse opzioni:
- Rendere più efficienti le macchine esistenti aggiungendo più GPU a un server. Più GPU equivalgono a più potenza di elaborazione, ma sono molto costose. Inoltre, rischi di creare un singolo punto di errore: il guasto di un'istanza (una copia dell'applicazione di inferenza) si ripercuote sull'intero sistema.
- Alleggerire i modelli con la quantizzazione dei modelli. Questa tecnica di ottimizzazione semplifica i parametri di un modello riducendone la precisione numerica e di conseguenza le dimensioni complessive del modello. Essendo meno complessa da implementare rispetto all'inferenza distribuita, la quantizzazione dei modelli è la prima strategia consigliata per ottimizzare l'elaborazione di modelli di grandi dimensioni.
- Rendere più efficiente l'hardware esistente promuovendo una distribuzione dei carichi di lavoro più collaborativa con l'inferenza distribuita. Questo approccio offre la velocità, l'affidabilità e la scalabilità necessarie per soddisfare le esigenze aziendali. L'inferenza distribuita può essere utilizzata come strategia aggiuntiva alla quantizzazione dei modelli.
Cos'è un server di inferenza?
Un server di inferenza è il software essenziale che aiuta un modello di IA a trarre nuove conclusioni in base all'addestramento ricevuto. I server di inferenza alimentano le richieste di input, come una query di ricerca o un prompt, tramite un modello di apprendimento automatico e producono un output.
"Inferire" significa trarre una conclusione sulla base di prove e premesse. Se, ad esempio, vediamo accesa la luce nella casa di un nostro amico, ma non lo vediamo, possiamo dedurre che sia in casa, ma non abbiamo prove certe in merito.
Neanche un modello linguistico ha prove certe del significato di una parola o un'espressione (trattandosi di un software), quindi usa l'addestramento ricevuto e, grazie a una serie di calcoli basati su dati, riesce a generare una conclusione.
4 elementi chiave da considerare per l'implementazione dell'IA
Come funziona l'inferenza distribuita?
L'inferenza distribuita fornisce ai modelli di IA un unico coordinatore intelligente, una sorta di cervello per i carichi di lavoro di IA. Quando arriva una nuova richiesta, l'inferenza distribuita aiuta ad analizzare la richiesta e a indirizzarla al componente più adatto al processo all'interno del sistema hardware, come abbiamo visto nell'analogia della cena.
Modelli di grandi dimensioni, troppi utenti o problemi di latenza possono compromettere le prestazioni. A seconda del problema che genera l'ostacolo, l'inferenza distribuita applica strategie diverse:
- Suddivisione del modello. Se il modello è troppo grande per una GPU, l'inferenza distribuita utilizza il parallelismo del modello per suddividere il modello su più GPU.
- Suddivisione dei dati. Per gestire più utenti contemporaneamente, l'inferenza utilizza il parallelismo dei dati e il bilanciamento del carico intelligente per suddividere i dati di input tra i server, gestendo così in modo efficiente le richieste simultanee.
- Suddivisione del processo di inferenza. Per ottimizzare l'intero flusso di lavoro, utilizza la disaggregazione dei processi. Questa suddivisione consiste nel separare le due fasi di elaborazione (precompilazione e decodifica), che a loro volta generano la risposta di inferenza, e nell’eseguirle in ambienti separati.
Pianificazione intelligente dell'inferenza
Per coordinare le informazioni, trasferirle e completare le attività, l'inferenza distribuita richiede un piano di controllo o un'utilità di pianificazione. La pianificazione intelligente è un processo eseguito continuamente nei sistemi di inferenza distribuiti per favorire l'attività di coordinamento.
Immagina la pianificazione intelligente come un responsabile dei progetti. Invece di inoltrare semplicemente la richiesta al server successivo, la pianificazione intelligente valuta:
- Quali server hanno già memorizzato nella cache informazioni pertinenti alla richiesta.
- Quali server dispongono della capacità necessaria per gestire la richiesta.
- Quali sono i server più adatti a completare l'attività richiesta.
La pianificazione intelligente viene implementata tramite algoritmi software e interviene durante l'inferenza per ottimizzare il flusso di dati.
Disaggregazione delle attività di precompilazione e decodifica
Per generare una risposta a una query sono necessarie le due fasi di precompilazione e decodifica. Suddividendo una query dell'utente in queste fasi, i sistemi distribuiti possono assegnare ogni fase all'hardware più adatto, migliorando l'efficienza.
Con precompilazione (o precompilazione della cache KV) si intende la fase iniziale e più impegnativa di elaborazione, durante la quale il modello elabora il prompt dell'utente. È la fase in cui il modello "analizza" la query e la "comprende".
La decodifica è il passaggio successivo, con un uso intensivo della memoria, in cui il modello genera la risposta un token alla volta. In questa fase il modello accede alla cache KV per raccogliere le informazioni archiviate che ritiene rilevanti per la query.
Separare la fase di precompilazione da quella di decodifica aiuta il sistema a pianificare le risorse in modo più efficiente. Per accorpare tutti questi elementi è necessaria la cache KV.
Cos'è la cache KV?
"KV" sta per "key value", ovvero "valore chiave", e indica il modo in cui un LLM formula il significato di un termine o di un'espressione. Ad esempio, per elaborare il valore chiave di un piatto su un menu, dobbiamo considerare la chiave, una porzione di patatine fritte, e il suo valore, ovvero il prezzo, 3.99 euro. Quando la porzione di patatine fritte viene battuta in cassa, il "valore" calcolato di questa "chiave" è di 3.99 euro. Gli LLM elaborano i KV in modo simile, perché conservano il valore corrispondente di ogni chiave (o token) nella propria cache.
La cache è uno storage di memoria a breve termine. Funziona come un personal computer: quando è lento, puoi svuotare la cache per fare spazio e migliorare l'elaborazione.
La cache KV permette al modello di memorizzare il termine precedente generato, contribuendo a creare il contesto per il termine successivo e velocizzando così l'elaborazione. Senza la cache KV, il modello dovrebbe rielaborare la query parola per parola.
Inferenza distribuita con vLLM
Sostanzialmente, vLLM si occupa di rendere efficiente la cache KV.
vLLM è il "cervello" software che aiuta le GPU a distribuire le attività e a lavorare insieme in parallelo. Agendo come un insieme di istruzioni, vLLM incoraggia la cache KV a trovare soluzioni più brevi attraverso il batching continuo delle risposte degli utenti.
Parallelismo dei modelli con vLLM
In presenza di un modello troppo grande per la tua GPU, puoi utilizzare il parallelismo tensoriale, il parallelismo delle pipeline, il Mixture of Experts (MoE) o una combinazione dei tre.
Parallelismo tensoriale. Un gruppo di GPU gestisce un'attività di grandi dimensioni suddividendola in parti più piccole e identiche. In questo caso, vLLM è il coordinatore che orchestra la comunicazione costante per garantire la sincronizzazione di tutti i componenti del sistema.
Parallelismo delle pipeline. Come in una catena di montaggio, il parallelismo delle pipeline suddivide un'attività in fasi sequenziali. L'elaborazione avviene passando da una fase all'altra fino al completamento dell'attività. Il parallelismo delle pipeline consente di concatenare più server per eseguire un singolo modello che altrimenti sarebbe troppo grande per essere caricato in un archivio di memoria. In questo caso, vLLM gestisce l’intero processo, analizzando i passaggi e verificando che l'attività passi da un server a quello successivo al termine di ogni fase.
Mixture of Experts (MoE). In questo contesto, gli "esperti" sono parti specializzate del modello addestrate per gestire determinati tipi di input. Questa architettura prevede una rete di gating che indirizza le attività alla parte più adatta del modello per ottenere risultati rapidi e accurati. La rete di gating integrata di vLLM orchestra questo aspetto leggendo ogni richiesta che riceve e attivando la parte del modello in grado di gestirla.
Parallelismo dei dati con vLLM
Le tecniche di parallelismo dei dati sono utili se si interagisce con più utenti contemporaneamente. Il parallelismo dei dati consiste nel suddividere i dati di input (richieste dei carichi di lavoro) anziché il modello.
Si tratta di una tecnica di elaborazione che distribuisce il lavoro di un elevato numero di attività su un gruppo di server. Funziona collocando una copia del modello su ogni GPU e quindi suddividendo le attività nel gruppo di server per eseguire le richieste in parallelo.
Pensa, ad esempio, a un'applicazione di IA con 1.000 utenti che eseguono query simultanee sul tuo LLM. Il parallelismo dei dati permette di posizionare le copie dell'LLM su 10 server, inviando quindi 100 richieste a ciascun server. Suddividendo il carico di lavoro in batch più piccoli, l'applicazione è in grado di elaborare più richieste con un ritardo minimo.
vLLM funge da ottimizzatore delle prestazioni, ovvero predispone un ambiente per un'elaborazione ancora più rapida ed efficiente.
Cos'è llm-d?
llm-d è un framework open source per modelli linguistici di grandi dimensioni distribuiti, ovvero una raccolta di codici e strumenti già scritti e disponibili al pubblico che gli sviluppatori possono utilizzare, modificare e distribuire in base alle loro esigenze.
llm-d standardizza il modello già esistente per la realizzazione di inferenze distribuite in modo scalabile. Fornisce la struttura, le tecniche di comunicazione e il manuale di addestramento che costituiscono una guida dettagliata, utile per le aziende che intendono creare un'architettura distribuita.
Sostituendo i processi frammentati e manuali con percorsi integrati già familiari, le aziende possono accelerare il deployment e la scalabilità, accelerando i tempi che intercorrono tra la fase pilota e quella di produzione.
L'installazione si basa sui grafici Helm, con una procedura familiare e personalizzabile. Un'interfaccia a riga di comando (CLI) ad avvio rapido semplifica ogni aspetto del deployment, inclusi dipendenze, prerequisiti e funzionalità di osservabilità.
llm-d è progettato per essere esteso e interoperabile con vLLM ed è eseguibile su qualsiasi cluster Kubernetes, incluso Red Hat® OpenShift®.
Le sfide legate all'inferenza distribuita
L'inferenza distribuita accelera l'elaborazione e la scalabilità dei sistemi di IA, ma può rendere più complesso il coordinamento necessario per completare queste attività. Di seguito sono elencate alcune delle potenziali sfide:
Latenza e larghezza di banda
L'inferenza distribuita distribuisce il modello ed elabora le richieste su più server e dispositivi in posizioni diverse. Ciò significa che occorre del tempo prima che le informazioni e i dati restituiscano un output all'utente. Se le connessioni di rete tra i server sono lente o congestionate, il processo rallenta, come un'auto bloccata nel traffico.
Inefficienze nell'allocazione delle risorse
È importante bilanciare la distribuzione dell'inferenza tra i server in modo da non sovraccaricarli o lasciarne altri inutilizzati.
Ripristino degli errori
Disporre di un piano di riserva è essenziale. Nei sistemi distribuiti, possono verificarsi interruzioni delle connessioni, guasti dei server e disconnessioni dei datacenter. È fondamentale disporre di un’alternativa in grado di supplire qualsiasi altro elemento del sistema in caso di guasti.
Complessità di debug e risoluzione dei problemi
Il funzionamento dei server interconnessi, come quelli utilizzati nell'inferenza distribuita, è in genere più rapido ed efficiente rispetto a quelli disconnessi. Tuttavia, questa interconnessione rende più difficile risalire all'origine di un problema, proprio per la natura articolata di tali interrelazioni.
Sovraccarico di sincronizzazione
Immagina di dover partecipare a una riunione online con 300 persone. Per stare al passo del video e dell'audio in tempo reale, i sistemi devono lavorare più del solito. A volte il video di una persona si blocca o la sua voce arriva in differita. Sincronizzare e coordinare la situazione può essere complicato e richiede un'infrastruttura con capacità adeguate.
Gestione e deployment dei modelli
Per aggiornare il tuo modello mediante l'inferenza distribuita, devi disporre di una strategia e un'attenta orchestrazione da parte di esperti, un'attività complessa che può essere dispendiosa in termini di tempo.
Gestione dei costi
I sistemi distribuiti hanno un'architettura dei costi più complessa rispetto a quella di un singolo computer. I costi possono variare in base ai modelli di utilizzo, al trasferimento dei dati tra le diverse ubicazioni e alle esigenze di scalabilità. È importante stabilire un approccio basato su metriche per gestire in modo efficiente prestazioni, resilienza e costi.
Sicurezza
La presenza di server in più ubicazioni implica l'adozione di misure di difesa per salvaguardare le diverse posizioni. Ciò significa crittografare le comunicazioni, gestire il controllo degli accessi e la protezione dagli attacchi, tutti aspetti che richiedono esperienza.
Vantaggi dell'inferenza distribuita
L'inferenza distribuita consente di applicare gli LLM a una gamma più ampia di applicazioni, perché riduce i limiti alle dimensioni e alla velocità dei modelli in esecuzione su un singolo componente hardware. L'inferenza distribuita riduce la latenza (ritardo) e aumenta la larghezza di banda (capacità) per supportare diversi scenari di utilizzo sull'infrastruttura esistente.
Prestazioni coerenti e prevedibili
L'inferenza IA tradizionale è spesso una "scatola nera" che può portare a tempi di risposta imprevedibili e a un'esperienza utente mediocre. Grazie all'inferenza distribuita, la pianificazione intelligente analizza le richieste in entrata e le indirizza all'hardware più adatto, garantendo un'esperienza utente più affidabile e stabile.
Gestione dei costi
Con l'inferenza distribuita i costi possono costituire una difficoltà, ma se usata efficacemente apportano anche un vantaggio. Con l'aumento delle dimensioni dei modelli, aumenta anche la necessità di costosi acceleratori hardware, come le GPU. Se gestita correttamente, l'inferenza distribuita aiuta a ridurre i costi utilizzando l'hardware nel modo più efficiente possibile.
Osservabilità migliorata
Con il passaggio dei modelli di IA generativa dalla fase pilota a quella di produzione, è fondamentale riuscire a monitorare con efficacia l'integrità, le prestazioni e i costi dei servizi di IA. L'inferenza distribuita fornisce un sistema altamente osservabile che consente di monitorare in modo proattivo i carichi di lavoro dell'IA, dall'elaborazione dei token alla latenza e al throughput. Questa visibilità aiuta a identificare gli ostacoli e a risolvere i problemi, in modo da mantenere prestazioni prevedibili e controllare i costi.
Normative sulla privacy
Le normative sulla privacy dei dati, come il Regolamento generale sulla protezione dei dati (GDPR) e la legge californiana sulla protezione del consumatore (CCPA), applicano regole rigorose in merito alla raccolta e al trasferimento dei dati personali. L'inferenza distribuita è conforme a queste normative perché elabora i dati in locale e invia solo le parti non sensibili dei dati a un server centrale, mantenendo i dati personali all'interno di determinate giurisdizioni geografiche e supportando la sovranità dei dati.
Località dei dati
L'inferenza distribuita invia il processo di inferenza (elaborazione) a più server, ma i dati rimangono locali. Elaborando i dati nel punto in cui vengono creati, anziché inviarli a un server distante, le applicazioni funzionano più velocemente.
Il ruolo di Red Hat
Red Hat AI è una piattaforma di prodotti che utilizza la tecnologia open source per gestire con efficacia le sfide legate all'IA aziendale su larga scala. L'inferenza distribuita è uno degli strumenti fondamentali della nostra offerta.
Red Hat OpenShift AI, incluso in Red Hat AI, aiuta a gestire i costi dell'inferenza distribuendo l'erogazione tramite un framework vLLM di livello enterprise. Per ridurre la complessità operativa, offre strumenti avanzati per automatizzare i deployment e l'accesso self service a modelli, strumenti e risorse.
Tutti i prodotti Red Hat AI offrono flessibilità e coerenza per aiutarti a creare, distribuire ed eseguire i modelli di IA su qualsiasi piattaforma hardware e ambiente di cloud ibrido in modo scalabile.
Cos'è l'inferenza IA?
L'inferenza IA è il momento in cui un modello di IA fornisce una risposta basata sui dati. È l'ultimo passaggio di un complesso processo tecnologico di machine learning.