vLLM übernimmt stabile LibTorch-ABI für einfachere PyTorch-Upgrades

vLLM hat seinen CUDA-Build auf die stabile LibTorch-ABI von PyTorch umgestellt. Damit funktionieren die stabilen v0.33.0-CUDA-Wheels mit LibTorch-ABI über kompatible PyTorch-Versionen hinweg, ohne dass vLLM neu gebaut werden muss. Nach Angaben des Projekts können Nutzer dadurch schneller aktualisieren, während Paketverteiler weniger Aufwand haben.
- vLLM veröffentlicht seit v0.33.0 CUDA-Wheels mit stabiler LibTorch-ABI.
- Kompatible PyTorch-Updates können ohne einen Neubau von vLLM verwendet werden.
- Bei der Migration wurden einige Meta-Funktionen und AutogradFunctions nach Python verlagert.
- Die stabile ABI beseitigt keine Kompatibilitätsanforderungen an Python, GPUs oder Drittanbieter.
Eine Änderung an der Anbindung von vLLM an PyTorch
vLLM stützt sich stark auf PyTorch und greift in seinem C++-Backend häufig auf LibTorch zurück. Änderungen an der binären Schnittstelle von LibTorch konnten bisher einen erneuten Build und ein erneutes Verknüpfen von vLLM erforderlich machen, selbst wenn die APIs auf Quellcodeebene unverändert blieben.
Die stabile LibTorch-ABI stellt eine unterstützte Gruppe binärer Schnittstellen über kompatible Versionen hinweg bereit. Laut vLLM können Nutzer dadurch das torch-Wheel austauschen und direkt in ein bestehendes vLLM-Paket importieren. Seit v0.33.0 veröffentlicht vLLM CUDA-Wheels mit stabiler LibTorch-ABI.
Die stabile Schnittstelle besteht aus drei Ebenen: einem C-Shim, das ausgewählte LibTorch-APIs bereitstellt, C++-Wrappern, die die Nutzung des Shims erleichtern, sowie Header-only-Hilfsfunktionen in torch::headeronly, die nicht gegen libtorch.so verknüpft werden.
Die Migration erforderte Änderungen am gesamten CUDA-Build
vLLM begann damit, seine PyTorch-API-Aufrufe zu erfassen, Lücken in den stabilen APIs zu identifizieren und Ersatzlösungen zu planen. Da der CUDA-Build mehr als 175 .cpp- und .cu-Quelldateien sowie weitere 120+ Header umfasst, erstellte das Projekt eine separate stabile Bibliothek und migrierte die Kernel in überschaubaren Abschnitten.
Die stabile ABI unterstützt derzeit weder stabiles SymInt noch PyTorchs Autograd-Funktionen. Deshalb verlagerte vLLM die verbleibenden Meta-Funktionen und AutogradFunctions nach Python. Operatoren müssen außerdem über STABLE_TORCH_LIBRARY registriert werden, wobei die Implementierungen mit TORCH_BOX umschlossen werden.
Viele Änderungen am Quellcode waren mechanischer Natur, etwa der Austausch von torch::Tensor durch torch::stable::Tensor und die Verwendung stabiler Varianten bestehender Operationen. vLLM erstellte außerdem Fähigkeiten für KI-Agenten, die bestehende APIs stabilen Entsprechungen zuordnen und auf häufige Fehler bei der Migration hinweisen. Nach Angaben des Projekts wurden bislang noch keine Evaluierungen entwickelt, um die Wirksamkeit dieser Fähigkeiten zu messen.
Die Kompatibilität hat weiterhin Grenzen
Die stabile ABI deckt nur einen Teil von LibTorch ab. Als während der Migration kein stabiles Gegenstück für is_pinned() verfügbar war, nutzte vLLM das universell einsetzbare C-Shim torch_call_dispatcher, um die ATen-Operation über den Dispatcher aufzurufen. Laut Quelle fügte PyTorch in Version 2.14 eine stabile C++-Methode is_pinned() hinzu.
Der Shim kann durch Typkonvertierung, Operatorsuche und Boxing zusätzlichen Overhead auf der Host-Seite verursachen. Laut vLLM ist dieser normalerweise vernachlässigbar und verschwindet nach dem Aufwärmen unter CUDA Graphs. Im Eager-Modus kann er jedoch relevant werden, wenn sehr schnelle Kernel wiederholt gestartet werden. Das Projekt berichtet, während der Migration keine spürbare Laufzeitverschlechterung festgestellt zu haben.
vLLM betont, dass die binäre Kompatibilität nur ein Teil der Kompatibilität zwischen vLLM und PyTorch ist. Python-APIs, GPU-Anforderungen wie die mindestens unterstützte CUDA-Version und Abhängigkeiten von Drittanbietern können weiterhin Einschränkungen verursachen. Das Projekt verwendet torch-abi-audit in der kontinuierlichen Integration, um kompilierte Bibliotheken zu untersuchen, instabile PyTorch-Symbole zu identifizieren und die für stabile Symbole erforderliche minimale LibTorch-Version zu melden.
vLLM: Migrating vLLM to the LibTorch Stable ABI


