Premi invio.
Lo fai mille volte al giorno. Ma dove va, davvero, quello che scrivi?
Scrivi una frase qualunque e premi invio: da lì comincia il viaggio. La frase resta nel tuo browser, non parte per nessun server.
↓ segui il pacchetto
Lo fai mille volte al giorno. Ma dove va, davvero, quello che scrivi?
Scrivi una frase qualunque e premi invio: da lì comincia il viaggio. La frase resta nel tuo browser, non parte per nessun server.
↓ segui il pacchetto
📦 Atterrata:
Fra il tuo invio e la prima parola della risposta passa meno di un battito di ciglia. Dentro quel battito ci stanno una stretta di mano crittografica, qualche migliaio di chilometri di fibra e una fila.
Premere invio è il gesto più banale che ci sia, e nell'istante in cui lo fai la tua frase smette di essere una riga di lettere sullo schermo. Diventa un pacchetto di numeri che parte: esce dal telefono, attraversa il router di casa, entra in una fibra e comincia a correre verso un edificio che non hai mai visto, spesso in un altro continente. Là dentro non c'è nessuna nuvola. Ci sono armadi di computer, ventole che urlano e una bolletta della corrente, ed è la prima tappa del percorso: il mondo fisico.
Prima ancora di partire, però, succede qualcosa che non vedi. Il tuo browser e il computer dall'altra parte si mettono d'accordo su una specie di lingua segreta, in modo che nessuno, lungo la strada, possa leggere quello che hai scritto: è il lucchetto che compare accanto all'indirizzo, e se ti va di vedere come funziona c'è un fumetto che lo spiega benissimo (in inglese, ma è quasi tutto disegnato). Poi la frase parte, arriva, e trova la fila. Perché in questo stesso momento non sei l'unico ad aver premuto invio: migliaia di richieste aspettano il proprio turno, e solo quando arriva il tuo la macchina comincia davvero a lavorare.
Il viaggio dura dodici tappe. Le prime raccontano dove vive l'intelligenza artificiale, quelle di mezzo come è nata, le ultime che cosa fa esattamente con le tue parole. Alla fine non avrai in mano tutto il territorio, ma una mappa sì: abbastanza per non confondere la magia con l'ingegneria.
Scrivi nel riquadro della chat, in cima alla pagina, e guarda che cosa cambia qui sotto: quello che parte non sono le lettere che vedi, sono i byte che le rappresentano.
POST /v1/chat/completions HTTP/2
Questa è la forma di una richiesta a un servizio di chat: un metodo, un indirizzo, qualche intestazione e un corpo in JSON. Content-Length è il numero di byte del corpo, contato davvero sul testo che hai scritto. Prova a mettere una lettera accentata: vale due byte. Prova con un'emoji: quattro. I caratteri che vedi e i byte che partono sono due conti diversi, ed è la stessa ragione per cui, più avanti, l'italiano costa più dell'inglese.
Fra il tuo invio e il primo byte che lascia il dispositivo c'è una sequenza fissa, e nessuno dei suoi passaggi è gratis. Il browser deve tradurre il nome del servizio in un indirizzo IP (è il DNS), aprire una connessione di trasporto e negoziare la crittografia. Quest'ultima parte si chiama handshake, stretta di mano: client e server si scambiano numeri casuali e chiavi pubbliche finché non condividono un segreto che nessun terzo può ricostruire. La versione corrente del protocollo, TLS 1.3 (RFC 8446, 2018), chiude la stretta di mano in un solo giro di andata e ritorno — un round-trip, in gergo 1-RTT — mentre TLS 1.2 ne chiedeva due; e se quel server lo hai già visitato, il client può spedire i primi dati già nel primo volo, a 0-RTT (§2.3 della stessa RFC). Con QUIC (RFC 9000, 2021), il trasporto su cui gira HTTP/3, la stretta di mano del trasporto e quella crittografica si fondono in un unico scambio.
Un round-trip non è un'astrazione da manuale: è chilometri. La luce in una fibra ottica viaggia a circa 200.000 km/s, perché l'indice di rifrazione del vetro sta intorno a 1,5 e la rallenta a due terzi della velocità nel vuoto. Ilya Grigorik, nella tabella 1-1 di High Performance Browser Networking, mette in fila i conti: da New York a Londra ci sono 5.585 km, che in fibra fanno 28 ms all'andata e 56 ms di andata e ritorno; New York-Sydney sale a 160 ms. Sono numeri ottimisti, perché presuppongono che il cavo segua la rotta più corta sul globo, e quasi mai è così. Il conto pratico è questo: un handshake da un giro, su una tratta transatlantica, può essere già costato più di un ventesimo di secondo prima che la tua frase si muova di un millimetro. È anche il motivo per cui gli operatori mettono i server vicino a te: la fisica non si contratta.
Quello che parte, poi, non è la tua frase e basta. Il browser la impacchetta in una richiesta
HTTP — quasi sempre un POST con un corpo in JSON, come quello del riquadro qui
sopra — e in quel corpo, accanto al tuo testo, viaggiano l'istruzione di sistema che decide il
carattere dell'assistente e l'intera conversazione precedente, turno per turno. Non è un
dettaglio implementativo: è la ragione per cui il modello sembra ricordare
(non ricorda: rilegge) e per cui chi scrive quell'istruzione ha
in mano una leva enorme (lo steering). La lunghezza del corpo,
Content-Length, è in byte e non in caratteri, perché UTF-8 codifica le lettere
latine con un byte, le accentate con due e la maggior parte delle emoji con quattro.
All'arrivo la richiesta non trova una GPU che ti aspetta a braccia aperte: trova una coda. Le schede grafiche rendono solo se elaborano molte richieste insieme, e buona parte della ricerca sull'inferenza degli ultimi anni sta proprio in come si compone quel lotto. Orca (OSDI 2022) ha introdotto lo scheduling a livello di iterazione: invece di programmare l'esecuzione di una richiesta intera, lo scheduler fa girare il modello un'iterazione alla volta, cioè un token alla volta, così chi ha finito esce subito dal lotto e chi arriva entra senza aspettare che il giro si chiuda. Su un GPT-3 da 175 miliardi di parametri, gli autori misurano 36,9 volte il throughput di NVIDIA FasterTransformer a parità di latenza. L'anno dopo vLLM (SOSP 2023) ha applicato alla cache delle chiavi e dei valori l'idea della memoria virtuale dei sistemi operativi — la PagedAttention — portando lo spreco di memoria vicino a zero e guadagnando altre 2-4 volte a parità di latenza. Per te tutto questo si condensa in un numero solo, il tempo al primo token: quanto aspetti prima che compaia la prima parola.
Un'ultima onestà. Quale sia lo stack esatto dell'assistente che apri ogni giorno non lo so, e non lo sa nessuno fuori dall'azienda che lo gestisce: le architetture di servizio non si pubblicano. Quella che ho descritto è l'architettura standard, documentata nei paper e implementata nei sistemi aperti come vLLM, che oggi serve una parte consistente dei modelli che si possono installare per conto proprio.
Come funziona questa pagina, detto senza trucchi. Non manda niente a
nessuno: la frase che scrivi resta sul tuo dispositivo, salvata in
localStorage
con la chiave insegnai_msg, così le tappe che vengono dopo possono lavorare sulla tua
frase invece che su una d'esempio; se la vuoi cancellare basta svuotare i dati del sito dalle
impostazioni del browser. Il conteggio dei byte è vero, calcolato adesso con l'API
TextEncoder. Il pacchetto rosa che vola sulla mappa, invece, è un disegno: il viaggio
vero è quello raccontato qui sopra, e i millisecondi che costa li trovi nelle fonti.
Complessità della fonte: divulgativa approfondimento tecnica o accademica