vLLM passa al LibTorch Stable ABI e pubblica wheel CUDA compatibili
Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.
Da v0.33.0 vLLM può usare wheel PyTorch aggiornabili senza ricompilare il backend C++, riducendo i rebuild per utenti e distributori.
Da v0.33.0 vLLM pubblica wheel CUDA compatibili con lo Stable ABI di LibTorch. Chi aggiorna PyTorch può cambiare wheel senza ricompilare o rilinkare vLLM. Il backend C++ ora dialoga con PyTorch tramite un’ABI stabile. Restano vincoli di compatibilità, tra cui API Python, requisiti GPU e dipendenze di terze parti1.
Prima della migrazione, ogni modifica all’interfaccia binaria di LibTorch imponeva un rebuild di vLLM, anche a parità di API pubbliche. Con lo Stable ABI, la stessa wheel di vLLM può funzionare su più release di PyTorch compatibili, riducendo attese e ricompilazioni per utenti e distributori1.
PyTorch offre lo Stable ABI su tre livelli: una C shim stabile con un sottoinsieme di API, wrapper C++ e utility header-only in torch::headeronly. Lo Stable ABI preserva un set di interfacce binarie tra versioni compatibili, così le estensioni continuano a funzionare senza rebuild1.
Lo Stable ABI non copre tutto LibTorch. Alcune API mancavano durante la migrazione. Un caso è is_pinned(), assente in forma stabile, che vLLM ha aggirato usando torch_call_dispatcher nella C shim per invocare gli operatori ATen in modo ABI-stabile. In seguito, PyTorch 2.14 ha aggiunto un metodo C++ stabile per is_pinned()1.
Il passaggio ha toccato molto codice: oltre 175 file .cpp/.cu e più di 120 header nel solo build CUDA. Per gestire la complessità, il team ha introdotto una libreria “stable” separata e ha migrato i kernel a blocchi, con aggiornamenti a CMakeLists nel primo PR di migrazione, #31509. Il flag di build TORCH_TARGET_VERSION fa fallire la compilazione se qualcuno include header LibTorch instabili, proteggendo la compatibilità ABI1.
Cambia anche la registrazione delle operazioni. Con lo Stable ABI serve STABLE_TORCH_LIBRARY. L’implementazione usa TORCH_BOX, che genera l’adapter per il boxing e l’unboxing tra tipi C++ e StableIValue. Chi registra kernel con altri meccanismi, come pybind11, dovrebbe prima spostarli su TORCH_LIBRARY, poi passare a STABLE_TORCH_LIBRARY1.
Alcune parti si spostano in Python. Lo Stable ABI non espone SymInt, quindi le meta function vanno scritte in Python. Lo stesso vale per AutogradFunction, perché l’autograd di PyTorch non è incluso nello Stable ABI. In vLLM il cambio è stato limitato, perché molte meta function erano già in Python. Se esiste un backward, va in Python1.
Lo Stable ABI introduce un piccolo overhead lato host. La C shim aggiunge conversioni di tipo e, con torch_call_dispatcher, lookup e boxing degli operatori. Il team non ha osservato regressioni di runtime durante la migrazione. L’effetto tende a sparire dopo il warmup con CUDA Graphs, ma può contare in eager mode con kernel molto rapidi1.
Il codice che include header PyTorch deve ora prendere i simboli dai wrapper C++ stabili, dalle utility header-only o dalla C shim. In pratica: torch/csrc/stable, torch/headeronly e torch/csrc/stable/c/shim.h, oppure l’analogo aoti_torch. Il resto della migrazione sui file è stato perlopiù meccanico, con adattamenti coerenti a queste API1.
Per chi mantiene ambienti di produzione o distribuisce pacchetti, cambia il flusso: si può aggiornare la wheel PyTorch compatibile e validarla con vLLM senza toccare la build di vLLM. E, se si sviluppa PyTorch, si possono testare le modifiche in vLLM senza ricompilarlo1.
Fonti
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici
Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:
- Rilettura. Un passaggio toglie i tic della prosa generata da un modello, come i contrasti costruiti e le frasi che annunciano invece di informare, senza toccare fatti e fonti.
- Fedeltà alle fonti. Un passaggio dedicato toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 9,5/10.
- Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
- Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,1/10.
I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.
Per vedere Millebit nelle notizie principali di Google, aggiungilo alle tue fonti preferite. Oppure segui l’edizione di oggi, il feed RSS o La Sintesi.