Llama 2 - Setup¶
Llama ist ein offenes Sprachmodell, welches von Meta entwickelt und trainiert wurde. Auf Basis des Vorgängers, der wohl unabsichtlicht im Internet aufgetaucht ist, wurden nicht nur von Wissenschaffenden leistungsfähige Derivate entwickelt. Der GitHub-Nutzer oobabooga hat durch seine webbasierte Nutzungsschnittstelle namens text-generation-webui die Einrichtung und die Bereitstellung von LLama-Modellen stark vereinfacht. Ein weiteres populäres Projekt GPT4All.
Konfiguration¶
In dem hier vorgestellten Arbeitsablauf, muss nur der Installationsort festgelegt werden:
from pathlib import Path
# Where should the webui be downloaded to?
LLAMA_ROOT = Path("../text_gen").resolve()
Plattformspezifische Anpassung¶
Im besten Fall werden die restlichen Parameter automatisch gesetzt. Sollte das jedoch nicht funktionieren, können Nutzende die Umgebungsvariablen für den folgenden Installer auch händisch setzen.
import platform
import subprocess
if platform.system() == "Darwin":
OS = "macos"
elif platform.system() == "Windows":
OS = "windows"
else:
OS = "linux"
INSTALLER = LLAMA_ROOT.joinpath(f"start_{OS}.{'bat' if OS == 'windows' else 'sh'}")
try:
subprocess.check_output("nvidia-smi")
GPU_CHOICE = "A" # use CUDA
except Exception:
if OS == "macos" and platform.machine() == "arm64":
GPU_CHOICE = "C" # use MPS for M generation Macs
else:
GPU_CHOICE = "N" # use CPU only
Text Generation Web UI herunterladen¶
Es ist wieder Zeit ein Projekt zu 'klonen'!
!git clone https://github.com/oobabooga/text-generation-webui.git {LLAMA_ROOT}
Text Generation Web UI starten¶
Wir nutzen den 'One-Click-Installer' des Projektes.
Dieser lädt conda
zwar erneut herunter, was aber in Anbetracht der Größe der herunterzuladenden Modelle nicht weiter ins Gewicht fällt.
%env GPU_CHOICE {GPU_CHOICE}
# If you know you have an AMD GPU and are on Linux or MacOS, you can set
# GPU_CHOICE manually to "B" or "D" if you got an Intel Arc (IPEX) GPU
# %env GPU_CHOICE = B
%env USE_CUDA118 N # if you have issues set this one to "Y"
# This is only needed for remote hosting
# %env COMMANDLINE_ARGS --share --gradio-auth {GRADIO_USER}:{GRADIO_PASS}
!{INSTALLER}
Wir brauchen Modelle¶
Hugging Face, the most popular AI tool in Data Science, has been an attention magnet for 316.6 million traffic between September 2022 and August 2023. -- writerbuddy.ai ¹
Die wahrscheinlich aktuell größte Community mit der größten Sammlung an GAN-Modellen findet man auf huggingface.co. Die Seite wird vom US-amerikanischen Unternehmen Hugging Face, Inc betreut.
Die Web UI erlaubt es, Sprachmodelle direkt von Hugging Face (HF) herunterzuladen.
Dazu muss im Reiter Model
nur der sogenannte HF-Handle eingegeben werden.
Sollte der Handle nicht eindeutig sein, kann noch die spezifische Modeldatei angegeben werden.
Die Auswahl an Sprachmodellen ist unüberschauber und neu trainierte Modelle werden täglich veröffentlicht. Eine Orientierung bietet das Open LLM Leaderboard von Hugging Face, welches Sprachmodelle und deren Leistungsfähigkeit in Benchark-Tests gegenüberstellt.
Eine Modellauswahl¶
- Intel/neural-chat-7b-v3-1
- aktuell im Schnitt eines der besten 'generischen' Modelle
- LeoLM/leo-hessianai-13b
- speziell für die deutsche Sprache optimiert
- TheBloke/leo-hessianai-7B-GGUF
- File: leo-hessianai-7b.Q5_K_M.gguf
- Alternative: TheBloke/leo-hessianai-7B-GPTQ:gptq-8bit-32g-actorder_True [1]
- TheBloke/openinstruct-mistral-7B-GPTQ:gptq-8bit-32g-actorder_True
- aktuell im Schnitt eines der besten Modelle speziell für Anweisungen trainiert
- caretech-owl/leo-hessianai-7B-ggpq-german-quotes-lora
- LoRA für trainiert für [1] auf deutschen Zitaten von Wikiquotes
- Alternative: caretech-owl/leo-hessionai-7B-quotes-gguf
Anmerkungen zu dem Namensschema von Modellen¶
Viele Modelle gibt es nicht nur in einer Variante. Um es einfacher zu machen, um welche Variante es sich handelt, gibt es einige Namenszusätze: 13B
/7B
/30B
gibt die Anzahl der Parameter des Modells an. Mehr bedeutet grob gesprochen genauere Ergebnisse, aber auch komplexere Berechnungen und einen größeren Speicherbedarf.
Neben der Reduktion der Parameter, ist ein weiterer Optimierungsschritt die Quantisierung.
Hierbei werden Parameter und Gewichte in Zahlenformate überführt die weniger Speicher benötigen.
Dadurch wird die Genauigkeit der Berechnungen reduzierert, was jedoch bis zu einem gewissen Grad die Ausgabe der Modelle nur marginal negativ beeinflusst: GGML
und GGUF
geben bspw. Quantisierungsmethode an, wobei GGUF
nach und nach GGML
ersetzt. Einige Bibliotheken haben die Unterstützung von GGML
bereits eingestellt. Die Art der für Quantifizierungsmethode und die Anzahl der genutzen Bits bei GGUF
/GGML
sind weitere Zusätze. Bspw. steht Q5_K_M
für 5 genutzte Bits und GGML_TYPE_Q6_K
-Quantizierung ¹). Weitere Quantisierungs- und Komprimierungsmethoden AWQ
und GPTQ
, die teils mit einem stärken Fokus auf GPU-Berechnungen weitere Effizienzgewinne bedeuten können.
Andere Zusätze wie chat
oder instruct
implizieren, dass die Modelle speziell für Konversationsszenarien oder zur Ausgabe bzw. zum Befolgen von Instruktionen trainiert/feinjustiert worden sind.