Code Llama: Ein Llama lernt programmieren
Code Llama von Meta ist zur Codegenerierung entwickelt worden. Tests zeigen, wie sich die verschiedenen Versionen des Modells in der Praxis schlagen.
- Prof. Christian Winkler
Metas großes Sprachmodell Llama 2 ist allgemein verfügbar und lässt sich von jedem nach Registrierung verwenden. Obwohl es deutlich weniger Parameter als GPT-3.5 (oder gar GPT-4) hat, eignet es sich gut für Unterhaltungen. Inzwischen hat Meta nachgelegt und stellt ein Modell zur Verfügung, das explizit auf die Codegenerierung trainiert ist: Code Llama.
Download und Varianten
Das GitHub-Repository erklärt den Umgang mit Code Llama sehr gut. Wie gewohnt, muss man sich zunächst registrieren, um die Modelle herunterladen zu können. Nun wird es etwas komfortabler als bisher beim Llama-Download: Unmittelbar nach der Registrierung erhält man einen Link, den man dem download.sh
-Skript übergibt. Anschließend kann man wählen, welches Modell man herunterladen möchte. Es gibt unterschiedliche Varianten:
- Größe: Die Anzahl der Parameter kann sieben Milliarden, 13 Milliarden oder 34 Milliarden betragen. Je größer das Modell ist, desto mehr "kann" es und desto weniger Fehler sollten sich einschleichen.
- Standard oder Instruct: Das Standard-Modell ist auf die Fortsetzung von Programmen trainiert, die Instruct-Variante kann Anforderungen als Prompt umsetzen (ähnlich wie ChatGPT).
- Optimiert fĂĽr Python: Code Llama kann in vielen Sprachen programmieren, diese Variante ist fĂĽr Python optimiert.
Code Llama ist kein komplett neues Modell, sondern von Llama 2 abgeleitet. Beeindruckend ist, dass selbst das kleinste Code-Llama-Modell dem größten Llama-2-Modell bei Programmieraufgaben überlegen ist.
Genauere Informationen findet man in dem dazugehörigen Artikel und der dort verlinkten wissenschaftlichen Publikation.
Vorbereitungen
Theoretisch könnte man nun direkt mit Code Llama loslegen. In der Praxis geht das leider nicht so einfach, weil selbst das kleinste Modell sieben Milliarden Parameter besitzt. Jeder Parameter ist als 16-Bit-Float abgelegt, wodurch das Modell auf einer Grafikkarte mindestens 14 GB VRAM benötigt – mehr als Consumer-Grafikkarten haben. Selbst auf einer sehr teuren A100-GPU von Nvidia kann das größte Modell mit 70 Milliarden Parametern nur in verminderter Genauigkeit (mit 8 Bit) berechnet werden.
Mit GPTQ gibt es seit Anfang des Jahres eine sehr leistungsfähige Methode, die Modelle mit verminderter Genauigkeit zu nutzen und dabei so gut wie keine Performance zu verlieren. Das hat gleich zwei Vorteile: Der RAM-Bedarf sinkt deutlich, die Verarbeitungsgeschwindigkeit wächst.
Entwickler haben die damit verbundenen Möglichkeiten schnell erkannt und den Algorithmus in C implementiert. Zusätzlich ist nach und nach Software entstanden, die die reduzierten Modelle auch auf der CPU ausführen kann. Der C-Code ist hochoptimiert und führt auch auf CPUs zu passablen Ausführungszeiten, solange die Modelle nicht zu groß werden.
Dazu ist es zunächst nötig, das Projekt von GitHub herunterzuladen und zu übersetzen. Je nach Plattform gibt es dafür unterschiedliche Optionen, so kann etwa eine für Apple Silicon optimierte Variante entstehen.
Die heruntergeladenen Modelle mĂĽssen in eine andere Form ĂĽberfĂĽhrt werden. Der Entwickler Georgi Gerganov hat sich dafĂĽr eine optimierte Darstellung einfallen lassen und sie ursprĂĽnglich mit der Erweiterung .ggml versehen. Zwischenzeitlich wurde das Format durch die Community weiterentwickelt und heiĂźt nun .gguf. Die Konvertierung der heruntergeladenen Modelle funktioniert relativ einfach:
python convert.py ${MODEL_PATH}/CodeLlama-7b-Instruct
Dann liegt das Modell im neuen Format vor, wodurch sich die Größe aber noch nicht geändert hat. Das geschieht durch die GPTQ-Quantisierung, für die ein separates Programm zur Verfügung steht:
./quantize ${MODEL_PATH}/CodeLlama-7b-Instruct/ggml-model-f16.gguf
${MODEL_PATH}/CodeLlama-7b-Instruct/ggml-model-q4_0.gguf q4_0
Nun liegt das Modell in einem Format vor, mit dem man es auch auf der CPU ausführen kann. Selbstverständlich lassen sich alle anderen Llama-Modelle – und insbesondere auch die Code-Llama-Modelle – ebenso konvertieren!