Großes KI-Sprachmodell am eigenen Rechner: Ein LLaMA für die Westentasche?

ChatGPT und GPT-4 sind Blackboxen. Daher lohnt es sich, ein offenes Modell auf dem eigenen Rechner auszuprobieren – mit Abstrichen sogar auf dem Raspi.

In Pocket speichern vorlesen Druckansicht 123 Kommentare lesen
Neural,Network,3d,Illustration.,Big,Data,And,Cybersecurity.,Data,Stream.

(Bild: Yurchanka Siarhei / Shutterstock.com)

Lesezeit: 14 Min.
Von
  • Prof. Christian Winkler
Inhaltsverzeichnis

Drei Wochen vor dem Launch von GPT-4 durch OpenAI hat Facebooks Mutterkonzern Meta ein eigenes großes Sprachmodell (LLM) präsentiert: das mit offenen Daten vortrainierte LLaMA (Large Language Model Meta AI). Facebook Research stellte es der weltweiten KI-Forschungs-Community nach einer kurzen Prüfung der jeweiligen E-Mail-Adresse zur Verfügung. Bald wurde das Modell geleakt und war als BitTorrent verfügbar – das lädt zu eigenen Experimenten ein. Ob und wie das Modell verwendet werden darf, ist noch nicht endgültig geklärt. Man kann annehmen, dass Meta die große Popularität nicht mit Rechtsstreitigkeiten ins Gegenteil kehren möchte.

Im Gegensatz zu ChatGPT und GPT-4, die Blackboxen darstellen und außer über Prompts keinerlei Einflussmöglichkeiten bieten, ist LLaMA ein offenes Modell. Man kann es auf eigener Hardware laufen lassen und anpassen. So ist es einem Forschungsteam in Stanford gelungen, aus dem vergleichsweise kleinen LLaMA ein neues Modell abzuleiten, das es mit ChatGPT aufnehmen kann. Durch den offengelegten Trainingsprozess weiß man deutlich besser, was in dem Modell steckt, und kann es risikofreier betreiben.

Moderne Sprachmodelle basieren auf komplexen neuronalen Netzen mit unterschiedlichen Ebenen, die mit Tricks wie dem Attention-Mechanismus arbeiten. Die Architektur wird als Transformer beschrieben. Das erste solche Modell war BERT (Bidirectional Encoder Representations from Transformers) von Google und es hat eine ganze Branche revolutioniert:

Grundarchitektur von BERT mit 12 Layern und bis zu 512 Tokens (Abb. 1)

BERT ist eine Anwendungsform des Natural Language Processing (NLP). Seine Urversion umfasste 120 Millionen Parameter, allerdings wurden die Modelle im Laufe der Zeit immer größer. Das liegt an der wachsenden Rechenkapazität, aber auch an den nahezu unerschöpflich vorhandenen Trainingsdaten – dafür genügen normale Texte. Das Training eines solchen Modells ist enorm aufwendig und stellt hohe Anforderungen an die Hardware und Rechenkraft. Für die Vorhersage von Tokens, also die Anwendung, genügt es, das neuronale Netz auszuwerten. Auch das dauert selbst in reduzierter Genauigkeit auf CPUs schon eine ganze Weile, wie sich später zeigen wird. Im Training müssen Milliarden Parameter so angepasst werden, dass sich ein möglichst optimales Ergebnis ergibt.

Das ist mit einem enormen Rechenaufwand verbunden – Microsoft hat 2019 eine Milliarde US-Dollar in OpenAI investiert und wird weitere Milliarden investieren. Zurzeit kauft der Konzern Tausende von Nvidia-Beschleuniger, um einen neuen Supercomputer einzurichten. Für große Sprachmodelle belaufen sich die Kosten eines einzelnen Trainingsdurchgangs auf Millionenbeträge.

