Wie man Llama 3.1 405B mit Novita AI bereitstellt

Wie man Llama 3.1 405B mit Novita AI bereitstellt

Vorwort

Die Veröffentlichung von Llama 3.1 hat sofort weltweite Aufmerksamkeit erregt, da zum ersten Mal ein Open-Source-Modell in bestimmten Metriken an proprietäre Modelle heranreicht oder sie sogar übertrifft. Dieser Artikel stellt die Methode und die Schritte zur Bereitstellung des Llama 3.1-405B-Modells von Grund auf mit einer Novita AI GPU-Instanz vor. Es ist besonders zu beachten, dass die Bereitstellung eines großen Modells von Grund auf eine zeit- und arbeitsintensive Aufgabe ist. Wenn Sie solche mühsamen Arbeiten vermeiden und das Llama 3.1-405B-Modell direkt nutzen möchten, können Sie eine hervorragende Modell-Hosting-Plattform in der Branche suchen, um den Inferenzdienst in Form der OpenAI-API aufzurufen. Es ist nicht nur einfach zu bedienen, sondern auch sehr kosteneffizient, mit sehr geringen und kontrollierbaren Gesamtkosten. Derzeit hat Novita AI einen API-Dienst für Llama 3.1 gestartet, den Sie direkt im Playground ausprobieren können: https://novita.ai/model-api/llm-api/playground

Grundlegende Anforderungen für die Bereitstellung von Llama 3.1-405B

Die von Meta als Open Source veröffentlichte Llama 3.1-Serie umfasst die Größen 8B, 70B und 405B, wobei das 405B-Modell das größte bisher veröffentlichte Open-Source-Sprachmodell ist, mit einem Parameterumfang von 40,5 Milliarden. Die Leistung des Modells hat in mehreren Bewertungsergebnissen die Modelle GPT-4 und GPT-4o übertroffen und ist mit Claude 3.5-Sonnet vergleichbar. Es ist herausfordernd, ein so großes Modell in die GPU zu laden. Die Original-FP16-Version des 405B-Modells benötigt 810 GB GPU-Speicher, wie in der folgenden Abbildung dargestellt. Selbst mit der höchsten auf dem Markt erhältlichen GPU H100 kann ein Server mit maximal 8 Karten diese Version des Modells nicht direkt laden. Es ist notwendig, die FP16-Version des Modells in eine Darstellung mit niedrigerer Genauigkeit zu quantisieren, wodurch die Anforderungen an den Speicher reduziert werden und das erfolgreiche Laden in die GPU ermöglicht wird.

Die Modellarchitektur der Llama 3.1-Serie übernimmt die von Llama 3 und ist strukturell sehr ähnlich, was sehr freundlich für das Inferenz-Framework ist. Open-Source-Inferenzlösungen wie vLLM können schnell eine Anpassung abschließen und die Inferenz großer Modelle wie Llama 3.1-405B unterstützen. Um die Bereitstellung des Llama 3.1-405B-Inferenzdienstes abzuschließen, müssen wir uns auf drei Aspekte vorbereiten:

  • Hardware: Es wird empfohlen, eine GPU-Serverinstanz mit 8 H100 GPUs und etwa 1,5 TB Speicherplatz zu wählen. Sie können die Instanz über die Novita AI-Konsole auswählen und Speicherkapazität durch das Einhängen eines Netzlaufwerks bereitstellen.

  • Modell: Bereiten Sie ein Huggingface-Konto vor, laden Sie das originale Llama 3.1-405B-Modell herunter, oder Sie können auch die FP8- oder INT4-Version des Modells herunterladen.
  • Inferenz-Framework: Laden Sie die neueste Version von vLLM v0.5.3.post1 herunter.

Modellvorbereitung

Nach der Vorbereitung des GPU-Servers mit 8 H100-Karten melden Sie sich am Server an und beginnen mit dem Herunterladen des Modells. Hier wird die Methode des Herunterladens der FP16-Version des Modells und der manuellen Konvertierung in FP8- und INT4-quantisierte Versionen vorgestellt (natürlich können Sie auch die quantisierten Modelle direkt auf der Huggingface-Plattform herunterladen). Es wird empfohlen, die Instruct-Version von der Huggingface-Plattform herunterzuladen. Registrieren Sie sich zunächst auf der Huggingface-Plattform und melden Sie sich an, erstellen Sie einen Access Token für den aktuellen Benutzer und speichern Sie ihn auf der Einstellungsseite. Dieser wird beim Herunterladen des Modells verwendet. Öffnen Sie die Llama 3.1-405B-Modell-Startseite: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, reichen Sie die Modellanfrage bei Meta ein und warten Sie etwa eine halbe Stunde auf die Autorisierung. Kehren Sie zum GPU-Server zurück, installieren Sie das huggingface-Client-Programm und starten Sie den Download des Modells mit den folgenden Befehlen:

