ADMIN

2024

12

2024-11-28T12:00:00

Backup und Archivierung

PRAXIS

048

Open-Source-Tipp

KI

LLM

Große Sprachmodelle mit InstructLab aufsetzen

Eigener Chatbot

von Thorsten Scherf

Veröffentlicht in Ausgabe 12/2024 - PRAXIS

Generative KI-Modelle kommen in immer mehr Umgebungen zum Einsatz. Wenn Sie dabei kein vorgefertigtes Sprachmodell aus der Cloud nutzen möchten, lohnt sich ein Blick auf das InstructLab-Projekt. Wir zeigen, wie Sie damit Sprachmodelle eigenständig weiterentwickeln und mithilfe des Tools RamaLama einen containerbasierten Workflow für den Zugriff auf Ihr Large Language Model einrichten.Quelle: gulzarkarimn – 123RF

Bevor wir einen Blick auf das InstructLab-Projekt [1] werfen, ist es wichtig, die beiden Begriffe Generative KI und Large Language Models (LLMs) voneinander abzugrenzen. KI-Modelle sind generell in der Lage, neue, kreative Inhalte zu erzeugen. Dies können Texte, Bilder, Musik, Code oder sogar Videos sein. Es gibt eine Vielzahl an unterschiedlichen Anwendungen für die einzelnen Teilbereiche von generativen KI-Modellen.
Große Sprachmodelle, also LLMs, sind hingegen eine spezifische Unterkategorie von KI-Modellen, die auf große Mengen an Textdaten trainiert wurden, um menschliche Sprache zu verstehen und zu generieren. Sie basieren typischerweise auf neuronalen Netzen und Transformer-Architekturen wie bei GPT (Generative Pretrained Transformer).
Probleme mit LLMs
Obwohl große Sprachmodelle ein enormes Potenzial bieten, gibt es auch einige Herausforderungen bei deren Entwicklung. So sind neben sehr guten und hochwertigen Trainingsdaten spezielle Programmierkenntnisse notwendig, um ein solches Modell zu entwerfen. Des Weiteren ist sehr viel Rechenleistung gefragt, um die Modelle zu trainieren und fortlaufend mit neuen Daten zu verbessern.
Bevor wir einen Blick auf das InstructLab-Projekt [1] werfen, ist es wichtig, die beiden Begriffe Generative KI und Large Language Models (LLMs) voneinander abzugrenzen. KI-Modelle sind generell in der Lage, neue, kreative Inhalte zu erzeugen. Dies können Texte, Bilder, Musik, Code oder sogar Videos sein. Es gibt eine Vielzahl an unterschiedlichen Anwendungen für die einzelnen Teilbereiche von generativen KI-Modellen.
Große Sprachmodelle, also LLMs, sind hingegen eine spezifische Unterkategorie von KI-Modellen, die auf große Mengen an Textdaten trainiert wurden, um menschliche Sprache zu verstehen und zu generieren. Sie basieren typischerweise auf neuronalen Netzen und Transformer-Architekturen wie bei GPT (Generative Pretrained Transformer).
Probleme mit LLMs
Obwohl große Sprachmodelle ein enormes Potenzial bieten, gibt es auch einige Herausforderungen bei deren Entwicklung. So sind neben sehr guten und hochwertigen Trainingsdaten spezielle Programmierkenntnisse notwendig, um ein solches Modell zu entwerfen. Des Weiteren ist sehr viel Rechenleistung gefragt, um die Modelle zu trainieren und fortlaufend mit neuen Daten zu verbessern.
Beim Zugriff auf bereits vorhandene und trainierte Modelle stellt sich immer auch die Frage, wie vertrauenswürdig diese sind. Schließlich sind es zumeist private Firmen, die diese Modelle mit eigenen Daten trainiert haben, um diese dann der Allgemeinheit zur Verfügung zu stellen. Als Beispiel dient hier wieder der Chatbot GPT.
InstructLab mit Open-Source-Ansatz
Hier wäre ein Open-Source- und communitybasierter Ansatz wünschenswert. Und genau dies ist es, worum es im InstructLab-Projekt geht. Das Project greift hierfür auf das sogenannte "Large-Scale Alignment for ChatBots" (LAB) [2] zurück. Das Verfahren umfasst im Wesentlichen die folgenden Komponenten:
- Taxonomiegesteuerte Trainingsdaten: Erstellen einer Sammlung unterschiedlicher Trainingsdaten, die als Beispiele für neues Wissen und Fähigkeiten für das Modell dienen.
- Generieren synthetischer Daten: Nun generiert das Modell neue Beispiele auf Basis der Trainingsdaten.
- Training: Schließlich wird das Modell mithilfe der soeben erzeugten synthetischen Daten neu trainiert.
InstructLab ist nicht auf ein bestimmtes Modell beschränkt, es kann beliebige LLMs um zusätzliche Fähigkeiten und Wissen erweitern. Das Framework umfasst aktuell mehrere LLM-Modelle, beispielsweise eine optimierte Version von IBM Granite sowie zwei weitere Modelle, die mit LAB verbessert wurden: Labradorite, basierend auf Llama 2, und Merlinite, abgeleitet von Mistral.
Als Anwender können Sie die InstructLab-Tools – primär das Werkzeug ilab – verwenden, um bestehende Modelle aus dem Framework um zusätzliches Wissen und um weitere Fähigkeiten zu erweitern oder auch, um private LLMs anhand eigener Trainingsdaten zu verbessern. Für die Daten bietet sich das YAML-Format an [3], um diese dann mittels ilab für das Training eines Modells zu verwenden. Eine detaillierte Anleitung zum Einrichten einer Entwicklungsumgebung für InstructLab finden Sie unter [4].
Durch die Umwandlung von einfachen YAML-basierten Trainingsdaten in synthetische Datensätze trainieren Sie ein LLM sehr effizient.
Container-Workflow mit RamaLama
Interessieren Sie sich lediglich dafür, auf ein bestimmtes LLM zuzugreifen, um beispielsweise eine interaktive Chatsitzung zu starten, und nicht so sehr für die Entwicklung beziehungsweise Weiterentwicklung von Modellen, sollten Sie sich einmal das Projekt RamaLama [5] ansehen. Dessen Ziel ist es, den Zugriff auf LLMs zu vereinfachen, um somit letztendlich für eine bessere Benutzererfahrung zu sorgen. Sollten Sie den Anweisungen aus der InstructLab-Readme unter [4] gefolgt sein, werden Sie wissen, was damit gemeint ist.
RamaLama versucht dies zu erreichen, indem es LLMs als OCI-Container zur Verfügung stellt. Dabei inspiziert das Tool zuerst das lokale System, um festzustellen, ob dieses GPU-Support bietet. In dem Fall kümmert sich dann die Container-Engine Podman darum, ein entsprechendes OCI-Image von einer Registry zu laden, in dem dann das gewünschte Sprachmodell läuft. Ist kein GPU-Support vorhanden, findet ein Fallback auf die reguläre CPU statt, wofür dann ein anderes Image zum Einsatz kommt.
Streng genommen ist das Tool ein Wrapper für die llama-Bibliothek [6], die sich um die Ausführung der eigentlichen LLMs kümmert. RamaLama stellt dann nur noch Funktionen zur Verfügung, um die Ausführung innerhalb des OCI-Containers zu gewährleisten, also beispielsweise das Image von einer bestimmten Registry zu laden.
Unter Linux oder macOS installieren Sie RamaLama einfach mit
curl -fsSL https://raw.githubusercontent.com/containers/ramalama/s/install.sh | sudo sh
Um das gewünschte LLM zu starten, rufen Sie das Tool einfach wie folgt auf:
ramalama run huggingface://afrideva/Tiny-Vicuna-1B-GGUF/tiny-vicuna-1b.q2_k.gguf
Listing 1: Konfigurationsdatei shortnames.conf
### Shortnames erleichern den Zugriff auf ein LLM.
[shortnames]
  "tiny" = "ollama://tinyllama"
  "granite" = "huggingface://instructlab/ granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "granite:7b" = "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "ibm/granite" = "huggingface://instructlab/granite-7b-lab-GGUF/granite-7b-lab-Q4_K_M.gguf"
  "merlinite" = "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf"
  "merlinite:7b" = "huggingface://instructlab/merlinite-7b-lab-GGUF/merlinite-7b-lab-Q4_K_M.gguf"
  "vicuna-tiny" =  "huggingface://afrideva/Tiny-Vicuna-1B-GGUF/tiny-vicuna-1b.q2_k.gguf"
