Mit der zunehmenden Verbreitung von LLM-Technologien und der zunehmenden Reife des Ökosystems beginnen Unternehmen, die Grenzen und Kosten des Einsatzes von LLM-Technologien zu erkennen. Viele Unternehmen, die ursprünglich von der Anwendung von LLM-Technologien begeistert waren, haben zentralisierte Initiativen aufgegeben und verfolgen stattdessen eine Strategie, dezentrale Bemühungen zu fördern, Dienste wie ChatGPT und Claude in ihre Arbeitsabläufe zu integrieren.
Für dieses Phänomen gibt es mehrere Gründe. Mangelnde LLM-Expertise, MLOps-Anforderungen und die Abhängigkeit von einer speziellen GPU-Infrastruktur sind Hindernisse für die Umsetzung groß angelegter KI-Initiativen. Das heikelste Problem dabei ist jedoch die Abhängigkeit von GPUs.
In diesem Artikel werden wir die spezifischen Schwierigkeiten diskutieren, die sich aus der GPU-Abhängigkeit ergeben, eine mögliche Lösung untersuchen und uns ein spannendes Beispiel eines der bahnbrechenden Unternehmen ansehen, das in diesem Bereich tätig ist.
Die meisten öffentlich verfügbaren und hochleistungsfähigen Modelle wie GPT-4, Llama 2 und Claude basieren alle auf einer hochspezialisierten GPU-Infrastruktur. GPT-4, eines der größten im Handel erhältlichen Modelle, läuft bekanntermaßen auf einem Cluster von 8 A100-GPUs. Das viel kleinere 70B-Modell von Llama 2 benötigt immer noch mindestens eine A40-GPU, um mit angemessener Geschwindigkeit zu laufen.
Bei diesem GPU-Anforderungsniveau ist es praktisch nicht möglich, diese Modelle lokal zu betreiben – eine A100-GPU kostet, sofern Sie einen Verkäufer finden, fast 25.000 US-Dollar. Sobald Sie die GPUs erhalten haben, benötigen Sie spezielle Kenntnisse zum Einrichten und Warten der Server. Nur sehr wenige Organisationen wären bereit, einen solchen Aufwand für das Experimentieren mit LLM-Technologien auf sich zu nehmen.
Um dieses Problem zu lösen, haben mehrere Startups und Cloud-Anbieter umfangreiche PaaS-Angebote entwickelt. Einige Dienste wie Replicate, die ich in früheren Artikeln und Projekten verwendet habe, ermöglichen es Benutzern, GPU-Server zu mieten und für die genutzte Rechenzeit zu bezahlen. Andere Anbieter wie OpenAI und Anthropic bieten ihre Modelle als Pro-Token-API an und abstrahieren so die Komplexität der Infrastruktur weiter. Allerdings erfordern diese Dienste, dass Daten an ein externes Netzwerk gesendet werden, sodass die Nutzung dieser Dienste für datenschutzbewusste Organisationen nicht in Frage kommt. Darüber hinaus leiden viele dieser Dienste bei Nachfragespitzen unter Engpässen, da die GPU-Nutzung die Verfügbarkeit übersteigt, was sie zu unzuverlässigen Optionen für produktionskritische Arbeitslasten macht.
Darüber hinaus ist die GPU-Zeit, unabhängig davon, wie sie berechnet wird, für große Rechenaufgaben teuer – die Unternehmen, die diese GPUs besitzen und betreiben, benötigen schließlich eine Rendite auf ihre Investition. Während diese Kosten bei experimentellen Anwendungsfällen nahezu vernachlässigbar sind, erfordern kommerzielle Anwendungsfälle oft die Einbettung großer Kontexte, Feinabstimmungen oder Multi-Shot-Beispiele. Diese Kosten stellen ein erhebliches Hindernis für die Einführung dar, insbesondere für Organisationen mit großen Datenmengen oder solchen, denen die finanziellen Ressourcen großer US-Firmen fehlen.
In einem früheren Artikel haben wir die Parameterkomprimierung als eine Strategie zur Verringerung der Abhängigkeit von GPUs untersucht. Im heutigen Artikel werden wir eine weitere spannende Technik namens Quantisierung untersuchen.
Bevor wir jedoch in die Erkundung eintauchen, möchten wir vielleicht zunächst etwas über die Quantisierung lernen.
In diesem Abschnitt gehen wir kurz auf die Grundlagen der Quantisierung ein. Wenn Sie jedoch einfach nach einer Möglichkeit suchen, leistungsstarke LLMs lokal auf Ihrem Computer auszuführen, können Sie diesen Abschnitt gerne vorerst überspringen und später noch einmal darauf zurückkommen. LLMWare, das Unternehmen, dessen Technologie wir heute verwenden werden, hat einige erstaunliche Tools entwickelt, mit denen Sie mit quantisierten Modellen beginnen können, ohne sich mit den detaillierten C/C++-Implementierungen dahinter befassen zu müssen.
Quantisierung ist eine Technik, die darauf abzielt, den Rechen- und Speicherbedarf beim Ausführen eines LLM durch die Verwendung numerischer Typen mit geringerer Genauigkeit zu reduzieren. Viele beliebte Open-Source-Modelle wie Llama, Falcon und Alpaca verwenden PyTorch als zugrunde liegendes Framework. Standardmäßig verwenden PyTorch-Modelle 32-Bit-Gleitkommazahlen, was bedeutet, dass ein einzelner Parameter 32 „Bits“ im GPU-Speicher belegt. Die Quantisierung zielt darauf ab, diese Parameter durch 16-Bit-Gleitkommazahlen, 8-Bit-Ganzzahlen oder sogar 4-Bit-Ganzzahlen zu ersetzen. Eine erfolgreiche Quantisierung führt zu dramatischen Verbesserungen der Rechengeschwindigkeit und einer Reduzierung der Speichernutzung, was bedeutet, dass große Modelle auf GPUs der unteren Preisklasse, eingebetteten Grafikchips oder sogar CPUs lauffähig werden. Diese Idee gibt es schon seit einiger Zeit – PyTorch selbst hat mit zunehmender Reife der Technologie Unterstützung für 16-Bit-Gleitkommazahlen und Modellkompilierungen hinzugefügt, aber aufgrund früher Designentscheidungen im PyTorch-Framework waren die Fortschritte langsam.
An diesem Punkt stellt sich natürlich die Frage, ob dies die Genauigkeit des Modells nicht erheblich beeinträchtigen würde. Die kurze Antwort lautet: Ja, aber nur, wenn Sie es unvorsichtig tun. Jede Optimierung geht mit inhärenten Kompromissen einher, aber mit einigen speziellen Techniken konnten Forscher eine unglaublich stabile Leistung aus stark quantisierten Modellen herausholen. Auch wenn wir nicht auf extreme technische Details eingehen, wollen wir uns doch mit den Grundzügen der derzeit am häufigsten verwendeten Strategien befassen. Wer mehr erfahren möchte, kann sich in einem Ratgeber von HuggingFace darüber informieren.
Kalibrierte Quantisierung
Während des Quantisierungsprozesses wird ein Kalibrierungsdatensatz durch das Modell laufen gelassen. Der Wert jedes Parameters wird aufgezeichnet und der Bereich wird verwendet, um zu bestimmen, wie die Parameter quantisiert werden. Unter der Annahme, dass der Kalibrierungsdatensatz repräsentativ für die Eingaben ist, auf die das Modell treffen wird, führt dies zu einer verbesserten Genauigkeit des resultierenden Modells.
Quantisierungsbewusst
Während die kalibrierte Quantisierung nach dem Training erfolgt, versucht das quantisierungsbewusste Training, das Modell während des Trainings zu optimieren. Während das Modell trainiert, werden die Aktivierungen einer „falschen Quantisierung“ unterzogen, bei der Fehler simuliert werden, die wahrscheinlich durch den Quantisierungsprozess entstehen. Das Modell ist dann in der Lage, sich an die Fehler anzupassen, was zu einem robusteren Modell führt, das sich gezielt an die potenziellen Verzerrungen anpassen kann.
Während die Quantisierung und Optimierung von PyTorch lange Zeit durch das Framework-Design blockiert wurde, haben zwei neuere Open-Source-Technologien diese Barrieren durchbrochen und Quantisierungstechnologien für die breite Öffentlichkeit viel zugänglicher gemacht. Lassen Sie uns im Folgenden kurz darauf eingehen.
Lama.cpp
Llama.cpp war ein Projekt von Georgi Gerganov zur Portierung des Llama-Modells in C/C++. Dadurch wurde die durch PyTorch eingeführte Komplexität beseitigt, und die native Implementierung ermöglichte die direkte Implementierung der Quantisierung. Daher könnte das resultierende Modell mit einer Ganzzahlquantisierung von bis zu 4 Bit ausgeführt werden, was die Ausführung von Llama-Modellen mit hoher Parameteranzahl ohne eine spezielle GPU ermöglicht.
Das Projekt wurde seitdem von der Community um eine Reihe von Open-Source-Modellen erweitert, darunter beliebte Modelle wie Falcon und Mistral.
GGUF
GGUF ist das Dateiformat von Llama.cpp zum Speichern und Übertragen von Modellinformationen. Quantisierte Modelle werden in diesem Format gespeichert, sodass sie vom Endbenutzer geladen und ausgeführt werden können. GGUF ist das Nachfolgeformat von GGML und zielt darauf ab, GGML zu verbessern, indem es mehr Erweiterbarkeit, Abwärtskompatibilität und Stabilität bietet und gleichzeitig eine schnelle Entwicklung ermöglicht.
Die Entwicklung eines universellen Dateiformats öffnete der Open-Source-Community die Tür zur Erweiterung von Llama.cpp, um andere Modelle zu optimieren, und Innovatoren wie TheBloke und LLMWare haben in den letzten Monaten daran gearbeitet, beliebte Open-Source-Modelle zu miniaturisieren.
Im heutigen Beispiel verwenden wir Open-Source-Bibliotheken und quantisierte Modelle von LLMWare, das praktische Tools für die schnelle Erstellung spezialisierter RAG-Workflows bietet.
LLMWare, ein generatives KI-Unternehmen, das sich auf die Rechts- und Finanzbranche spezialisiert hat, engagiert sich aktiv in der Quantisierungs-Community. Wie ich bereits geschrieben habe, sind sie aufgrund ihres Fokus auf datenschutzbewusste Sektoren ein natürlicher Kandidat für Experimente mit und Innovationen in Miniaturisierungstechnologien.
Zuvor habe ich über ihre RAG-optimierten BLING-Modelle geschrieben, die aus 1 bis 3 Milliarden Parametermodellen eine unglaubliche Leistung für spezielle Aufgaben wie Vertragsprüfung und Finanzanalyse herausholen. Während die meisten Open-Source-Modelle mit solchen Parameterzahlen tendenziell nur für Spielzeugprobleme nützlich sind, ist LLMWare in der Lage, aus diesen Modellen eine produktionsreife Leistung zu generieren, indem es sie für eng begrenzte Aufgaben trainiert. Diese miniaturisierten Modelle können dann ohne externe GPU ausgeführt werden, was für mehr Privatsphäre und Skalierbarkeit sorgt.
Dragon ist eine Sammlung von LLMs, die man sich als leistungsstärkere Versionen ihrer BLING-Cousins vorstellen kann. Die ursprüngliche Absicht von Dragon bestand darin, ein Modell mit höheren Parametern mithilfe der gleichen Techniken zur Befehlsfeinabstimmung zu trainieren und Benutzern eine Option zu bieten, die mehr Leistung benötigen und Zugriff auf GPUs der unteren Preisklasse haben.
Die zusätzliche Parameteranzahl führte zu leistungsstärkeren Modellen, die größere Kontextfenster nutzen und komplexere Ausgaben generieren konnten, erforderten jedoch, dass der Benutzer über speziellere Hardware verfügte, beispielsweise einen Laptop mit eingebetteter GPU oder einen Cloud-Computing-Container mit angeschlossener GPU. Allerdings stellten sie immer noch eine Verbesserung gegenüber den extrem großen Modellen dar, bei denen man auf den Zugriff auf knappe A40- oder A100-GPUs warten musste.
Angesichts des oben Gesagten ist es leicht zu verstehen, warum die Quantisierung der KI-Tools-Suite von LLMWare einen erheblichen Aufschwung verschaffte. Mit der Quantisierung könnte ein Benutzer Dragon-Tier-Modelle in derselben Umgebung wie BLING-Modelle ausführen, was eine wesentlich leistungsfähigere Analyse auf Standardcomputern ermöglicht.
Im Laufe des letzten Monats hat LLMWare quantisierte Versionen mehrerer Dragon-Modelle veröffentlicht. Heute werden wir das auf Llama basierende Dragon-Modell von LLMWare mit einem RAG-Problem zur rechtlichen Analyse bewerten und es mit einem ähnlichen BLING-Modell vergleichen. Interessierte Reacher können auch andere Modelle erkunden – zum Zeitpunkt des Verfassens dieses Artikels sind ein Mistral-basiertes Modell und ein Yi-basiertes Modell bei LLMWare verfügbar. Darüber hinaus hat LLMWare das Ausführen von Inferenzen auf Llama.cpp-Modellen durch die enge Integration mit der ctransformers-Bibliothek zum Kinderspiel gemacht, wodurch gguf-Modelle nahtlos mit PyTorch-basierten Modellen ausgetauscht werden können.
Wir werden für dieses Experiment ein MacBook Air mit M1-Chip verwenden, was bedeutet, dass wir für diese Übung nur allgemein verfügbare Hardware verwenden werden.
Denken Sie daran, dass wir in meinem vorherigen Artikel eine RAG-Anwendung erstellt haben, die sich auf die Suche nach Rechtsvorschriften konzentriert. Wir haben die Vektorsuche verwendet, um schnell mehrere große Gesetzgebungen zu durchsuchen, Abschnitte gefunden, die für unsere Frage zum „Qualified Opportunity Zone Partnership Interest“ relevant waren, und die Frage einem BLING-Modell unterzogen. Im heutigen Artikel werden wir die gleiche Frage durch das quantisierte Dragon-Modell von LLMWare stellen und feststellen, ob es besser abschneidet als BLING-Modelle.
Um uns auf den Modellvergleich zu konzentrieren und den Umfang der erforderlichen Vorkenntnisse zu reduzieren, werden wir einen Großteil der PDF-Analyse und Vektorsuche manuell durchführen. Dies hat den zusätzlichen Vorteil, dass das Problem für das Modell künstlich erschwert wird – die standardmäßige Einbettungssuche von LLMWare zerlegt das Quellmaterial auf etwa 1000 Token, aber die manuelle Analyse ermöglicht es uns, den Kontext auf etwa 3000 Token zu erhöhen. Dies wird uns helfen, den Unterschied zwischen den Modellen Dragon und BLING deutlich zu machen.
Sie sollten sich jedoch problemlos in den Rest des LLMWare-Ökosystems integrieren lassen, wenn Sie deren Tools nutzen möchten, indem Sie die Einrichtungsschritte aus meinem letzten Artikel über LLMWare befolgen. Tatsächlich sollte alles reibungslos laufen, wenn man einfach den Namen der BLING-Modelle durch das quantisierte Dragon-Modell aus diesem Artikel ersetzt.
Fangen wir ohne Umschweife an!
Importieren wir zunächst die erforderlichen Abhängigkeiten:
import sklearn import sklearn.metrics # for cosine similarity from llmware.prompts import Prompt import time import os from openai import OpenAI from PyPDF2 import PdfReader client = OpenAI() # the library now loads the key automatically as an environment variable.
Wir können nun das PDF laden. Im vorherigen Beispiel haben wir mehrere große Gesetze geladen, aber heute konzentrieren wir uns nur auf die PDF-Version des Tax Cuts and Jobs Act von 2017.
reader = PdfReader([path to PDF of tax cuts and jobs act])
Jetzt können wir die Einbettungen für jede Seite generieren:
embeddings = [] for pg in reader.pages: text = pg.extract_text() embeddings.append(client.embeddings.create( input=text, model="text-embedding-ada-002" ).data[0].embedding)
Lassen Sie uns auch die Einbettungen für die Frage generieren, die wir stellen werden:
question = 'What is a qualified opportunity zone partnership interest?' q_embed = client.embeddings.create( input=question, model="text-embedding-ada-002" ).data[0].embedding
Mit der Einbettung können wir eine Vektorsuche durchführen. Da unser Suchraum klein ist, können wir dies einfach manuell tun.
cos_sim = [(idx, sklearn.metrics.pairwise.cosine_similarity([e], [q_embed])[0][0]) for idx, e in enumerate(embeddings)]
Jetzt können wir die relevanteste Seite nehmen (das ist Index 132 oder Seite 133, wenn Sie die Ergebnisse überprüfen möchten):
most_relevant = sorted(cos_sim, key=lambda x: x[1], reverse=True)[0][0]
Und damit sind wir beim wichtigsten Schritt angelangt. Wir werden ein LLMWare Prompter-Objekt mit dem quantisierten Llama Dragon-Modell instanziieren. Die Prompter-Klasse ist hier von entscheidender Bedeutung, da sie das Prompt-Engineering für uns übernimmt und sicherstellt, dass unser Prompt mit der Struktur der Trainingsdaten von Dragon übereinstimmt. Die Prompt-Klasse übernimmt auch automatisch die llamacpp-Bindung, sodass Sie das quantisierte Dragon-Modell genau wie andere Modelle verwenden können.
model_name = "llmware/dragon-llama-7b-gguf" prompter = Prompt().load_model(model_name) response = prompter.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)
Warten Sie eine Weile, und Sie sollten sehen, wie der Funktionsaufruf zurückkehrt. Drucken Sie nun die Ergebnisse aus:
print(response['llm_response'])
Und Sie sollten etwa Folgendes sehen:
• A capital or profits interest acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash; •As of the time such interest was acquired, the partnership was a qualified opportunity zone business (or, in the case of a new partnership, it was being organized for purposes of being a qualified opportunity zone business); •During substantially all of the qualified opportunity fund's holding period for such interest, the partnership qualified as a qualified opportunity zone business.
Das ist eine ziemlich gute Antwort!
Sehen wir uns zum Vergleich an, wie ein BLING-Modell bei demselben Problem funktionieren würde. Eines der zu erwartenden Probleme besteht darin, dass die große Kontextgröße ein Modell mit niedrigeren Parametern „überfordern“ und zu einer weniger informativen Antwort führen kann. In meinen vorherigen Experimenten hat das geschorene Lama 2.7b dieses Problem am besten gelöst, daher habe ich beschlossen, es als Vertreter der BLING-Modelle zu verwenden.
model_name_2 = "llmware/bling-sheared-llama-2.7b-0.1" prompter2 = Prompt().load_model(model_name_2) response = prompter2.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)
Nach einiger Verarbeitung sollten Sie so etwas sehen.
A qualified opportunity zone partnership interest is a capital or profits interest in a domestic partnership if such interest is acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash.
Die Reaktion ist immer noch gut, es fehlen jedoch einige Details, die das Dragon-Modell erfasst. Konkret geht die Antwort nicht auf die Anforderungen an die Haltedauer und den neuen Geschäftsfall ein. Dies entspricht unseren Erwartungen hinsichtlich der Schwierigkeit der Modelle mit niedrigeren Parametern, größere Kontexte zu verarbeiten. Interessierte Leser können dieses Experiment erweitern, indem sie Modelle mit noch niedrigeren Parametern verwenden oder die Größe des gegebenen Kontexts erhöhen. Sie sollten feststellen, dass der Effekt zunehmend ausgeprägter wird. Anschließend gibt das Modell eine kurze, verstümmelte Antwort.
Aus diesem Experiment sollte deutlich werden, dass quantisierte Dragon-Modelle in der Lage sind, Modelle mit niedrigeren Parametern für ihre beabsichtigten Anwendungsfälle zu übertreffen, ohne die Genauigkeit des Modells merklich zu beeinträchtigen.
Und damit haben wir ein quantisiertes Modell verwendet, um einen realen Anwendungsfall zu lösen und dabei etwas über seine Leistungsmerkmale gelernt!
Heute haben wir das spannende Gebiet der LLM-Quantisierung erkundet und untersucht, wie Unternehmen wie LLMWare diese Entwicklungen nutzen, um ihre speziellen Sprachmodelle zu verbessern. Wie ich bereits dargelegt habe, stellt die Miniaturisierung einen der vielversprechendsten Wege zur weit verbreiteten Einführung von KI-Technologien dar. Durch die Kombination von Spezialisierung, Feinabstimmung und Quantisierung können Innovatoren im KI-Bereich skalierbare und leistungsstarke Modelle erstellen, die reale Probleme lösen.
Sie finden das RAG-Framework von LLMWare auf Github und ihre DRAGON- und BLING-Modelle im Hugging Face-Repository von LLMWare.
Übrigens arbeite ich an einem spannenden Projekt, das darauf abzielt, mithilfe von Sprach-KI und Miniaturisierung die Bildung in Entwicklungsländern zu revolutionieren. Wir arbeiten mit unglaublichen Aktivisten und Pädagogen auf der ganzen Welt zusammen und arbeiten daran, die globale digitale Kluft zu überbrücken. Wenn Sie mehr über mein Projekt erfahren oder einfach über spannende Entwicklungen im LLM-Bereich sprechen möchten, zögern Sie bitte nicht, mich auf Github oder LinkedIn zu kontaktieren.