Wie macht man jetzt *Inferrrenzzzen scchnellerr*? Inferenz ohne Latenz

Von Anna Kobylinska und Filipe Martins* 9 min Lesedauer

Anbieter zum Thema

Die „intelligente“ Edge ist gar nicht so schlau. Sie lässt sich Zeit, frisst Strom, heizt auf. Kann man die Inferenz nicht irgendwie beschleunigen?

Heute laufen Inferenz-Anwendungen mit Verzögerungen und gerenerll zu langsam; Im Modelltraining helfen zumeist GPUs und andere, mehr auf KI gemünzte Beschleuniger. Taugen die auch für das Inferecing? (Bild:  frei lizenziert: heliofil /  Pixabay)
Heute laufen Inferenz-Anwendungen mit Verzögerungen und gerenerll zu langsam; Im Modelltraining helfen zumeist GPUs und andere, mehr auf KI gemünzte Beschleuniger. Taugen die auch für das Inferecing?
(Bild: frei lizenziert: heliofil / Pixabay)

Die Anzahl der Parameter in KI-Modellen wächst um den Faktor 10x pro Jahr, schon seit einer halben Dekade. Die größeren Machine-Learning-Modelle von heute hantieren bereits mit Hunderten von Milliarden bis hin zu Billionen von Parametern.

Inferenz ist der Prozess, bei dem ein KI-Modell Eingabedaten auswertet und darüber orakelt. Es ist der Schritt nach der Lern- und Evaluierungsphase, bei dem das Modell seine gelernten Muster auf neue, unbekannte Daten anwenden darf, um Vorhersagen zu treffen oder sonstige Erkenntnisse zu liefern – mit einer Präzision, die im Vorfeld bekannt ist; denn dafür war die Evaluierung da.

Die Inferenz ist einfacher als Training, aber auch sie verschlingt erhebliche Ressourcen – es sei denn, man reduziert das bereits trainierte Modell auf eine handliche Größe mit Methoden zur Modellkomprimierung wie Pruning und Quantisierung (mehr dazu weiter unten). Unternehmen wie Facebook sind sich dafür nicht zu schade; unterm Strich spart es ihnen bares Geld – und „die Welt geht deswegen nicht unter“. Doch genau das darf man nicht verallgemeinern.

*Das Autorenduo

Das Autorenduo besteht aus Anna Kobylinska und Filipe Pereia Martins. Die beiden arbeiten für McKinley Denali, Inc., USA.

Ihr Fazit lautet: Algorithmische Verbesserungen, dedizierte Hardware, inferenzoptimierte Frameworks, ausgefuchste Compiler: Wer die Machine-Learning-Nutzung beschleunigen will, muss sich nicht auf einen Ansatz beschränken. Stattdessen gilt, vielleicht etwas kontraintuitiv: Ruhig mal ein größeres Netz auswerfen!

Was ist gewollt?

In kritischen Szenarien würde der Ansatz mit dem „roten Stift“ ganz schön nach hinten losgehen. Die Anforderungen an die Rechenleistung der Inferenz sind nämlich nicht nur eine Funktion der Komplexität des Modells, sondern sie unterliegen auch den Anforderungen des betreffenden Anwendungsfalls. Welche Latenz ist akzeptabel? Darf das Ergebnis ungenau sein? Ja oder nein, oder vielleicht etwas dazwischen?

Viele der begehrtesten Nutzungsszenarien für KI/ML brauchen garantierte Blitzresultate – zeitnahe Reaktionen mit einer kompromisslosen Trefferquote. In diese Kategorie von Echtzeitanwendungen fallen autonomes Fahren und Fliegen, aber auch etwa Sprach- und Betrugserkennung in FinTech-Unternehmen. „Ungefähr richtig“ ist nicht gut genug, auch wenn es schnell genug war.

Die Notwendigkeit, KI/ML-Modelle auf Edge-Geräten mit begrenzten Ressourcen auszuführen, bringt zusätzliche Einschränkungen mit sich. Es fängt schon damit an, dass Inferenzleistung eines ML-Modells über unterschiedliche Chipsätze hinweg inkonsistent ist.