An Transportmodi unterstützt RamaLama huggingface, ollama und oci. Somit ist ein Zugriff auf die beiden bekannten KI-Repositories Hugginggace und ollama möglich. Alternativ dazu können Sie auch Shortnames verwenden (Listing 1), um das gewünschte LLM dann einfach wie folgt zu starten:
ramalama run vicuna-tiny
In Listing 2 ist derweil zu erkennen, wie Sie nach dem Start des LLM mit diesem interaktiv kommunizieren. Mit podman ps wiederum sehen Sie, dass das Sprachmodell nun tatsächlich innerhalb eines Podman-Containers abläuft.
Listing 2: Kommunikation mit LLM
### Über einen zuvor definierten Shortname greifen Sie auf das gewünschte LLM zu.
# ramalama run merlinite
Downloading 'merlinite-7b-lab-Q4_K_M.gguf' to '/var/lib/ramalama/repos/huggingface/ instructlab/merlinite-7b-lab-GGUF/.cache/ huggingface/download/merlinite-7b-lab-Q4_K_M.gguf.9ca044d727db34750e1aeb04e 3b18c3cf4a8c064a9ac96cf00448c506631d16c. incomplete'
Download complete. Moving file to /var/lib/ramalama/repos/huggingface/ instructlab/merlinite-7b-lab-GGUF/ merlinite-7b-lab-Q4_K_M.gguf
>Add 8.563 and 4.8292.
The answer is 13.3922, as 8.563 + 4.8292 = 13.3922.
Fazit
Das InstructLab-Projekt bietet einen quelloffenen Ansatz für die Entwicklung von LLMs. Mithilfe einfacher YAML-Dateien können Sie Modelle um zusätzliche Fähigkeiten und Kenntnisse erweitern. Das Tool RamaLama erleichtert die Arbeit mit Large Language Models erheblich. Es bietet einen Container-basierten Workflow und ähnelt in der Handhabung stark Podman. Insofern gelingt die Einarbeitung in kürzester Zeit.
(dr)
Link-Codes
[2] Large-Scale Alignment for ChatBots: https://arxiv.org/abs/2403.01081
[6] llama.cpp-Bibliothek: https://github.com/ggerganov/llama.cpp