Auch das LLaMA-Training von Meta war vermutlich sehr kostspielig. Das Modell gibt es in unterschiedlichen Größen: mit 7 Milliarden, 13 Milliarden, 30 Milliarden oder 65 Milliarden Parametern. All diese Parameter müssen im Trainingsprozess optimiert werden. In der Auswertung des neuronalen Netzes dienen sie zur Gewichtung der Vektoren in der Matrixmultiplikation und geben damit eine Größenordnung vor, wie aufwendig die Auswertung (also die Vorhersage von Tokens) sein wird. Das Prinzip ist bei allen Transformer-Modellen ähnlich:

  1. Ein Text wird für das Training in Tokens unterteilt. In vielen Fällen sind das einzelne Wörter, manchmal auch Wortbestandteile oder Kombinationen von Wörtern (Entitäten). Jedem dieser Tokens entspricht eine bestimmte Nummer/Position im Vokabular.
  2. Die Nummern der Tokens eines ganzen Absatzes werden dem Transformer-Modell als Input in der ersten Ebene des neuronalen Netzes zur Verfügung gestellt. In obigem Bild (Abb. 1) können das bis zu 512 Tokens sein. Diese Kontextlänge kann bei großen Modellen höhere Werte annehmen.
  3. Für diesen Absatz werden die Daten durch das gesamte Transformer-Netzwerk propagiert.
  4. Als Ergebnis entsteht eine Wahrscheinlichkeitsverteilung für ein neues Token, das das Wort repräsentiert, das gut zu dem bisherigen Absatz passt. Dieses Token wird ausgegeben.
  5. Anschließend beginnt der Prozess von Neuem, dann jedoch jeweils mit einem Token mehr als zuvor.

Die Vorwärtspropagation (in diesem Fall die Vorhersage von Tokens) in einem neuronalen Netzwerk wird durch eine Matrixmultiplikation dargestellt. Dabei werden korrespondierende Werte miteinander multipliziert und das Ergebnis aufaddiert. Für jedes vorherzusagende Token sind das viele Milliarden an Multiplikations- und Additionsschritten. Das ist auch der Grund dafür, dass dieser Vorgang auf Grafikkarten (GPUs) deutlich schneller funktioniert als auf CPUs: Da die Operationen denen beim Rendern von Grafiken entsprechen, sind Grafikkarten darauf optimiert und können sie mit ihren vielen Hunderten (oder Tausenden) Shadern parallel durchführen. Im Vergleich zu CPUs spart das einen Großteil der bisherigen Wartezeit.

Minds Mastering Machines: Die Heise-Konferenz zu Machine Learning
Minds Mastering Machines

Minds Mastering Machines: 10.-11. Mai 2023 in Karlsruhe

(Bild: M3-Konferenz)

Am 10. und 11. Mai 2023 findet die Minds Mastering Machines in Karlsruhe statt. Der Autor dieses Artikels hält auf der Konferenz eine Keynote, bei der seine hier beschriebenen Erfahrungen rund um LLaMA auf dem eigenen Rechner im Mittelpunkt stehen. Vor Ort gibt es die Möglichkeit, nachzufragen.

Die seit 2018 von iX, heise Developer und dpunkt.verlag ausgerichtete Fachkonferenz richtet sich in erster Linie an Data Scientists, Data Engineers und Developer, die Machine-Learning-Projekte in die Realität umsetzen. Das Programm bietet an zwei Tagen gut 30 Vorträge unter anderem zu Sprachmodellen, Cybersecurity, Resilienz und Modelloptimierung. Die Vorträge widmen sich unter anderem dem Umgang mit Verzerrungen in Datenprodukten, der Qualitätssicherung in KI-Systemen und resilientem Machine Learning.

Bis zum 27. März gibt es Tickets zum vergünstigten Frühbucherpreis.

Lassen sich Sprachmodelle mit nur einer Grafikkarte betreiben? Für das Training ist ein Cluster von (Profi-)GPUs unumgänglich. Mit viel Geduld konnte man die Vorhersage großer Sprachmodelle bisher auch rein durch CPUs erledigen lassen.

Wer mit ChatGPT experimentiert, bekommt unweigerlich das Bedürfnis, Modelle dieser Art auch auf der eigenen Hardware auszuprobieren. Der Leak des Modells hat einige Entwickler motiviert, mit Approximationen (also Näherungen) das Verfahren auch auf CPUs zur Verfügung zu stellen. Mit den angenäherten Werten können diese schnell genug rechnen, dass man auf Ergebnisse nicht allzu lange warten muss.

Dazu sind einige Einschränkungen notwendig:

  • Die Gewichte im Original-Modell sind als 32-Bit-Fließkommazahlen abgespeichert. Da CPUs für solche Berechnungen zu langsam sind, ist der Vorgang auf 16 Bit zu verkürzen.
  • Aber selbst damit funktioniert die Berechnung nicht schnell genug. Deshalb werden diese 16-Bit-Zahlen auf lediglich vier Bit quantisiert.
  • Anschließend können die Modelle ausgewertet werden. Das geht so behäbig, dass man fast mitlesen kann.