Warum plötzlich so langsam?  Die Inferenzleistung eines ML-Modells über unterschiedliche Chipsätze hinweg ist nicht konsistent.(Bild:  Chaojian Li et al., ICLR’21)
Warum plötzlich so langsam? Die Inferenzleistung eines ML-Modells über unterschiedliche Chipsätze hinweg ist nicht konsistent.
(Bild: Chaojian Li et al., ICLR’21)

Die „Latenz der Inferenz“ schmälert die Benutzererfahrung in Anwendungen wie Chatbots, Empfehlungssystemen und virtuellen Assistenten – na und? Es ist nicht das Ende der Welt; die Benutze sind eh mit noch was anderem beschäftigt. Aber wenn ein autonomes Fahrzeug bei der roten Ampel „nachdenkt“, können andere nicht schnell genug auf die Bremsen drücken.

Fix und fertig: dedizierte Inferenz-Beschleuniger

Wie beschleunigt man Inferenzen? Es kommt darauf an.

Dedicated Accelerators (dedizierte Beschleuniger) sind Hardwarekomponenten oder auch Geräte, die spezifische, eng umrissene Aufgaben extrem schnell ausführen, schneller nämlich als Allzweckprozessoren. Ein solcher günstiger Inferenzbeschleuniger für Edge-Computing ist „Nvidia Jetson Nano“, ein kleines, erschwingliches und Energie-effizientes Entwicklungskit mit dem Prozessor „Nvidia Tegra X1“.

Die „Jetson“-Familie dedizierter Inferenzbeschleuniger von Nvidia. (Bild:  Nvidia)
Die „Jetson“-Familie dedizierter Inferenzbeschleuniger von Nvidia.
(Bild: Nvidia)

Tegra X1 enthält eine dedizierte Bildverarbeitungseinheit - IPU für Image Processing Unit. Diese übernimmt Aufgaben wie Dekodierung, Größenänderung und Filterung. Die IPU kann H.264- und H.265-Videos in bis zu 4K-Auflösung dekodieren, bis zu 120 Bilder pro Sekunde skalieren und eine Vielzahl von Filtern wie Gaußsche Unschärfe, Median-Unschärfe und Kantenerkennung anwenden. NVIDIAs Inferenz-Beschleuniger kommt in Geräten wie Drohnen, Robotern und in industriellen Maschinen zum Einsatz.

Googles Edge-TPUs für die Massen

Google hat mit der TPU - Tensor Processing Unit - einen spezialisierten Universalbeschleuniger für Maschinelles Lernen (ML) entwickelt. TPUs bieten erhebliche Leistungssteigerungen im Vergleich zu herkömmlichen GPUs und CPUs – je komplexer das Modell, desto besser – aber sie sind Teil der Cloud-Infrastruktur von Google. Mit „Google Anthos“ können Unternehmen einen Teil ihrer Arbeitslasten in die Google Cloud verschieben und gegebenenfalls auf TPU-Beschleunigern ausführen.

In diesem USB-Dongle, dem „Coral Accelerator“ von Google, steckt eine Edge-TPU, Googles Hardwarebeschleuniger für ML-Inferenz. Das Gerät funktioniert mit Linux, MacOS und Windows.(Bild:  Google LLC via Coral.ai)
In diesem USB-Dongle, dem „Coral Accelerator“ von Google, steckt eine Edge-TPU, Googles Hardwarebeschleuniger für ML-Inferenz. Das Gerät funktioniert mit Linux, MacOS und Windows.
(Bild: Google LLC via Coral.ai)

Mit der Edge-TPU hat Google einen Inferenzbeschleuniger speziell für Edge-Computing entwickelt. Edge-TPUs lassen sich direkt in IoT-Geräten oder sonstigen Edge-Endpunkten integrieren, um maschinelles Lernen direkt vor Ort zu beschleunigen. Ein Beispiel einer Implementierung ist der Coral Accelerator von Google. Das Gerät beinhaltet eine Edge-TPU und kann dank beschleunigter Inferenz ML-Anwendungen wie Bild- und Sprachverarbeitung in Echtzeit ausführen.

