LLaMA 3.1 405b is een groot taalmodel ontwikkeld door Meta AI. Het is een van de grootste openlijk beschikbare AI-modellen in termen van parametergrootte, met 405 miljard parameters. Het maakt deel uit van de Llama 3.1 familie, die modellen van verschillende groottes bevat (8B, 70B en 405B parameters).
De 405B versie is vooral opmerkelijk vanwege zijn schaalgrootte, met als doel de prestaties van enkele van de top closed source modellen zoals GPT-4 in verschillende benchmarks te evenaren of zelfs te overtreffen, wat de state-of-the-art mogelijkheden in taalbegrip, generatie en andere taken aangeeft. Llama 3.1 modellen zijn ontworpen met verbeterde meertalige ondersteuning, in staat om tekst in meerdere talen te begrijpen en te genereren, wat de toepasbaarheid in verschillende regio's en gebruikersbases vergroot.
In dit artikel laten we zien hoe je LLaMA 3.1 405B installeert en in productie neemt op Google Cloud Platform (GCP) Compute Engine. Eerst bespreken we de hardwarevereisten, dan instance provisioning op GCP en implementatie en kwantisatie met vLLM.
De hardwarevereisten voor het draaien van Llama 3.1 405B zijn vrij uitgebreid vanwege de omvang en complexiteit. Zoals gebruikelijk bij het inzetten van LLM's is het meest complexe onderdeel de GPU. Je hebt veel VRAM (d.w.z. GPU-geheugen) nodig om dit model in te zetten:
Gezien deze behoeften kijk je meestal naar opstellingen als:
Zoals gewoonlijk moet je voorzichtig zijn met kwantisatie en ervoor zorgen dat de kwaliteit van het model er niet te veel onder lijdt. In onze test lijkt de fp8 kwantisatie de kwaliteit van het model niet te schaden, dus die gaan we in dit artikel gebruiken.
Google Cloud Platform (GCP) is een interessante provider voor het implementeren en schalen van je AI workloads. Ze zijn relatief goedkoop en hebben een goed GPU-aanbod (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Ze zijn ook heel flexibel in termen van instance-keuzes. Je kunt bijvoorbeeld instanties voorzien van een of meer H100 GPU's: 1xH100, 2xH100, 4xH100 of 8xH100.
Het is echter mogelijk dat je geen GPU-instanties mag aanmaken als je account nieuw is en als dat het geval is, moet je via support vragen om een quotumverhoging.
Als eerste stap wil je een nieuw project aanmaken op GCP. Vervolgens wil je de Compute Engine API inschakelen voor je project. Je kunt dit doen door naar de API-bibliotheek in de GCP Console te gaan en te zoeken naar "Compute Engine". Klik erop en klik vervolgens op "Enable" om de API te activeren.
Zodra je de API hebt ingeschakeld, zul je een nieuwe instantie kunnen creëren. Je kunt dit doen door naar de "VM instances" sectie te gaan in de GCP Console en te klikken op "Create instance".
Je wordt dan gevraagd om een machinetype te kiezen. Voor LLaMA 3.1 405B in fp8-modus kies je een a3-highgpu-1g machine met 8xH100 GPU's.
GCP-instantie voor LLaMA 3.1 405B
Je zult dan in staat moeten zijn om veel details voor je VM in te stellen, zoals netwerken, opslag, enz. We gaan niet al deze instellingen bespreken in dit artikel, maar we zullen ons richten op het image type en de opslag.
Om de LLaMA 3.1 405B modelgewichten in fp8-formaat te downloaden, hebt u minstens 500 GB schijfruimte nodig. We raden ook aan om een Linux Deep Learning image te gebruiken waarop CUDA 12 al is geïnstalleerd, omdat dit later wat werk kan besparen. Je kunt dat bereiken in het gedeelte "OS en opslag":
GCP-afbeelding en schijfruimte voor LLaMA 3.1 405B
vLLM, wat staat voor Virtual Large Language Model, betekent een belangrijke vooruitgang op het gebied van AI, met name in de manier waarop grote taalmodellen (LLM's) worden bediend en gebruikt voor inferentie.
vLLM is ontworpen voor inferenties met een hoge doorvoer en lage latentie, waardoor het ideaal is voor toepassingen waarbij snelle en efficiënte taalverwerking cruciaal is. Dit wordt bereikt door middel van innovatieve technieken zoals PagedAttention, dat het geheugengebruik optimaliseert door het efficiënter beheren van aandachtssleutel en waardegeheugen, waardoor tot 24x hogere doorvoer mogelijk is in vergelijking met traditionele methoden zoals HuggingFace Transformers.
De kern van de efficiëntie van vLLM ligt in het geheugenbeheer. Door gebruik te maken van PagedAttention verdeelt vLLM de key-value (KV) cache in blokken, wat zorgt voor een beter geheugengebruik en minder fragmentatie, een veelvoorkomend knelpunt in het gebruik van GPU-geheugen voor LLMs. Deze aanpak versnelt niet alleen de verwerking, maar maakt het ook mogelijk om meer aanvragen tegelijk te verwerken zonder significante prestatiedalingen.
Als inferentie- en serverengine richt vLLM zich niet alleen op het uitvoeren van LLM's, maar doet dit op een manier die het gebruik van bronnen maximaliseert. Het maakt gebruik van technieken zoals het continu bundelen van binnenkomende verzoeken, wat ervoor zorgt dat de GPU volledig benut blijft, waardoor de inactiviteitstijd wordt verkort en de algehele efficiëntie wordt verhoogd.
vLLM ondersteunt verschillende kwantisatietechnieken (zoals GPTQ, AWQ, INT4, INT8, FP8) die de precisie van modelgewichten verminderen, waardoor het geheugengebruik afneemt en de inferentie mogelijk wordt versneld.
Het installeren van vLLM is relatief eenvoudig. Laten we verbinding maken met onze GCP VM-instantie en vLLM installeren met pip:
pip install vllm
We gaan gedistribueerde inferentie uitvoeren op 8 x H100 GPU's, dus we moeten Ray ook installeren:
pip install ray
Als u compatibiliteitsproblemen ondervindt tijdens de installatie van vLLM, is het misschien eenvoudiger voor u om vLLM vanaf de broncode te compileren of hun Docker image te gebruiken: bekijk de vLLM installatie-instructies.
We beginnen met een eenvoudig Python-voorbeeld om ons model te 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?"))
Je kunt het Python-script uitvoeren. Als dit de eerste keer is dat je het uitvoert, moet je wachten tot het model is gedownload en geladen op de GPU, waarna je een reactie als deze krijgt:
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.
Het LLaMA 3.1 405B model is al gequantiseerd in fp8 voor vLLM door Neural Magic, dus we hoeven de kwantisatie niet opnieuw uit te voeren. We laden gewoon het gequantiseerde model van de HuggingFace Hub.
De parameter tensor_parallel_size wordt ingesteld op basis van het aantal GPU's dat we op onze machine hebben.
Dit eenvoudige Python-script is echter geen echte productieserver. We zullen nu de inferentieserver starten om veel verzoeken parallel te verwerken en de doorvoer te maximaliseren:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Zodra het model is geladen, kun je een tweede terminal starten en enkele verzoeken doen:
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 is een geavanceerd generatief AI-model, maar het is niet eenvoudig om het in productie te nemen.
De grootste uitdaging is om de juiste hardware te vinden. GPU's zijn erg duur en er is een wereldwijd tekort. Maar als je eenmaal de juiste GPU's hebt, is het implementeren van het model met een inferentieserver zoals vLLM vrij eenvoudig.
Voor zulke grote modellen wil je misschien kwantisatie gebruiken om het VRAM-gebruik te verminderen en de latentie te verbeteren, zoals wij hebben gedaan. Maar wees voorzichtig: kwantisatie is niet altijd een wondermiddel, omdat het de nauwkeurigheid van het model kan verminderen.
Als u LLaMA 3.1 405B niet zelf kunt of wilt implementeren, kunt u het eenvoudig gebruiken op NLP Cloud en dit geweldige model op schaal in productie gebruiken. Probeer LLaMA 3.1 405B nu op NLP Cloud!
Als je vragen hebt over LLaMA 3.1 405B en AI in het algemeen, aarzel dan niet om het ons te vragen, het is altijd een genoegen om advies te geven!
Julien
CTO bij NLP Cloud