Zunächst benötigt man das Modell von Meta, das nicht offiziell verfügbar ist, aber dennoch öffentlich. Forschende, die das Modell ausprobiert haben, haben einen BitTorrent-Link veröffentlicht. Wer möchte, kann auf eigene Gefahr versuchen, sich das Modell damit herunterzuladen – wie eingangs erwähnt, ist die Frage nach der Legalität noch offen. Es ist jedoch niemals ratsam, einen Torrent-Link zu verwenden, um offiziell nicht verfügbare Software herunterzuladen. Torrents aus unbekannten Quellen sind grundsätzlich nicht vertrauenswürdig. Auch wenn der Link laut Angaben auf Twitter, Reddit und GitHub scheinbar tatsächlich zu dem (oder zumindest einem) Sprachmodell führt, kann der Download zusätzlichen Schadcode enthalten. Sucht man nach weiteren Download-Quellen, so kann man unter Umständen auch andere finden, die das Modell bereitstellen.

Georgi Gerganov, ein bulgarischer Entwickler, hat eine Software entwickelt, die mit LLaMA und der vereinfachten Variante arbeiten kann. Das Repository findet sich auf GitHub. Nach dem Klonen baut make das C++-Programm. Es ist für Windows, Linux, Mac (M1) und Android verfügbar und auf diese Architekturen optimiert. Anschließend kann das Modell wie oben erklärt vereinfacht werden. Der Prozess dazu findet in zwei Schritten statt.

Hierzu sind Python-Pakete erforderlich. Am besten funktioniert die Installation in einer virtuellen Umgebung (kurz venv), damit dadurch keine Probleme mit anderen Python-Installationen entstehen. Anaconda kann virtuelle Umgebungen automatisch einrichten. Ebenso funktioniert die manuelle Einrichtung mit dem Befehl python3 -m venv venv/llama && venv/llama/bin/activate. Nun können die benötigten Python-Pakete installiert werden: pip install torch numpy sentencepiece.

Am besten verschiebt man die von llama-dl heruntergeladenen Modelle in ein Unterverzeichnis models. Die Konvertierung erfolgt mit python3 convert-pth-to-ggml.py models/7B/, sinngemäß genauso für die anderen Modelle.

Die Quantisierung erledigt ein Shell-Skript namens quantize.sh. Der Aufruf erfolgt beispielsweise für das Modell mit sieben Milliarden Parametern über ./quantize.sh 7B. Unter Windows läuft das Shell-Skript nicht. Dort braucht es den Befehl quantize.exe models/7B/ggml-model-f16.bin models/7B/ggml-model-q4_0.bin 2. Bei den größeren Modellen ist das etwas schwieriger, weil dort mehr Binärdateien zur Verfügung stehen (mit den Erweiterungen .1 bis .7 im Falle der 65-Milliarden-Parameter-Version von LLaMA). Das Programm ist dann individuell für alle Teile aufzurufen.

Es gibt unterschiedliche Interaktionsmöglichkeiten mit LLaMA. Am eindrucksvollsten ist sicher der interaktive Modus. LLaMA lässt sich ohne Parameter starten und nutzt dann das kleinste Modell. Man kann aber wie unten auch den Namen des Modells, die Anzahl der Threads und die gewünschte Kontextlänge angeben. Das Modell benötigt noch etwas Text und kann dann sofort loslegen:

$ ./main -m ./models/13B/ggml-model-q4_0.bin -t 8 -n 256 --repeat_penalty 1.0 --color -i -r "User:"
 -p "Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision.

User:"
User:Who was Alan Turing?

Bob:Alan Turing was a british mathematician and philosopher.

User:Is he still alive?

Bob:No, he was executed by the German army in 1945.

User:What were his most important achievements?

Bob:He was one of the founders of the Computing Theory and the father of the modern Artificial Intelligence, along with John Von Neumann.

Das ist zumindest teilweise richtig, allerdings wurde Alan Turing nicht von der Wehrmacht hingerichtet. Solche und ähnliche faktische Fehlauskünfte sind ein bekanntes Manko großer Sprachmodelle, die auf Aussagen aus dem Internet trainiert wurden und teilweise recht frei assoziieren beziehungsweise fabulieren, ohne echte Quellen angeben zu können.