Inferenz mit Laufzeit-Effizienz

Wie beschleunigt man sonst noch die Inferenz, wenn man an der Hardware nichts ändern kann? Das hängt davon ab, wen man jetzt fragt.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu RZ- und Server-Technik

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

„Gemischte Präzision ist der einfachste Weg, um sowohl das Training als auch die Inferenz zu beschleunigen“, sagt Mike Davies, Direktor des Neuromorphic Computing Lab von Intel Labs. (Bild:  Intel Corporation)
„Gemischte Präzision ist der einfachste Weg, um sowohl das Training als auch die Inferenz zu beschleunigen“, sagt Mike Davies, Direktor des Neuromorphic Computing Lab von Intel Labs.
(Bild: Intel Corporation)

  • „Gemischte Präzision ist der einfachste Weg, um sowohl das Training als auch die Inferenz zu beschleunigen“, erläutert etwa Mike Davies, Direktor des Neuromorphic Computing Lab von Intel Labs.
  • Ein Google-Ingenieur würde jetzt vielleicht erwidern: „Bfloat16!“ Klingt wie eine Invektive, ist aber Fachsprache: So nennt sich Googles neues Gleitkommaformat mit erweitertem Dynamikumfang.
  • Natürlich lässt sich die Inferenz auch dadurch verkürzen, dass man einfach bessere Algorithmen einsetzt, zum Beispiel separierbare Faltungen (Englisch: “separable convolutions”) statt Standard-Faltungen (Engl. “standard convolutions). Separierbare Faltungen zerlegen eine konventionelle Faltung in zwei einfachere Operationen und schon läuft das Modell schneller.

Wie dem auch sei: Beliebte ML-Frameworks wie „Pytorch“ und „Tensorflow“ tun sich prinzipiell schwer mit der Inferenz. Diese Frameworks sind für das Training und die anschließende Evaluierung von ML-Modellen konzipiert. Die Leistung der Inferenz zog den Kürzeren.

Abhilfe schaffen Laufzeit-Frameworks wie „TensorRT“, „Openvino“, „Tflite“, „TFJS“, „SNPE“ und „CoreML“, mit hardwarespezifischen Optimierungsfähigkeiten. Um diese Vorteile zu nutzen, muss man das ML-Modell für eines dieser Laufzeit-Frameworks konvertieren.

Gemischte Präzision, gemischte Gefühle

Bei der gemischten Präzision rechnet das System mit Datentypen mit reduzierter Präzision, aber nur dort, wo sie die Gesamtgenauigkeit des Modells nicht beeinträchtigt. Der Ansatz kann die Geschwindigkeit von Training und Inferenz bei großen Sprachmodellen (LLMs) um bis zu das Dreifache erhöhen, ohne die Modellgenauigkeit zu beeinträchtigen.

Ein Modul wie „torch.amp“ (kurz für “Automated Mixed Precision”) macht es einfach, die Geschwindigkeits- und Speichernutzungsvorteile von Datentypen mit niedrigerer Präzision unter Beibehaltung des Konvergenzverhaltens zu nutzen. Die „Keras Mixed Precision API“ kann die Leistung auf modernen GPUs um mehr als das Dreifache, auf TPUs um 60 Prozent und auf den neuesten Intel CPUs um mehr als das Zweifache verbessern.

In vielen Deep-Learning-Anwendungen ist der Einfluss reduzierter Präzision auf die resultierende Genauigkeit der Inferenz aus dem Modell nur minimal und ein akzeptabler Kompromiss für die Vorteile einer reduzierten Speichernutzung und schnelleren Berechnung.

Brain Floating Point (bfloat16)

Ein neues Gleitkommaformat namens „Brain Floating Point“ (bfloat16) von Google und verringert die Präzision und erweitert gleichzeitig den Dynamikbereich im Vergleich zum herkömmlichen float16-Format, um die Inferenz zu beschleunigen. Google hat dieses Format für Anwendungen im Bereich des maschinellen Lernens und des Tiefen Lernens - Deep Learning - entwickelt.

