Im Jahr 2023 sind viele fortschrittliche Open-Source-LLMs veröffentlicht worden, aber die Bereitstellung dieser KI-Modelle in der Produktion ist immer noch eine technische Herausforderung. In diesem Artikel zeigen wir, wie Sie einige der besten LLMs auf AWS EC2 bereitstellen können: LLaMA 3 70B, Mistral 7B, und Mixtral 8x7B. Wir werden eine fortschrittliche Inferenzmaschine verwenden, die Batch-Inferenz unterstützt, um den Durchsatz zu maximieren: vLLM.
Meta hat die LLaMA 3 Serie von großen Sprachmodellen (LLMs) entwickelt und auf den Markt gebracht, die eine Vielzahl von generativen Textmodellen umfasst, die vortrainiert und feinabgestimmt wurden. Diese Modelle variieren in ihrer Größe, wobei die Parameter zwischen 7 Milliarden und 70 Milliarden liegen.
Mistral AI, ein Startup, das von Personen mit Erfahrung bei Googles DeepMind und Meta mitbegründet wurde, hat mit Mistral 7B und später Mixtral 8x7B einen bedeutenden Schritt in die Welt der LLMs gemacht.
Was den Mistral 7B besonders beeindruckend macht, ist seine Leistung. In verschiedenen Tests hat es Llama2-13B übertroffen und sogar Llama1-34B in vielen Metriken übertroffen. Dies deutet darauf hin, dass Mistral 7B ähnliche oder bessere Fähigkeiten mit einem deutlich geringeren Rechenaufwand bietet. Wenn es um Codierungsaufgaben geht, konkurriert Mistral 7B mit CodeLlama 7B, und seine kompakte Größe von 13,4 GB ermöglicht es, dass es auf Standardmaschinen läuft.
Mixtral 8x7B ist ein anpassungsfähiges und schnelles Modell, das sich für verschiedene Anwendungen eignet. Es arbeitet mit einer sechsmal höheren Geschwindigkeit und erreicht oder übertrifft die Leistung des LLaMA 3 70B in allen Testmetriken. Dieses Modell unterstützt mehrere Sprachen und verfügt über inhärente Kodierfähigkeiten. Es kann Sequenzen mit einer Länge von bis zu 32k Token verwalten.
Alle diese Modelle sind quelloffen und Sie können sie auf Ihrem eigenen Server bereitstellen, wenn Sie Zugang zur richtigen Hardware haben. Sehen wir uns an, wie man sie auf AWS EC2 mit vLLM bereitstellt.
vLLM ist eine schnelle und benutzerfreundliche Bibliothek, die für effiziente LLM-Inferenz und -Einsatz zugeschnitten ist. Die Leistung von vLLM beruht auf mehreren fortschrittlichen Techniken wie der ausgelagerten Aufmerksamkeit für eine effektive Verwaltung von Aufmerksamkeitsschlüsseln und -werten, der Stapelverarbeitung eingehender Abfragen in Echtzeit und maßgeschneiderten CUDA-Kernels.
Darüber hinaus bietet vLLM hohe Flexibilität durch verteilte Inferenz (über Tensor-Parallelität), Output-Streaming und Anpassung an NVIDIA- und AMD-GPU-Architekturen.
Insbesondere wird vLLM für den Einsatz von LLaMA 3, Mistral und Mixtral sehr hilfreich sein, da es uns ermöglicht, unsere Modelle auf AWS EC2-Instanzen einzusetzen, die mehrere kleinere GPUs (wie den NVIDIA A10) anstelle eines einzigen großen GPUs (wie den NVIDIA A100 oder H100) einbetten. Außerdem können wir mit vLLM den Durchsatz unseres Modells dank der Batch-Inferenz drastisch erhöhen.
Der Einsatz von LLMs ist aus vielen Gründen eine Herausforderung: VRAM-Nutzung (GPU-Speicher), Inferenzgeschwindigkeit, Durchsatz, Festplattenplatznutzung... Hier müssen wir sicherstellen, dass wir eine GPU-Instanz auf AWS EC2 bereitstellen, die über genügend VRAM zur Ausführung unserer Modelle verfügt.
G5-Instanzen sind eine gute Wahl, da sie Zugang zu modernen NVIDIA A10-Grafikprozessoren bieten und auf bis zu 192 GB VRAM skaliert werden können (siehe die Instanz g5.48xlarge), während sie gleichzeitig recht kostengünstig sind.
Mistral 7B ist das am einfachsten zu implementierende Modell, da es etwa 14 GB VRAM benötigt. Dann kommt Mixtral 8x7B mit 110 GB und LLaMA 3 70B mit 140 GB. Hier betrachten wir nur fp16, nicht fp32, und wir wenden keine Art von Quantisierung an.
Folglich kann Mistral 7B auf einer g5.xlarge-Instanz laufen, aber Mixtral 8x7B und LLaMA 3 70B benötigen eine g5.48xlarge-Instanz, also werden wir in diesem Tutorial eine g5.48xlarge-Instanz bereitstellen.
Um solche Instanzen bereitzustellen, melden Sie sich bei Ihrer AWS EC2-Konsole an und starten eine neue Instanz: Wählen Sie das NVIDIA Deep Learning AMI auf einer g5.48xlarge-Instanz. Sie benötigen mindestens 300 GB Festplattenspeicher.
Die Installation von vLLM ist recht einfach. Öffnen wir eine SSH-Verbindung zu unserer neu erstellten AWS-Instanz und installieren vLLM mit pip:
pip install vllm
Da wir vLLM für verteilte Inferenz auf 8 x A10 GPUs verwenden werden, müssen wir auch Ray installieren:
pip install ray
Bei Kompatibilitätsproblemen während des Installationsprozesses kann es für Sie einfacher sein, vLLM aus dem Quellcode zu erstellen oder das Docker-Image zu verwenden: Weitere Einzelheiten finden Sie in der Installationsdokumentation.
Sie können nun Ihr erstes Inferenzskript erstellen. Erstellen Sie eine Python-Datei mit folgendem Inhalt:
from vllm import LLM
# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)
print(llm.generate("What is batch inference?"))
Führen Sie nun Ihr Skript mit Python aus, das in etwa Folgendes zurückgibt:
Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.
Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.
Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.
In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.
Wie Sie sehen können, ist dies ein Kinderspiel. Sie müssen tensor_parallel_size je nach der Anzahl der zugrunde liegenden GPUs anpassen, die Sie haben.
Das obige Szenario war eine einmalige Aktion. Jetzt wollen wir einen richtigen Inferenz-Server starten, der mehrere Anfragen bearbeiten und Batch-Inferenzen im laufenden Betrieb durchführen kann. Starten Sie zunächst den Server:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Nach einiger Zeit, wenn das Modell korrekt in den VRAM geladen ist, können Sie ein zweites Shell-Fenster öffnen und einige Anfragen stellen:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Das Ergebnis ist dasselbe wie zuvor, aber diesmal können Sie mehrere Abfragen gleichzeitig durchführen.
Der Einsatz eines fortschrittlichen Inferenzservers wie vLLM ist von Vorteil, wenn Sie die Auslastung Ihrer GPU maximieren und Ihr Modell problemlos auf mehreren GPUs parallel einsetzen möchten.
Wie Sie sehen können, ist es dank dieser Technik recht einfach, die fortschrittlichsten Open-Source-KI-Modelle wie LLaMA 3, Mistral und Mixtral auf Ihrem eigenen Server einzusetzen.
In diesem Tutorium haben wir AWS EC2 verwendet, aber wir hätten natürlich auch andere Anbieter verwenden können. Die größte Herausforderung sind die Kosten für die GPUs und ihre Verfügbarkeit.
Wenn Sie solche LLMs nicht selbst bereitstellen möchten, empfehlen wir Ihnen, stattdessen unsere NLP Cloud API zu nutzen. Das spart Ihnen eine Menge Zeit und ist vielleicht sogar billiger als die Bereitstellung Ihrer eigenen LLMs. Falls noch nicht geschehen, können Sie es gerne ausprobieren!
Vincent
Berater für Entwickler bei NLP Cloud