Das Modell mit 13 Milliarden Parametern braucht nur etwa 4 Gigabyte RAM. Anders sieht es bei der Version mit 65 Milliarden Parametern aus:

top - 09:09:19 up 76 days,  2:08,  9 users,  load average: 4.72, 2.33, 1.09
Tasks: 542 total,   1 running, 541 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.2 sy,  0.0 ni, 99.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem : 128739.8 total,   2612.7 free,  87735.8 used,  38391.3 buff/cache
MiB Swap:   4091.0 total,   1005.1 free,   3085.9 used.  39622.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1861631 cwinkler  20   0   41.2g  39.8g   3496 S   0.0  31.6  41:13.57 main

41 Gigabyte RAM sind zwar für Server oder gut ausgestattete Desktop-PCs kein Problem, in die Westentasche passt solche Hardware aber noch nicht. Selbst neue Handys verfügen über maximal 16 GB RAM. Das Modell mit 65 Milliarden Parametern ist also nicht unbedingt für jeden Computer geeignet, während das 4-Bit-quantisierte "kleine" Modell mit sieben Milliarden Parametern auch auf dem Raspberry Pi oder auf einem Handy läuft.

Außerdem benötigt das Erzeugen der Tokens relativ viel Zeit. Das Programm braucht zum Beantworten weniger Fragen trotz Optimierung auf die CPU-Architektur bereits 41 Minuten Rechenzeit – allerdings sind die Antworten dabei auch deutlich besser:

User:Who was Alan Turing?
Bob:Alan Mathison Turing (23 June 1912 - 7 June 1954) was a British mathematician, logician, cryptanalyst, and computer scientist. He was highly influential in the development of computer science, providing a formalization of the concepts of algorithm and computation with the Turing machine, which can be considered a model of a general purpose computer. Turing is widely considered to be the father of computer science and artificial intelligence.
User:Is he still alive?
Bob:No, Alan Turing is dead.
User:Which were his greatest achievements?
Bob:Alan Turing was a founding father of computer science and artificial intelligence. He was also instrumental in the development of early computers.

Das Ergebnis des großen Modells ist ausführlicher, präziser und faktisch richtig. An dieser Stelle lässt sich nicht direkt entscheiden, ob das an der Quantisierung oder an den Parametern liegt. Immerhin sind hier Unterschiede erkennbar. Bei ChatGPT und GPT-4 hingegen wäre das gar nicht sichtbar, denn dort bleibt verborgen, welche Konfiguration OpenAI nutzt – das eigene Modell ist hier deutlich transparenter. Die Vorhersagen sind nicht besonders schnell:

main: mem per token = 70897348 bytes
main:     load time = 338445.56 ms
main:   sample time =   117.04 ms
main:  predict time = 404324.28 ms / 1325.65 ms per token
main:    total time = 140924704.00 ms

Alpakas sind eng mit den Lamas verwandt, Gleiches gilt für das Open-Source-Projekt Alpaca der Universität Stanford. Es ist ein Ableger von llama.cpp, allerdings wurde die Konversationsfähigkeit weiter ausgebaut. Damit lässt sich mindestens ebenso gut herumspielen wie mit LLaMA.

Neben der populären C++-Version gibt es eine Rust-Variante von LLaMA. Das Projekt findet sich auf GitHub und lässt sich mit einer funktionierenden Rust-Toolchain einfach übersetzen. Mit den quantisierten Modellen kann es gut zusammenarbeiten:

$ cargo run --release -- -m models/7B/ggml-model-q4_0.bin -p "Who was Alan Turing"
Alan Turing, one of Britain's greatest minds is being honoured today with a blue plaque on his house in London. He played an important role in winning WWII by deciphering enemy messages sent using German Enigma codes - which was later used as inspiration for The Imitation Game (2014).
But who exactly was Alan Turing? And why is he being honoured today, and what were his contributions to the war effort worth? Find out with our quiz! [end of text]

Die Ergebnisse sind denen von llama.cpp durchaus vergleichbar.

Dalai ist eine Webanwendung, die sich mit einem Klick auf Macs installieren lässt. Die Installation ist einfach und lädt die Gewichte herunter, sorgt für die Transformation und alles Notwendige. Über das interaktive Frontend kann man anschließend eigene Experimente starten. Wer einen Mac mit dem M1-Prozessor hat und nur ein bisschen testen möchte, ohne jedes Detail zu verstehen, findet eine hervorragende Möglichkeit.