Leistungsmerkmale eines LLM beim Training mit gemischter Präzision auf einer einzelnen „Nvidia A100- GPU.(Bild:  Sebastian Raschka auf Github)
Leistungsmerkmale eines LLM beim Training mit gemischter Präzision auf einer einzelnen „Nvidia A100- GPU.
(Bild: Sebastian Raschka auf Github)

Der erweiterte Dynamikbereich kann sehr große und sehr kleine Zahlen abbilden, die in Deep-Learning-Anwendungen vorkommen. In den meisten Deep-Learning-Anwendungen hat die geringere nummerische Präzision minimale Auswirkungen auf die Modellleistung, sie kann jedoch die Genauigkeit bestimmter Berechnungen beeinflussen oder in einigen Fällen zu Rundungsfehlern führen – es kommt halt darauf an, was man da genau rechnet.

Das gemischte Fließkomma-Format in 16 Bit ist kaum langsamer als float16, aber beim Training fast doppelt so genau : 92,15 Prozent statt 50,08 Prozent Genauigkeit. (Bild:  Sebastian Raschka auf Github)
Das gemischte Fließkomma-Format in 16 Bit ist kaum langsamer als float16, aber beim Training fast doppelt so genau : 92,15 Prozent statt 50,08 Prozent Genauigkeit.
(Bild: Sebastian Raschka auf Github)

Google hat das Format für die eigenen TPUs (Tensor Processing Units) entwickelt. Nvidia unterstützt es in seinen GPUs, beginnend mit den „A100 Tensor Core“-GPUs (mit der „Nvidia Ampere“-Architektur).

Optimierung durch Kompilierung

Dann gibt es die Möglichkeit, durch effiziente Kompilierung zu trumpfen. Für die Vor- und Nachbearbeitung beim Deep Learning sind kompilierte Sprachen wie C++ oft eine bessere Wahl als interpretierte Sprachen wie Python. Die Kompilierung in Maschinencode beschleunigt die Ausführung gegenüber interpretierten Code. Kompilierte Sprachen sind tendenziell speichereffizienter sein als interpretierte Sprachen.

Compiler nutzen eine ganze Reihe von Tricks und haben ein ausgeprägtes Verständnis der Hardware (Stichwort: „hardware aware“). Ein Compiler kann zum Beispiel gerichtete azyklische Graphen tiefer neuronaler Netzwerke mit Techniken wie Operatorfusion, Zwischenspeicherung und Speicherwiederverwendung unter Berücksichtigung der Besonderheiten der avisierten Zielplattform optimieren und dabei ggf. auch einige Berechnungen zusammenführen.

Nicht alle ML-Modelle lassen sich gleich effizient kompilieren. Verfügt ein Modell über eine Aktivierungsfunktion, die sich nicht kompilieren lässt, liegt es nahe, die sie auszutauschen – noch besser, wenn man es im Vorfeld gewusst hat.

Möglichkeiten der „Optimierung durch Kompilierung“ sollte man im Vorfeld überprüfen, sonst kann man womöglich Zeit und sonstige Ressourcen auf das Training eines Modells verschwenden, das sich für schnelle Inferenz grundsätzlich nicht optimieren lässt. Davon einmal abgesehen: Eine schnellere Laufzeitumgebung kann auch nicht schaden. Konkret zum Beispiel: WASM statt Kubernetes (ein Thema für einen nachfolgenden Artikel).

Modell-Pruning

Facebook setzt auf Modelloptimierungstechniken wie Quantisierung und Pruning, um die Effizienz der Inferenz zu steigern.

Pruning entfernt unnötige Gewichte und Verbindungen in einem neuronalen Netzwerk, im Grunde genommen eine gärtnerische Praxis. Das Konzept ist alt: Entfernt man strukturell instabile und unproduktive Äste vom Baum, fließt mehr Energie über die gesunden Gliedmaßen und es kommt mehr bei herum. So ähnlich ist es bei ML-Modellen:

