Throughput-Optimal Scheduling Algorithms for LLM Inference and AI Agents
Questo articolo stabilisce i fondamenti matematici delle code per l'inferenza degli LLM, dimostrando che gli algoritmi di scheduling conservativi del lavoro raggiungono la massima resa sia per i carichi di lavoro individuali che per quelli degli agenti AI, valutando al contempo sistemi reali per confermare l'ottimalità di Orca e Sarathi-Serve e mettendo in guardia contro l'instabilità di FasterTransformer e della versione base di vLLM.
Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
Immagina di gestire una fabbrica ad alta velocità che costruisce robot personalizzati. In questa fabbrica, ogni ordine (una "richiesta") attraversa due fasi distinte:
- Fase di Configurazione (Prefill): Leggi i progetti e raccogli tutti i pezzi necessari. Questo è un lavoro pesante che richiede molta potenza di calcolo (compute), ma avviene tutto in una volta.
- Fase di Assemblaggio (Decode): Inizi a costruire il robot, aggiungendo un pezzo alla volta, uno dopo l'altro. Questo è un lavoro più lento e pesante in termini di memoria, che avviene passo dopo passo.
La tua fabbrica possiede un braccio robotico gigante e super-veloce (la GPU) che può lavorare su più ordini simultaneamente. Tuttavia, il braccio ha un limite: può tenere in una sola volta un certo peso totale di pezzi nella sua pinza (il Budget di Token).
Il documento che hai fornito è uno studio matematico su come organizzare gli ordini in modo che la tua fabbrica non smetta mai di lavorare e produca il numero massimo possibile di robot senza intasarsi.
Ecco la sintesi delle loro scoperte utilizzando analogie semplici:
1. La Regola d'Oro: "Non Lasciare il Braccio Inattivo"
La scoperta più importante di questo documento è un concetto chiamato "Conservazione del Lavoro" (Work-Conserving).
Immagina che il tuo braccio robotico sia pronto ad afferrare i pezzi.
- Il Modo Sbagliato: Permetti al braccio di afferrare pezzi di "Configurazione" solo se ci sono esclusivamente ordini di Configurazione in attesa. Se ci sono ordini di "Assemblaggio" in attesa, li ignori, anche se il braccio ha spazio vuoto. Oppure, permetti di afferrare pezzi di "Assemblaggio" solo se ci sono esclusivamente ordini di Assemblaggio.
- Risultato: Il braccio rimane a metà vuoto, in attesa di un tipo specifico di ordine, mentre un enorme mucchio dell'altro tipo di ordine si accumula. La fabbrica rallenta o si blocca.
- Il Modo Giusto (Conservazione del Lavoro): Se il braccio ha spazio, lo riempi con qualsiasi cosa sia disponibile. Mescoli pezzi di Configurazione e pezzi di Assemblaggio nello stesso lotto. Non lasci mai il braccio inattivo se c'è lavoro da fare.
L'Affermazione del Documento: Gli algoritmi che seguono questa regola di "riempire il secchio" (come Orca e Sarathi-Serve) sono matematicamente dimostrati come i più efficienti. Possono gestire la quantità massima possibile di lavoro senza che il sistema collassi.
2. I "Manager" della Fabbrica: "Vecchi" vs "Nuovi"
Gli autori hanno testato quattro popolari "manager" (algoritmi di schedulazione) per vedere chi seguiva la Regola d'Oro:
- FasterTransformer & Vanilla vLLM (I Manager Rigidi): Questi manager sono troppo schizzinosi.
- FasterTransformer afferra solo pezzi di Assemblaggio. Se non ci sono ordini di Assemblaggio, ignora gli ordini di Configurazione in attesa, anche se il braccio è vuoto.
- Vanilla vLLM afferra solo pezzi di Configurazione. Se non ci sono ordini di Configurazione, ignora gli ordini di Assemblaggio.
- Verdetto: Questi non sono ottimali. Sotto carichi elevati, causano l'intasamento e l'instabilità della fabbrica.
- Orca & Sarathi-Serve (I Manager Flessibili): Questi manager mescolano i due tipi di lavoro. Riempiono il braccio con ciò che si adatta.
- Verdetto: Questi sono ottimali. Mantengono la fabbrica in funzione fluidamente alla massima velocità.
3. La Fabbrica "Agente AI" (Flussi di Lavoro Complessi)
A volte, un ordine non è un singolo robot, ma un'intera squadra di robot che lavora insieme.
- Il DAG (Grafo Aciclico Diretto): Immagina un flusso di lavoro in cui l'Ordine A va alla Stazione 1, poi alla Stazione 2, poi alla Stazione 3, e non torna mai indietro.
- Scoperta: Finché il flusso di lavoro è una linea retta (senza cicli), la regola "Non Lasciare il Braccio Inattivo" funziona perfettamente attraverso tutte le stazioni.
- La Ramificazione-Riunione (Fork-Join): Immagina che l'Ordine A si divida in tre sottocompiti che vanno a tre stazioni diverse, e che tutti debbano finire prima che possa avvenire il passaggio finale.
- Scoperta: Anche qui, la regola "Non Lasciare il Braccio Inattivo" funziona.
- Il Ciclo (La Trappola): Immagina che l'Ordine A vada alla Stazione 1, poi alla Stazione 2, ma che l'Ordine B vada dalla Stazione 2 di nuovo alla Stazione 1. Si inseguono a vicenda in cerchio.
- Scoperta: Qui, la regola "Non Lasciare il Braccio Inattivo" può fallire. Anche se i manager stanno facendo del loro meglio, il traffico circolare può causare un ingorgo che non si risolve mai. Il documento mostra che se la tua fabbrica ha questi cicli circolari, hai bisogno di un manager molto più intelligente e attento, non solo di uno che "riempie il secchio".
4. La Sorpresa della "Dimensione del Secchio"
C'è un secondo limite nella fabbrica: la Dimensione del Lotto (Batch Size). Questo è il numero massimo di ordini che il braccio può contenere, indipendentemente da quanto pesano.
- La Sorpresa: Gli autori hanno scoperto che a volte, riempire il braccio fino al suo limite massimo di peso (il Budget di Token) è in realtà una cattiva idea.
- L'Analogia: Immagina di avere un secchio che contiene 100 libbre. Hai 100 sassolini minuscoli (Configurazione) e 100 mattoni pesanti (Assemblaggio).
- Se provi a riempire il secchio fino a 100 libbre con i mattoni, potresti riuscire a inserirne solo 5. Il tempo necessario per sollevare quel carico pesante è lungo.
- Ma se ti fermi a 50 libbre (un carico più leggero), potresti riuscire a sollevarlo molto più velocemente, permettendoti di fare più viaggi all'ora.
- La Scoperta: In situazioni specifiche, la strategia più efficiente è smettere di riempire il secchio prima che sia pieno per mantenere alta la velocità di elaborazione. Questo significa che anche i "Buoni Manager" (Conservazione del Lavoro) possono fallire se le regole della fabbrica (limiti di dimensione del lotto) sono troppo rigide e il mix di ordini è esattamente quello giusto per causare un ingorgo.
Sintesi
Il documento ci dice:
- Mescola il tuo lavoro: Non separare i compiti di Configurazione e Assemblaggio. Mescolali nello stesso lotto per mantenere la GPU occupata.
- Orca e Sarathi-Serve sono i vincitori: Seguono la regola "mescola e riempi", rendendoli le scelte più stabili ed efficienti per la maggior parte delle situazioni.
- Attenzione ai cicli: Se i tuoi agenti AI inviano compiti avanti e indietro tra i server in cerchio, le semplici regole di "riempire il secchio" potrebbero non funzionare; serve un controllo del traffico speciale.
- Pieno non è sempre meglio: A volte, lasciare un po' di spazio vuoto nel tuo lotto è più intelligente che riempirlo fino all'orlo, a seconda di quanto sono grandi i singoli compiti.
L'obiettivo di tutta questa matematica è aiutare gli ingegneri a costruire sistemi AI che non si bloccano quando milioni di persone fanno domande contemporaneamente.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.