In che modo il batching continuo influisce sull’equità su un server AI domestico?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Il batching continuo migliora l'utilizzo riempiendo nuovamente i batch attivi, ma l'equità dipende da come gli utenti ricevono accesso, servizio dei token e memoria nel tempo.

Un server AI domestico può gestire diverse conversazioni senza aspettare che ogni sequenza termini insieme alle altre. Le richieste completate escono, le nuove richieste entrano e gli utenti attivi condividono iterazioni di inferenza ripetute. Questo aumenta il throughput, ma le richieste non sono equivalenti: un utente può inviare un comando breve, un altro un documento lungo e un altro ancora un agente che genera centinaia di token. Uno scheduler equo deve stabilire quale unità di lavoro considerare, come ammettere le nuove richieste e come far interagire le priorità con lunghezze di output imprevedibili.

Il batching continuo cambia l'unità di scheduling: da un batch fisso alle iterazioni

Il batching statico mantiene un unico gruppo fino al completamento dell'intero gruppo, sprecando capacità quando le richieste brevi terminano in anticipo. Il batching continuo può riempire nuovamente gli slot disponibili tra un'iterazione di generazione e l'altra.

Orca ha introdotto lo scheduling a livello di iterazione, così le richieste possono entrare e uscire man mano che cambia lo stato della loro sequenza.

Questo migliora l'utilizzo, ma significa anche che gli utenti competono ripetutamente per un posto nell'iterazione successiva, invece di ricevere uno slot indivisibile per l'intera richiesta.

L'ordine di ammissione determina chi inizia ad accumulare servizio

Una richiesta al di fuori del batch attivo non riceve alcun avanzamento dal modello. Lo scheduler può ammettere le richieste in base all'ordine di arrivo, alla lunghezza stimata, alla priorità, ai blocchi KV disponibili o a un contatore di equità.

vLLM combina l'ammissione continua con la gestione paginata della cache KV, così la memoria può essere allocata man mano che le sequenze crescono.

Il principio first come, first served è semplice, ma una coda di richieste lunghe può ritardare i successivi comandi brevi degli utenti domestici, anche quando questi terminerebbero rapidamente.

Contare le richieste allo stesso modo può produrre un servizio diseguale dell'acceleratore

Una risposta di cinque token e una di cinquecento token sono entrambe una richiesta, ma occupano un numero molto diverso di iterazioni di decodifica. Anche la lunghezza dei prompt comporta quantità diverse di lavoro di prefill.

Il Virtual Token Counter definisce l'equità basata sui token, perché il semplice conteggio delle richieste non rappresenta il servizio consumato da carichi LLM eterogenei.

Una politica domestica dovrebbe stabilire se per equità si intende un'uguale quantità di lavoro in token, un uguale tempo di attesa, un'uguale opportunità di completamento o la priorità per le attività sensibili alla latenza.

Nessuna metrica soddisfa ogni carico di lavoro. Un comando vocale e un riepilogo in background non devono necessariamente ricevere un trattamento identico.

-15% OFF

La lunghezza sconosciuta dell'output rende difficile prevedere il servizio futuro

Al momento dell'ammissione, lo scheduler conosce la dimensione del prompt, ma di solito non sa esattamente quanti token di output genererà il modello. Una richiesta può rimanere attiva molto più a lungo del previsto.

La ricerca sull'equità evidenzia le lunghezze imprevedibili delle richieste come una difficoltà specifica della gestione degli LLM.

Addebitare il servizio in base ai token effettivamente elaborati evita di dipendere completamente da una stima approssimativa della lunghezza, ma può comunque consentire a una richiesta lunga di occupare memoria per molte iterazioni.

I prefill di grandi dimensioni possono disturbare gli utenti che stanno già ricevendo token

Un nuovo prompt con un documento può entrare mentre diversi utenti stanno eseguendo la decodifica. Il suo prefill, intensivo dal punto di vista computazionale, può allungare l'iterazione che le conversazioni attive devono attendere.

Sarathi-Serve utilizza lo scheduling senza stalli per suddividere i prefill di grandi dimensioni e ridurne l'effetto sulla latenza di decodifica delle richieste in corso.

Uno scheduler che conta solo i token di decodifica può comunque essere ingiusto se un utente introduce ripetutamente prefill di grandi dimensioni che ritardano l'output trasmesso in streaming di tutti gli altri.

Un conteggio equo dovrebbe quindi includere l'elaborazione dell'input oltre ai token generati.

La pressione sulla memoria può creare problemi di equità prima che il calcolo raggiunga la saturazione

Ogni conversazione attiva richiede una cache KV e i contesti più lunghi consumano più blocchi. Un utente con un unico contesto di grandi dimensioni può ridurre il numero di altre richieste che entrano nel batch attivo.

L'analisi multiutente di ZimaSpace collega la concorrenza domestica alla memoria condivisa del modello e alle decisioni dello scheduler.

Sospendere o spostare una richiesta può ripristinare la capacità, ma l'utente interrotto potrebbe in seguito dover pagare il costo della ricalcolazione, del ricaricamento della cache o di un tempo di completamento più lungo.

L'ammissione in memoria e lo scheduling del calcolo devono quindi seguire la stessa politica di equità, invece di funzionare come limiti non correlati.

Le priorità richiedono invecchiamento, quote e misurazioni visibili agli utenti

Il controllo vocale, gli strumenti di accessibilità e le chat interattive brevi possono meritare una priorità maggiore rispetto agli embedding o ai riepiloghi notturni. Tuttavia, uno scheduling basato esclusivamente sulle priorità può lasciare senza servizio le attività a bassa priorità.

Llumnix utilizza lo scheduling dinamico per adattare il posizionamento delle richieste e le decisioni sulle risorse al variare delle condizioni di servizio.

Aggiungi l'invecchiamento delle richieste, quote per utente, limiti massimi per il contesto o l'output e una quota riservata per le attività in background, così il lavoro preferenziale risponde rapidamente senza bloccare indefinitamente tutto il resto.

Misura il tempo in coda, il tempo al primo token, il ritardo tra i token, il tempo di completamento, i token serviti e le sospensioni per utente o classe di carico. Il batching continuo è equo solo quando la distribuzione osservata corrisponde alla politica domestica, non semplicemente quando il numero totale di token al secondo è elevato.

Hub Tecnologico e AI

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.