Das Pruning entfernt ganze Knoten aus der Architektur oder setzt die am wenigsten nützlichen Parameter auf Null. Optimierte ML-Modelle laufen effizienter, sie erfordern weniger Rechenleistung und belegen weniger Speicher. Auf Edge-Geräten macht es einen großen Unterschied.

Quantisierung

Quantisierung reduziert die numerische Darstellung (Bit-Breite) von Gewichten und Aktivierungen durch die Umwandlung von einer hochpräzisen Gleitkommazahlen-Repräsentation (32-Bit Gleitkommazahlen) in eine niedrigpräzise Gleitkommazahlen-Repräsentation (FP). Dies reduziert die Modellgröße, verbessert die Speichereffizienz und verkürzt im Allgemeinen die Rechenzeit.

Modellquantisierung gilt als besonders vorteilhaft für die Bereitstellung komplexer Modelle auf Geräten mit begrenzter Kapazität, wie Mobiltelefonen oder IoT-Geräten. Der Ansatz kann jedoch auch eine Reihe von Problemen mit sich bringen, allen voran den Verlust an Genauigkeit oder Inkompatibilität mit bestimmter Hardware.

Nicht alle Modelle lassen sich gleich gut quantisieren. Quantisierungstechniken wie INT8 und sogar INT4 können die Genauigkeit des Modells bis zur Unbrauchbarkeit verschlechtern - um 1 Prozent bis 10 Prozent. Gewichte und Aktivierungen mit geringer Bit-Breite führen zu Informationsverlust, verzerren die Netzwerkdarstellung und umgehen die normale Differenzierung, die für das Training erforderlich ist.

Und was ist QAT?

Ein Ansatz namens QAT (kurz für: Quantisierungs-Aware Training) kann Abhilfe schaffen. Hierbei geht es darum, das Modell im Training darauf vorzubereiten, die Genauigkeitsminderung während der Quantisierung zu überwinden. QAT optimiert den Trainingsverlust für den Quantisierungsverlust. Eine Kalibrierung nach der Quantisierung ist in diesem Fall nicht erforderlich, weil das Modell bereits im Training kalibriert wurde.

Nicht alle Methoden der Quantisierung liefern dieselben Ergebnisse. Die Datenwissenschaftler/innen haben die Qual der Wahl.

Die Standard-Quantisierung - alle Operatoren auf INT8-Präzision, zuerst quantisiert und dann kalibriert - ist zwar einfach zu implementieren, führt aber oft zu einem deutlichen Rückgang der Modellgenauigkeit im Vergleich zum ursprünglichen Fließkommamodell. Dies liegt daran, dass verschiedene Operatoren unterschiedliche Empfindlichkeiten haben und man sie nicht alle „über einen Kamm scheren“ kann.

Die hybride oder selektive Quantisierung führt meist zu besseren Ergebnissen im Hinblick auf die Optimierung der Latenzzeit und der Genauigkeit. Sie reduziert einige Operatoren auf INT8-Präzision und belässt andere im Modus repräsentativer Datentypen wie FP16 oder FP32. Dies setzt allerdings Kenntnisse der Struktur des neuronalen Netzes und erfordert meist eine Sensitivitätsanalyse, will heißen: eine Schicht nach der anderen ausschließen und dann die Änderung der Latenz/Genauigkeit beobachten.

Der selektive Ansatz quantisiert einige Operatoren auf INT8-Präzision, allerdings mit unterschiedlichen Kalibrierungsmethoden und unterschiedlicher Granularität - pro Kanal oder pro Tensor. Die übrigen Operatoren werden auf INT8 quantisiert; empfindliche und nicht-empfindliche Schichten bleiben in FP16-Präzision. Die selektive Quantisierung bietet die fortschrittlichsten Möglichkeiten, um die Genauigkeit und die Latenz gleichzeitig zu optimieren.

Artikelfiles und Artikellinks

(ID:50033359)