Large Language Models (LLMs) haben dank Transformers (opens new window) und enormen Trainingsdaten vielseitige Funktionen mit bemerkenswerter Leistung. In der Regel sind LLMs allgemein gehalten und werden nicht für einen bestimmten Zweck trainiert. Zum Beispiel kann GPT-4 (opens new window) Übersetzungen, Textgenerierung, Fragebeantwortung und viele andere Funktionen ermöglichen.
Für spezifische Anwendungen, wie z.B. die Verwendung eines Chatbots im Gesundheitswesen oder die Übersetzung in eine unterrepräsentierte Sprache, benötigen wir ein spezialisiertes Modell. Glücklicherweise ist eine der leistungsstarken Funktionen von LLMs (und anderen transformerbasierten Modellen) ihre Anpassungsfähigkeit. Anstatt das Modell von Grund auf neu zu trainieren, können wir das vorhandene LLM-Modell nehmen und es mit den Trainingsdaten feinabstimmen.
Die Feinabstimmung ist im Bereich der Large Language Models (LLMs) entscheidend, und es gibt viele Methoden dafür. Daher werden wir ein paar Blogs dem Thema Feinabstimmung widmen und es auch mit anderen Methoden wie Prompt Engineering und RAG vergleichen. In unserem ersten Blog werden wir den Prozess der Feinabstimmung mit der Hugging Face-Bibliothek "Transformers" erkunden, während der nächste Blog sich auf die Feinabstimmung eines allgemeinen Modells mit OpenAI konzentrieren wird.
# Feinabstimmung von LLMs
Die Feinabstimmung kann entweder vollständig oder teilweise erfolgen. Aufgrund der enormen Größe der LLMs ist es nicht praktikabel, sie vollständig feinabzustimmen. Daher ist die Performance Efficient Fine-Tuning (PEFT), auch bekannt als PEFT (opens new window), eine gängige Technik zur Feinabstimmung der LLMs. Da PEFT in Hugging Face gut unterstützt wird, werden wir das Hugging Face-Modell für diesen Zweck verwenden.
# Laden des vortrainierten Modells
Hugging Face verfügt über ein ganzes Ökosystem von Bibliotheken, daher gibt es einige nützliche Bibliotheken/Module wie:
- Supervised Fine Tuning (SFT (opens new window))
- Performance Efficient Fine Tuning (PEFT)
- AutoTokenizer
Für das vortrainierte Modell können wir jedes Open-Source-Modell verwenden. Hier verwenden wir Falcon-7b (opens new window) aufgrund seiner geringeren Größe und erstaunlichen Leistung.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig
modelID = "tiiuae/falcon-7b"
# Vorbereiten des Datensatzes
SFT (das wir gleich für das Training verwenden werden) ermöglicht die direkte Verwendung von Hugging Face Hub-Datensätzen. Wir können von den dort verfügbaren vielen Datensätzen profitieren. Wir verwenden zum Beispiel den Open Assistance-Datensatz (opens new window) für die Eingabeaufforderung.
Hinweis:
Falls der Datensatz, den Sie für die Feinabstimmung verwenden möchten, im Hugging Face Hub nicht verfügbar ist, können Sie ihn über Ihr Konto hochladen.
dataset = load_dataset("timdettmers/openassistant-guanaco", split="train")
# Das Modell gemäß den Anforderungen anpassen
Neben der teilweisen Feinabstimmung können wir auch die Quantisierung verwenden, um die Größe der Gewichte weiter zu reduzieren:
quantizationConfig = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4"
)
model = AutoModelForCausalLM.from_pretrained(modelID, quantization_config=quantizationConfig)
Wir laden auch den Tokenizer:
tokenizer = AutoTokenizer.from_pretrained(modelID)
tokenizer.add_special_tokens({'pad_token': '<PAD>'})
Hinweis:
Large Language Models (LLMs) erfordern erhebliche Rechenleistung zum Laden und Feinabstimmen. Ich habe Google Colab Pro mit einer A100-GPU für dieses Modell verwendet.
# Das Modell feinabstimmen
Nun sind wir bereit, unseren Trainer zu initialisieren. Der Konstruktor von SFT nimmt einige Argumente entgegen, wie z.B.:
model
: vortrainiertes Modelltrain_dataset
: Datensatz für die Feinabstimmungdataset_text_field
: Textfeld, normalerweise "text
" als Standardwertmax_seq_length
: maximale Sequenzlängetokenizer
: Tokenizer für den Text
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=512,
tokenizer=tokenizer,
packing=True,
)
Und jetzt können wir es trainieren:
trainer.train()
Sobald es trainiert ist, können wir es durch Inferenz testen. Aber zuerst müssen wir die entsprechende Pipeline aufrufen:
from transformers import pipeline
pipeline = pipeline(
"text-generation",
model=model,
tokenizer=AutoTokenizer.from_pretrained(model),
device_map="auto",
)
Zum Beispiel haben wir es mit dieser Eingabeaufforderung inferiert:
sequences = pipeline(
"Arguably, the most delicious fruit on this planet is cashew (in raw form). Found in Brazil and other tropical regions, its taste is unparalleled. What do you think, Sam? \\n Sam:",
max_length=200,
do_sample=True,
top_k=10,
num_return_sequences=1
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
Und wir haben eine Ausgabe wie diese erhalten (sie wird in Ihrem Fall aufgrund der stochastischen Natur der Sprachmodelle unterschiedlich sein):
Ergebnis: Arguably, the most delicious fruit on this planet is cashew (in raw form). Found in Brazil and other tropical regions, its taste is unparalleled. What do you think, Sam?
Sam: Ich würde sagen, es ist köstlich. Es hat einen leicht nussig-süßen Geschmack, aber mit einem sehr angenehmen, buttrigen Geschmack und einer cremigen, glatten Textur. Es ist eine meiner Lieblingsfrüchte und ich kann sie in großen Mengen essen.
Was ist der beste Ort, an dem du je warst?
Sam: Oh, das ist eine schwierige Frage. Es ist eine sehr schwierige Antwort.
Eine schwierige Antwort?
Sam: Ich war in ziemlich vielen Ländern, aber mein Lieblingsort ist wahrscheinlich die Galapagosinseln. Ich habe dort einige Wochen verbracht und die Landschaft geliebt.
Was ist der schlimmste Ort, an dem du je warst?
Sam: Ich denke, der schlimmste Ort, den ich je gesehen habe, ist Berlin.
# Praktische Anwendungen der Feinabstimmung von LLMs
Die Feinabstimmung verändert die Art und Weise, wie Branchen KI einsetzen, und macht sie erschwinglicher und benutzerfreundlicher. Im Gegensatz zur Verwendung von Retrieval-Augmented Generation (RAG), die kontinuierliche Kosten verursacht, ermöglicht die Feinabstimmung die Anpassung eines Open-Source-Modells einmalig ohne weitere Ausgaben. Dies gibt Ihnen die volle Kontrolle und beseitigt die Notwendigkeit zusätzlicher Infrastruktur. Beispiele wie PaLM und FinGPT zeigen, wie feinabgestimmte Modelle leistungsstark und flexibel sein können:
Automatisierung des Kundenservice: Durch die Feinabstimmung von Modellen für spezifische Kundenservice-Unternehmen können Entwickler Chatbots erstellen, die nicht nur allgemeine Konversationen nachahmen, sondern Anfragen im Kontext ihres Unternehmens verstehen und darauf reagieren können. Dieser Ansatz vermeidet den Einsatz externer Ressourcen und bietet einen 24/7-Kundensupport, der die Terminologie und die Fragen der Kunden wirklich versteht und verbessert so das Kundenerlebnis und die Zufriedenheit insgesamt.
Sprachübersetzungsdienste: Durch die Feinabstimmung können Entwickler die Sprachmodelle verbessern, um sich auf spezialisierte Aufgaben wie Sprachübersetzung zu spezialisieren und den generischen Ansatz "one-size-fits-all" zu umgehen. Dies hilft dabei, Sprachbarrieren in internationalen Geschäfts- und Reisesituationen effektiver zu überwinden, ohne kontinuierliche Kosten für externe APIs.
Personalisierte Bildung: Durch die Feinabstimmung ist es möglich, KI-gesteuerte Plattformen zu erstellen, die das Lernmaterial an die Geschwindigkeit und den Lernstil jedes Schülers anpassen. Durch den Besitz des Modells können Bildungseinrichtungen das Lernmaterial kontinuierlich weiterentwickeln und anpassen, ohne zusätzliche Kosten, was die Bildung persönlicher und wirkungsvoller macht.
Diese Beispiele zeigen, dass die Feinabstimmung von LLMs zur Lösung realer Probleme und zur Verbesserung des Alltags eingesetzt werden kann. Die Anpassungsfähigkeit und Effizienz von feinabgestimmten Modellen versprechen noch innovativere Anwendungen in der Zukunft.
# Fazit
Die Fähigkeiten von LLMs können genutzt werden, indem sie für eine bestimmte Aufgabe mit einem spezialisierten Datensatz feinabgestimmt werden. Dies wurde durch Bibliotheken wie Hugging Face und PEFT-Techniken wie teilweiser Feinabstimmung und Quantisierung erleichtert. Aufgrund des massiven Aufkommens von Open-Source-LLMs wie Llama, Vicuana, Falcon, Aya und vielen anderen wird die Feinabstimmung von LLMs immer einfacher und erschwinglicher.
Heutzutage entwickeln viele Organisationen KI-Anwendungen unter Verwendung von APIs von Large Language Models (LLMs), wobei Vektordatenbanken eine wichtige Rolle spielen, indem sie effiziente Speicherung und Abruf von kontextuellen Einbettungen bieten. MyScale (opens new window) ist eine Vektordatenbank, die speziell für KI-Anwendungen entwickelt wurde und alle Faktoren wie Kosten, Genauigkeit und Geschwindigkeit berücksichtigt. Sie ist für Entwickler sehr einfach zu bedienen, da sie nur SQL zur Interaktion erfordert.
Die Feinabstimmung spielt eine entscheidende Rolle bei der Optimierung von Large Language Models (LLMs) und bietet verschiedene Methoden für dieses Unterfangen. Bleiben Sie dran für unseren kommenden Blog, in dem wir die Feinabstimmung eines allgemeinen Modells mit OpenAI erkunden werden.
Verwandter Artikel: Übertreffen von spezialisierten Vektordatenbanken mit MyScale (opens new window)
Wenn Sie Feedback oder Vorschläge haben, kontaktieren Sie uns bitte über MyScale Discord (opens new window).