Wer sich die Installation sparen will, kann auch mit einem fertigen Docker-Image arbeiten und muss nichts übersetzen. Eine Beschreibung findet sich auf GitHub. Für schnelle Experimente ist das Verfahren gut geeignet – wer mehr von der Funktionsweise verstehen will, sollte sich die Software selbst installieren sowie die Modelle herunterladen und vereinfachen.

Wer Lust hat, kann damit Sprachmodelle sogar auf dem Raspberry Pi betreiben. Allerdings dauert die Vorhersage eines einzelnen Tokens etwa zehn Sekunden, und der Raspi kommt mit 4 Gigabyte an seine Speichergrenzen. Dennoch zeigt das Beispiel, dass solche komplexen Modelle künftig auch auf Kleinstcomputern eine Rolle spielen könnten.

Nachdem ChatGPT und GPT-4 komfortabel über eine API bereitstehen, um sie direkt zu verwenden, stellt sich die Frage, warum man sich die Mühe des Aufsetzens am eigenen Rechner überhaupt machen sollte. Dafür gibt es mehrere Gründe:

  • Es macht Spaß, mit einem eigenen Modell zu interagieren und zu überprüfen, was es kann – und was nicht.
  • Man kann verschieden große Modelle ausprobieren und die Unterschiede überprüfen.
  • Der Lerneffekt ist erheblich. Man kennt sich anschließend viel besser mit Sprachmodellen und deren technischen Anforderungen aus.
  • Die Sprachmodelle lassen sich anpassen. Das ist zwar mit deutlich mehr Technik und größeren Hardwareanforderungen verbunden, aber prinzipiell möglich. Mit einem Blackbox-Modell wie ChatGPT oder GPT-4 geht das nicht. Einige Methoden zum Training von GPT-4 hat OpenAI zwar veröffentlicht, vieles bleibt aber im Dunkeln. Das Risiko, ein solches undokumentiertes Modell zu verwenden, ist hoch – auf LLaMA trifft das nicht zu.
  • Als Betreiber eines Modells auf der eigenen Hardware hat man zudem mehr Transparenz bei den Einstellungen und der Konfiguration. Die Modelle von OpenAI sind, wie zuvor erwähnt, Blackboxen.

Prozessoren werden schneller, Gleiches gilt für Grafikkarten. Der verfügbare Arbeitsspeicher wächst ebenso. Modelle können künftig auch auf Edge-Devices wie Handys laufen und dort sinnvolle Aufgaben erledigen. Die serverbasierten Modelle werden sicher auch weiterhin stets leistungsfähiger werden.

Es ist absehbar, dass es bald noch deutlich mehr Auswahl an großen Sprachmodellen geben wird als heute. Sicher werden auch viele offene Modelle dazugehören, die sich an die Bedürfnisse von Endnutzern anpassen lassen. So könnte man etwa ein großes Modell als Marketing-Modell feintunen, das Werbung generiert und die Arbeit von Agenturen übernimmt.

Das ist ein harmloser Anwendungsfall, aber wenn man sich ein Modell für Hasskommentare ausdenkt, wird es schon kritischer – ebenso bei einem, das (teilweise richtige) wissenschaftliche Publikationen schreibt, die aber echten wissenschaftlichen Arbeiten täuschend ähnlich sehen. Eine gesetzliche Regelung wird hier wohl auf Dauer nötig sein und befindet sich mit dem europäischen AI Act bereits in Vorbereitung.

Dr. Christian Winkler
ist Data Scientist und Machine Learning Architect. Er promovierte in theoretischer Physik und arbeitet seit 20 Jahren im Bereich großer Datenmengen und Künstlicher Intelligenz mit Fokus auf skalierbaren Systemen und intelligenten Algorithmen zur Massentextverarbeitung. Er ist Gründer der datanizing GmbH, Referent auf Konferenzen und Autor von Artikeln zu Machine Learning und Text Analytics.

Am 11. Mai hält Winkler zum Thema dieses Artikels eine Keynote bei der Fachkonferenz Minds Mastering Machines und berichtet ausgiebiger über seine Erfahrungen mit LLaMA am eigenen Rechner.

(sih)