LLaMA 3.1 405b ist ein großes Sprachmodell, das von Meta AI entwickelt wurde und mit 405 Milliarden Parametern eines der größten offen verfügbaren KI-Modelle darstellt. Es ist Teil der Llama 3.1-Familie, die Modelle unterschiedlicher Größe umfasst (8B, 70B und 405B Parameter).
Die Version 405B zeichnet sich vor allem durch ihren Umfang aus. Sie soll in verschiedenen Benchmarks die Leistung einiger der besten Closed-Source-Modelle wie GPT-4 erreichen oder sogar übertreffen, was auf ihre hochmodernen Fähigkeiten beim Sprachverständnis, bei der Generierung und bei anderen Aufgaben hinweist. Die Llama 3.1-Modelle wurden mit einer verbesserten Unterstützung für mehrere Sprachen entwickelt und sind in der Lage, Text in mehreren Sprachen zu verstehen und zu generieren, was ihre Anwendbarkeit in verschiedenen Regionen und für verschiedene Benutzergruppen erweitert.
In diesem Artikel zeigen wir, wie LLaMA 3.1 405B in der Produktion auf Google Cloud Platform (GCP) Compute Engine installiert und bereitgestellt wird. Wir sprechen zunächst über die Hardwareanforderungen, dann über die Bereitstellung von Instanzen auf GCP und die Bereitstellung und Quantisierung mit vLLM.
Die Hardwareanforderungen für die Ausführung von Llama 3.1 405B sind aufgrund seiner Größe und Komplexität recht umfangreich. Wie bei der Bereitstellung von LLMs üblich, ist der komplexeste Teil die GPU. Sie benötigen eine Menge VRAM (d. h. GPU-Speicher), um dieses Modell einzusetzen:
In Anbetracht dieser Erfordernisse würden Sie sich in der Regel mit folgenden Konfigurationen befassen:
Wie üblich muss man bei der Quantisierung vorsichtig sein und darauf achten, dass die Qualität des Modells nicht zu sehr leidet. In unserem Test scheint die fp8-Quantisierung die Qualität des Modells nicht zu beeinträchtigen, daher werden wir sie in diesem Artikel verwenden.
Google Cloud Platform (GCP) ist ein interessanter Anbieter für die Bereitstellung und Skalierung Ihrer KI-Workloads. Sie sind relativ günstig und haben ein gutes GPU-Angebot (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Sie sind auch in Bezug auf die Auswahl der Instanzen recht flexibel. Sie können zum Beispiel Instanzen mit einer oder mehreren H100-GPUs bereitstellen: 1xH100, 2xH100, 4xH100, oder 8xH100.
Möglicherweise dürfen Sie keine GPU-Instanzen bereitstellen, wenn Ihr Konto neu ist, und in diesem Fall müssen Sie den Support um eine Quotenerhöhung bitten.
Als ersten Schritt müssen Sie ein neues Projekt auf GCP erstellen. Dann müssen Sie die Compute Engine API für Ihr Projekt aktivieren. Gehen Sie dazu zur API-Bibliothek in der GCP-Konsole und suchen Sie nach "Compute Engine". Klicken Sie darauf und dann auf "Aktivieren", um die API zu aktivieren.
Sobald Sie die API aktiviert haben, können Sie eine neue Instanz erstellen. Gehen Sie dazu in der GCP-Konsole zum Abschnitt "VM-Instanzen" und klicken Sie auf "Instanz erstellen".
Sie werden dann aufgefordert, einen Rechnertyp auszuwählen. Für LLaMA 3.1 405B im fp8-Modus sollten Sie einen a3-highgpu-1g-Rechner mit 8xH100-GPUs wählen.
GCP-Instanz für LLaMA 3.1 405B
Sie müssen dann viele Details für Ihre VM festlegen, wie z. B. Netzwerk, Speicher usw. Wir werden in diesem Artikel nicht auf alle diese Einstellungen eingehen, sondern uns auf den Imagetyp und den Speicher konzentrieren.
Um die LLaMA 3.1 405B-Modellgewichte im fp8-Format herunterzuladen, benötigen Sie mindestens 500 GB Speicherplatz. Wir empfehlen außerdem, ein Linux-Deep-Learning-Image mit bereits installiertem CUDA 12 zu verwenden, da dies später einige Arbeit ersparen kann. Sie können dies im Abschnitt "Betriebssystem und Speicher" erreichen:
GCP Image und Speicherplatz für LLaMA 3.1 405B
vLLM, die Abkürzung für Virtual Large Language Model, stellt einen bedeutenden Fortschritt auf dem Gebiet der KI dar, insbesondere in Bezug auf die Art und Weise, wie große Sprachmodelle (LLMs) bedient und für Inferenzen verwendet werden.
vLLM wurde für einen hohen Durchsatz und niedrige Latenzzeiten entwickelt und ist damit ideal für Anwendungen, bei denen eine schnelle und effiziente Sprachverarbeitung entscheidend ist. Erreicht wird dies durch innovative Techniken wie PagedAttention, die die Speichernutzung durch eine effizientere Verwaltung von Aufmerksamkeitsschlüsseln und Wertespeichern optimiert und einen bis zu 24-fach höheren Durchsatz im Vergleich zu herkömmlichen Methoden wie HuggingFace Transformers ermöglicht.
Der Kern der Effizienz von vLLM liegt in seiner Speicherverwaltung. Durch die Verwendung von PagedAttention teilt vLLM den Key-Value-Cache (KV) in Blöcke auf, was eine bessere Speichernutzung ermöglicht und die Fragmentierung reduziert, einen häufigen Engpass bei der GPU-Speichernutzung für LLMs. Dieser Ansatz beschleunigt nicht nur die Verarbeitung, sondern ermöglicht auch die gleichzeitige Bearbeitung mehrerer Anfragen ohne nennenswerte Leistungseinbußen.
Als Inferenz- und Serving-Engine konzentriert sich vLLM nicht nur auf die Ausführung von LLMs, sondern auch auf die Maximierung der Ressourcenauslastung. Sie verwendet Techniken wie die kontinuierliche Stapelverarbeitung eingehender Anfragen, die sicherstellt, dass die GPU voll ausgelastet bleibt, wodurch Leerlaufzeiten reduziert und die Gesamteffizienz erhöht wird.
vLLM unterstützt verschiedene Quantisierungstechniken (z. B. GPTQ, AWQ, INT4, INT8, FP8), die die Genauigkeit der Modellgewichte verringern und damit den Speicherverbrauch senken und die Inferenz möglicherweise beschleunigen.
Die Installation von vLLM ist relativ einfach. Verbinden wir uns mit unserer GCP-VM-Instanz und installieren vLLM mit pip:
pip install vllm
Wir werden verteilte Inferenzen auf 8 x H100 GPUs durchführen, also müssen wir auch Ray installieren:
pip install ray
Wenn Sie bei der Installation von vLLM auf Kompatibilitätsprobleme stoßen, ist es möglicherweise einfacher, vLLM aus dem Quellcode zu kompilieren oder deren Docker-Image zu verwenden: sehen Sie sich die vLLM-Installationsanweisungen an.
Beginnen wir mit einem einfachen Python-Beispiel, um unser Modell zu testen:
from vllm import LLM
# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)
print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))
Sie können das Python-Skript ausführen. Wenn Sie es zum ersten Mal ausführen, müssen Sie warten, bis das Modell heruntergeladen und auf den Grafikprozessor geladen ist, dann erhalten Sie eine Antwort wie diese:
FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.
**INT8 Quantization**
INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.
INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.
**FP8 Quantization**
FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.
FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.
**Key differences**
Here are the key differences between FP8 and INT8 quantization:
1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.
In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications.
Das LLaMA 3.1 405B-Modell wurde bereits in fp8 für vLLM von Neural Magic quantisiert, so dass wir die Quantisierung nicht erneut durchführen müssen. Wir laden einfach das quantisierte Modell aus dem HuggingFace Hub.
Der Parameter tensor_parallel_size wird entsprechend der Anzahl der GPUs, die wir auf unserem Rechner haben, eingestellt.
Dieses einfache Python-Skript ist jedoch kein echter Produktionsserver. Wir werden nun den Inferenzserver starten, um viele Anfragen parallel zu verarbeiten und den Durchsatz zu maximieren:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Sobald das Modell geladen ist, können Sie ein zweites Terminal starten und einige Anfragen stellen:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
"prompt": "Who are you?"
}'
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."
LLaMA 3.1 405B ist ein hochmodernes generatives KI-Modell, aber es ist nicht einfach, es in der Produktion einzusetzen.
Die größte Herausforderung besteht darin, die richtige Hardware zu finden. Grafikprozessoren sind sehr kostspielig, und es herrscht weltweit ein Mangel an ihnen. Aber wenn man es erst einmal geschafft hat, die richtigen GPUs bereitzustellen, ist der Einsatz des Modells mit einem Inferenzserver wie vLLM recht einfach.
Bei solch großen Modellen sollten Sie die Quantisierung nutzen, um die VRAM-Nutzung zu reduzieren und die Latenz zu verbessern, wie wir es getan haben. Aber Vorsicht: Quantisierung ist nicht immer ein Allheilmittel, da sie die Genauigkeit des Modells verringern kann.
Wenn Sie LLaMA 3.1 405B nicht selbst einsetzen können oder wollen, können Sie es einfach in der NLP Cloud verwenden und dieses großartige Modell in der Produktion nutzen. Testen Sie LLaMA 3.1 405B auf NLP Cloud jetzt!
Wenn Sie Fragen zu LLaMA 3.1 405B und AI im Allgemeinen haben, zögern Sie bitte nicht, uns zu fragen, wir beraten Sie gerne!
Julien
CTO bei NLP Cloud