Der Einsatz von GPT-NeoX 20B in der Produktion ist eine Herausforderung und wir haben es bei NLP Cloud auf die harte Tour gelernt... In diesem Artikel erfahren Sie mehr über verschiedene Tricks im Zusammenhang mit der Verwendung von GPT-NeoX 20B und insbesondere über den Umgang mit DeepSpeed in der Produktion.

GPT-NeoX 20B ist das größte Open-Source-Modell für die Verarbeitung natürlicher Sprache, das derzeit verfügbar ist.
Es wurde von EleutherAI vor 2 Wochen veröffentlicht. Es wurde mit 20 Milliarden Parametern trainiert, nach einem Jahr harter Arbeit voller Herausforderungen. Eine der Hauptschwierigkeiten schien die Fähigkeit zu sein, eine geeignete parallele Architektur einzurichten, damit das Modell effizient auf mehreren GPUs trainiert werden kann.
Das Vorgängermodell, GPT-J, wurde auf Google TPUs trainiert und war für den Einsatz auf TPUs konzipiert. Die innere Architektur von GPT-NeoX 20B ist radikal anders und für die Verwendung auf GPUs ausgelegt. Die Idee ist, dass es das erste einer Reihe von noch größeren Modellen sein soll (das Ziel ist, zu GPT-3 aufzuschließen).
GPT-NeoX 20 ist ein Textgenerierungsmodell, d.h. es kann Texte für Sie schreiben und nahezu jeden Anwendungsfall der natürlichen Sprachverarbeitung mit hoher Genauigkeit umsetzen: Blogpost-Generierung, Chatbots, Textklassifizierung, Stimmungsanalyse, Schlüsselwort-Extraktion, Code-Generierung, Entity-Extraktion, Intent-Klassifizierung, Fragenbeantwortung und mehr...
Zweifellos werden viele Forscher und Unternehmen dieses neue Modell nutzen und großartige Ergebnisse erzielen. Aber es gibt eine Herausforderung: Wie kann GPT-NeoX 20B eingesetzt werden?
Die erste Herausforderung, mit der man konfrontiert wird, wenn man versucht, GPT-NeoX 20B in der Produktion einzusetzen, ist die moderne Hardware, die dafür erforderlich ist.
Es war immer noch möglich, GPT-J auf Verbraucherhardware einzusetzen, auch wenn diese sehr teuer war. Zum Beispiel konnte man es auf einer sehr guten CPU (auch wenn das Ergebnis schmerzhaft langsam war) oder auf einer fortschrittlichen Gaming-GPU wie der NVIDIA RTX 3090 einsetzen. Aber GPT-NeoX 20B ist so groß, dass dies nicht mehr möglich ist.
Grundsätzlich erfordert GPT-NeoX mindestens 42 GB VRAM und 40 GB Festplattenspeicher (und ja, wir sprechen hier von der schlanken fp16-Version). Nur wenige GPUs erfüllen diese Anforderungen. Die wichtigsten sind die NVIDIA A100, A40 und RTX A6000.
Diese Grafikprozessoren sind nicht nur sehr teuer, sondern aufgrund der weltweiten Halbleiterknappheit ist es heutzutage auch schwierig, einen davon zu bekommen.
Die beste Lösung ist hier eine Multi-GPU-Architektur.
Wenn Sie Ihr Modell nicht auf einem einzigen Grafikprozessor unterbringen können, können Sie versuchen, es auf mehrere Grafikprozessoren aufzuteilen.
Dies ist aus 2 Gründen eine interessante Option. Erstens ist die horizontale Skalierung einer Infrastruktur oft billiger als die vertikale Skalierung. Das gilt für Server und auch für GPUs. Zweitens ist es einfacher, mehrere kleine GPUs wie den NVIDIA Tesla T4 in die Hand zu bekommen als größere GPUs wie den NVIDIA A40.
Leider ist die Aufteilung eines Modells für maschinelles Lernen auf mehrere GPUs eine technische Herausforderung. Hugging Face hat einen großartigen Artikel über Modellparallelität und die Möglichkeiten, die Sie haben, veröffentlicht. Lesen Sie ihn hier. Aber glücklicherweise hat EleutherAI GPT-NeoX 20B so konzipiert, dass es leicht auf mehreren GPUs parallelisiert werden kann, sei es für das Training oder die Inferenz.
Die GPT-NeoX-Architektur basiert auf Deepspeed. Deepspeed ist ein Framework von Microsoft, das ursprünglich für die Parallelisierung von Trainings auf mehreren GPUs entwickelt wurde und immer häufiger auch für Inferenzen verwendet wird. EleutherAI hat die ganze harte Arbeit geleistet, so dass die Parallelisierung von GPT-NeoX so einfach ist wie die Änderung einer Zahl in einer Konfigurationsdatei.

Extract from the GPT-NeoX docs about parallelism
Der Einsatz von Deepspeed in der Produktion für die Online-Inferenz über eine API ist jedoch schwierig... Deepspeed wurde nicht für eine einfache Integration in Webserver konzipiert. Bei NLP Cloud haben wir es auf die harte Tour gelernt, aber nach harter Arbeit ist es uns schließlich gelungen, einen effizienten Weg zu finden, Deepspeed und GPT-NeoX hinter unserer API zum Laufen zu bringen.
Nehmen wir also an, Sie haben es geschafft, die richtige Hardware bereitzustellen und GPT-NeoX 20B mit Deepspeed korrekt zu installieren. Nun gibt es ein paar Vorbehalte, die Sie beachten sollten.
Erstens haben die Parameter (top k, top p und Temperatur) im Vergleich zu GPT-J nicht die gleichen Auswirkungen auf das Modell. Wenn es Ihnen also gelungen ist, eine gute Konfiguration für GPT-J zu finden, sollten Sie dies nicht als selbstverständlich ansehen: Sie müssen neue Tests mit GPT-NeoX durchführen.
Selbst wenn die Eingabegröße auf 2048 Token erhöht werden kann, wird mehr Speicher als die oben genannten 42 GB benötigt...
GPT-Modelle sind recht langsam, und GPT-NeoX 20B ist da keine Ausnahme. Um den Durchsatz Ihrer Anwendung zu verbessern, sollten Sie daher an einer Batch-Inferenzlösung arbeiten.
Im Moment haben wir bei NLP Cloud noch keine gute Lösung dafür gefunden.
Der GPT-NeoX-Code ist so konzipiert, dass man mit einer einzigen Anfrage mehrere Inferenzen gleichzeitig durchführen kann. In unseren Tests wuchs die Antwortzeit jedoch linear mit der Anzahl der Inferenzen, was den Zweck der Batch-Inferenz in gewisser Weise zunichte macht...
Der GPT-NeoX 20B ist definitiv schwer in der Produktion einzusetzen. Die Qualität der Texterstellung ist erstaunlich, aber nur wenige werden die Kapazität haben, dieses Modell tatsächlich zu installieren.
Mehr denn je scheint es, dass die Lösung darin besteht, sich auf einen Cloud-Dienst wie NLP Cloud zu verlassen, um dieses Modell zu nutzen.
Wenn Sie Rückmeldungen zu diesem Artikel haben, zögern Sie bitte nicht, uns zu kontaktieren, wir würden uns freuen, Ihre Meinung dazu zu hören!
Julien Salinas
CTO bei NLP Cloud