pip install huggingface-hub
huggingface-cli login  ## Access Token eingeben
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## Starten des Downloads des 405B-Modells

Nach einer langen Wartezeit (abhängig von der aktuellen Netzwerkgeschwindigkeit) wird das 800 GB große 405B-Modell erfolgreich auf die lokale Platte heruntergeladen. Die spezifischen Modellinformationen können durch Aufruf von huggingface-cli scan-cache eingesehen werden. Als nächstes führen Sie die FP8- und INT4-Quantisierung des Originalmodells durch. Laden Sie zunächst das FP8-Quantisierungswerkzeug herunter. Sie können direkt das Open-Source-Tool AutoFP8 verwenden: https://github.com/neuralmagic/AutoFP8, und das enthaltene Skript für die manuelle Quantisierung verwenden, wobei der Quantisierungsmodus dynamisch ist, wie folgt:

git clone https://github.com/neuralmagic/AutoFP8.git
cd AutoFP8
pip install -e .  ## Lokale Kompilierung und Installation des AutoFP8-Tools
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

Das Quantisierungsskript gibt den Ausgabepfad für das quantisierte Modell mit --save-dir an. Da es sich um eine reine Gewichtsquantisierung handelt, ist die Gesamtgeschwindigkeit sehr schnell. Sie können auch direkt die von Meta quantisierte FP8-Version herunterladen: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8. Der Download-Befehl lautet wie folgt:

huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8

Ähnlich wie bei der FP8-Quantisierung können Sie das Open-Source-Tool AutoAWQ für die INT4-Version verwenden. Die Adresse dieser Quantisierungslösung ist: https://github.com/casper-hansen/AutoAWQ. Die Quantisierungsmethode ist wie folgt:

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## Lokale Kompilierung und Installation des AutoAWQ-Tools
## Manuelle Änderung von examples/quantize.py
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# Start der Quantisierung
python examples/quantize.py

Erstellung des Inferenz-Frameworks

Dank der starken Unterstützung der Open-Source-Community ist vLLM als industrietaugliches, hocheffizientes Inferenz-Framework anerkannt und bietet eine sehr umfangreiche Unterstützung für große Modelle sowie zeitnahe Updates. Ab v0.5.3.post1 unterstützt vLLM den Inferenzdienst der Llama 3.1-Serie. Die Methode zum Herunterladen des vLLM-Quellcodes und zur Kompilierung ist wie folgt:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
pip install -e .

Nach erfolgreicher Kompilierung kann der Inferenzdienst gestartet werden. Zusätzlich zur lokalen Kompilierung von vLLM kann vLLM auch in ein Docker-Image kompiliert werden, wie folgt:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
docker build -t vllm_0.5.3.p1 .

Sie können auch direkt das offizielle vLLM-Image herunterladen:

docker pull vllm/vllm-openai:v0.5.3.post1

Ausführen des Inferenzdienstes

Nach Abschluss der Erstellung des vLLM-Inferenz-Frameworks können Sie vLLM starten und das Llama 3.1-405B-Modell laden, um den Inferenzdienst zu starten. Für das lokal kompilierte vLLM-Inferenz-Framework müssen Sie in das Stammverzeichnis des vLLM-Quellcodes wechseln und dann den folgenden Befehl ausführen, um den Inferenzdienst zu starten:

cd vllm
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Wenn Sie den Inferenzdienst in einem Docker-Container ausführen, können Sie den folgenden Befehl verwenden:

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Sobald das vLLM-Inferenz-Framework erfolgreich läuft, horcht es auf.

Novita AI ist die All-in-One-Cloud-Plattform, die Ihre KI-Ambitionen beflügelt. Integrierte APIs, serverlos, GPU-Instanz – die kosteneffizienten Werkzeuge, die Sie benötigen. Infrastruktur überflüssig, starten Sie kostenlos und machen Sie Ihre KI-Vision zur Realität.

Empfohlene Lektüre:

  1. Von Docker zu Kubernetes
  2. Entmystifizierung der Kubernetes-Planung: Ein tiefer Einblick in Prädikate und Prioritäten