Haben Sie schon einmal davon geträumt, die derzeit besten großen Sprachmodelle (LLMs) für Ihre Aufgaben im Bereich der natürlichen Sprachverarbeitung (NLP) zu nutzen, aber sich über die hohen Speicheranforderungen geärgert? Wenn ja, könnte Sie AirLLM interessieren, ein Python-Paket, das den Speicherbedarf für die Inferenz optimiert, so dass 70B LLMs die Inferenz auf einer einzigen 4GB GPU-Karte ausführen können. Es sind keine Quantisierung, Destillation, Beschnitt oder andere Techniken zur Modellkompression erforderlich, die zu einer verschlechterten Modellleistung führen würden.
Was ist AirLLM und wie funktioniert es?
Große Sprachmodelle (LLMs) sind rechenintensiv und benötigen viel Speicher zum Trainieren und Ausführen. Der Grund dafür ist, dass LLMs eine große Anzahl von Schichten haben – ein 70B-Modell kann mehr als 80 Schichten haben. Während der Inferenz ist jedoch jede Schicht in einem Sprachmodell unabhängig und verlässt sich nur auf die Ausgabe der vorherigen Schicht. Daher ist es nicht notwendig, alle Schichten im GPU-Speicher zu halten. Stattdessen können wir nur die erforderlichen Schichten von der Festplatte laden, wenn wir diese Schicht ausführen, alle Berechnungen durchführen und dann den Speicher vollständig freigeben. Auf diese Weise beträgt der GPU-Speicher, der für eine einzelne Schicht benötigt wird, nur etwa die Parametergröße dieser Transformator-Schicht, d.h. 1/80 des vollen Modells oder ~2GB.
Die Hauptidee hinter AirLLM besteht tatsächlich darin, das ursprüngliche LLM in kleinere Untermodelle aufzuteilen, die jeweils eine oder einige Schichten enthalten, und sie bei Bedarf während der Inferenz zu laden. Auf diese Weise werden nur die erforderlichen Untermodelle zu einem bestimmten Zeitpunkt im Speicher gehalten, und der Rest wird auf der Festplatte gespeichert. Es wendet auch blockweise Quantisierung an, um die Untermodelle weiter zu komprimieren, wodurch die Festplattenladezeit und der Speicherbedarf verringert werden.
AirLLM unterstützt die meisten Top-Modelle in der Hugging Face offenen LLM-Bestenliste, wie z.B. Platypus2, LLaMa2, Mistral, Mixtral, SOLAR, StellarBright und mehr.
Wie benutzt man AirLLM?
Die Verwendung von AirLLM ist sehr einfach und intuitiv. Sie müssen nur das airllm pip-Paket installieren und dann die AutoModel-Klasse verwenden, um das LLM Ihrer Wahl von der Hugging Face Hub oder einem lokalen Pfad zu laden. Sie können dann die Inferenz ähnlich wie bei einem regulären Transformator-Modell durchführen, indem Sie die generate-Methode verwenden. Das folgende Code-Snippet zeigt beispielsweise, wie man AirLLM verwendet, um das Platypus2–70B-instruct-Modell zu laden und zu verwenden, das natürliche Sprachfragen beantworten und Anweisungen befolgen kann.
pip install airllm
from airllm import AutoModel
MAX_LENGTH = 128
# load the model from the Hugging Face hub
model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct")
# or load the model from a local path
# model = AutoModel.from_pretrained("/home/ubuntu/.cache/huggingface/hub/models--garage-bAInd--Platypus2-70B-instruct/snapshots/b585e74bcaae02e52665d9ac6d23f4d0dbc81a0f")
# prepare the input text
input_text = [
'What is the capital of United States?',
]
# tokenize the input text
input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
truncation=True,
max_length=MAX_LENGTH,
padding=False)
# generate the output text
generation_output = model.generate(
input_tokens['input_ids'].cuda(),
max_new_tokens=20,
use_cache=True,
return_dict_in_generate=True)
# decode the output text
output = model.tokenizer.decode(generation_output.sequences[0])
# print the output text
print(output)
Die Ausgabe dieses Code-Snippets ist:
What is the capital of United States?
The capital of the United States is Washington, D.C.
Beachten Sie, dass AirLLM während der ersten Inferenz das ursprüngliche LLM schichtweise zerlegt und speichert, daher stellen Sie sicher, dass Sie genügend Festplattenspeicher haben. Danach lädt AirLLM die Untermodelle bei Bedarf und führt die Inferenz schneller und mit weniger Speicher durch.
Was sind die Vorteile der Verwendung von AirLLM?
Durch die Verwendung von AirLLM haben Sie folgende Vorteile:
- Zugang zu den derzeit besten LLMs: Sie können die fortschrittlichsten LLMs für Ihre NLP-Aufgaben verwenden, wie z.B. Frage-Antwort, Textgenerierung, Textzusammenfassung, Textklassifizierung und mehr. Sie können aus einer Vielzahl von Modellen wählen, die Ihren Anforderungen und Vorlieben entsprechen, wie z.B. domänenspezifische, mehrsprachige oder anweisungsbasierte Modelle.
- Geringe Speicheranforderungen: Sie müssen sich keine Gedanken über Speicherfehler oder teure Cloud-Computing-Ressourcen machen. Sie können die Inferenz auf einer einzigen 4GB GPU-Karte, oder sogar auf einer CPU oder einem Mac-Gerät ausführen.
- Einfache und intuitive Verwendung: Sie können AirLLM als Ersatz für die regulären Transformator-Modelle verwenden, mit minimalen Code-Änderungen.
Was sind die Nachteile der Verwendung von AirLLM?
Wie zuvor besprochen, lädt AirLLM nur die erforderliche Schicht von der Festplatte, wenn diese Schicht ausgeführt wird, und befreit dann den Speicher vollständig. Allerdings erhöht das sequentielle Laden von Daten von einem langsameren Speicher wie der Festplatte die Latenz des Inferenzprozesses. Wenn die SSD mit 4GB/s liest und das Modell 80Gb hat, dann warten Sie 20 Sekunden für die Generierung von nur einem Token, und für jedes Token benötigen Sie einen vollständigen Durchlauf.
Colab Notebook
Das folgende Notebook zeigt, wie man Platypus, LLaMa2, Mistral und andere LLMs mit AirLLM ausführt:
Möchten Sie mehr über AirLLM erfahren?
Wenn Sie an der Vertiefung Ihrer Kenntnisse über AirLLM interessiert sind, können Sie das offizielle GitHub-Repository überprüfen, wo Sie den Quellcode, die Installationsanweisungen, die Konfigurationsoptionen, die vollständige Liste der unterstützten Modelle, FAQs und mehr finden können.
Vielen Dank fürs Lesen und viel Spaß beim Programmieren!