LLaMA 3.1 405b er en stor sprogmodel udviklet af Meta AI, der repræsenterer en af de største åbent tilgængelige AI-modeller med hensyn til parameterstørrelse, med 405 milliarder parametre. Den er en del af Llama 3.1-familien, som omfatter modeller i forskellige størrelser (8B, 70B og 405B parametre).
405B-versionen er særlig bemærkelsesværdig på grund af sin størrelse, der sigter mod at matche eller endda overgå ydeevnen for nogle af de bedste closed source-modeller som GPT-4 i forskellige benchmarks, hvilket indikerer dens avancerede evner inden for sprogforståelse, generering og andre opgaver. Llama 3.1-modellerne er designet med forbedret flersproget understøttelse, så de kan forstå og generere tekst på flere sprog, hvilket udvider deres anvendelsesmuligheder på tværs af forskellige regioner og brugerbaser.
I denne artikel viser vi, hvordan man installerer og implementerer LLaMA 3.1 405B i produktionen på Google Cloud Platform (GCP) Compute Engine. Vi taler først om hardwarekrav, dernæst om provisionering af instanser på GCP og om implementering og kvantisering med vLLM.
Hardwarekravene til at køre Llama 3.1 405B er ret omfattende på grund af dets størrelse og kompleksitet. Som sædvanlig, når man implementerer LLM'er, er den mest komplekse del GPU'en. Du skal bruge en masse VRAM (dvs. GPU-hukommelse) for at implementere denne model:
I betragtning af disse behov vil du typisk se på opsætninger som:
Som sædvanlig skal man være forsigtig med kvantisering og sørge for, at modellens kvalitet ikke lider for meget. I vores test ser fp8-kvantiseringen ikke ud til at skade modellens kvalitet, så vi vil bruge den i denne artikel.
Google Cloud Platform (GCP) er en interessant udbyder til udrulning og skalering af dine AI-arbejdsbelastninger. De er relativt billige og har et godt GPU-tilbud (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
De er også ret fleksible med hensyn til valg af instanser. Du kan f.eks. forsyne instanser med en eller flere H100 GPU'er: 1xH100, 2xH100, 4xH100 eller 8xH100.
Det er dog ikke sikkert, at du får lov til at provisionere GPU-instanser, hvis din konto er ny, og hvis det er tilfældet, skal du gå gennem support og bede om en kvoteforøgelse.
Som et første skridt skal du oprette et nyt projekt på GCP. Derefter skal du aktivere Compute Engine API for dit projekt. Det kan du gøre ved at gå til API-biblioteket i GCP-konsollen og søge efter "Compute Engine". Klik på den, og klik derefter på "Enable" for at aktivere API'en.
Når du har aktiveret API'en, kan du oprette en ny instans. Det gør du ved at gå til afsnittet "VM-instanser" i GCP-konsollen og klikke på "Opret instans".
Du vil derefter blive bedt om at vælge en maskintype. For LLaMA 3.1 405B i fp8-tilstand skal du vælge en a3-highgpu-1g-maskine med 8xH100 GPU'er.
GCP-instans til LLaMA 3.1 405B
Derefter skal du kunne indstille mange detaljer for din VM som netværk, lagring osv. Vi vil ikke gennemgå alle disse indstillinger i denne artikel, men vi vil fokusere på image-typen og lagring.
For at kunne downloade LLaMA 3.1 405B-modelvægtene i fp8-format skal du bruge mindst 500 GB diskplads. Vi anbefaler også, at du bruger et Linux Deep Learning-image med CUDA 12 allerede installeret, da det kan spare dig for en del arbejde senere. Det kan du gøre i afsnittet "OS og lagring":
GCP Image And Disk Space for LLaMA 3.1 405B
vLLM, som står for Virtual Large Language Model, repræsenterer et betydeligt fremskridt inden for AI, især med hensyn til, hvordan store sprogmodeller (LLM'er) serveres og bruges til inferens.
vLLM er konstrueret til høj kapacitet og lav latenstid, hvilket gør den ideel til applikationer, hvor hurtig og effektiv sprogbehandling er afgørende. Det opnås ved hjælp af innovative teknikker som PagedAttention, der optimerer hukommelsesforbruget ved at styre opmærksomhedsnøglen og værdihukommelsen mere effektivt, hvilket giver mulighed for op til 24 gange højere kapacitet sammenlignet med traditionelle metoder som HuggingFace Transformers.
Kernen i vLLM's effektivitet ligger i dens hukommelsesstyring. Ved at bruge PagedAttention opdeler vLLM key-value (KV)-cachen i blokke, hvilket giver mulighed for bedre hukommelsesudnyttelse og reducerer fragmentering, en almindelig flaskehals i GPU-hukommelsesbrug for LLM'er. Denne tilgang fremskynder ikke kun behandlingen, men gør det også muligt at håndtere flere forespørgsler samtidigt uden væsentlige fald i ydeevnen.
Som inferens- og serveringsmotor fokuserer vLLM ikke bare på at køre LLM'er, men på at gøre det på en måde, der maksimerer ressourceudnyttelsen. Den anvender teknikker som kontinuerlig batching af indgående anmodninger, som sikrer, at GPU'en forbliver fuldt udnyttet, hvilket reducerer tomgangstider og øger den samlede effektivitet.
vLLM understøtter forskellige kvantificeringsteknikker (som GPTQ, AWQ, INT4, INT8, FP8), som reducerer modelvægtenes præcision og dermed mindsker hukommelsesforbruget og potentielt fremskynder inferens.
Det er relativt nemt at installere vLLM. Lad os oprette forbindelse til vores GCP VM-instans og installere vLLM ved hjælp af pip:
pip install vllm
Vi skal udføre distribueret inferens på 8 x H100 GPU'er, så vi skal også installere Ray:
pip install ray
Hvis du oplever kompatibilitetsproblemer, mens du installerer vLLM, kan det være nemmere for dig at kompilere vLLM fra kilden eller bruge deres Docker-image: Se installationsvejledningen til vLLM.
Lad os starte med et grundlæggende Python-eksempel for at teste vores model:
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?"))
Du kan køre Python-scriptet. Hvis det er første gang, du kører det, skal du vente på, at modellen bliver downloadet og indlæst på GPU'en, og så vil du få et svar som dette:
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.
LLaMA 3.1 405B-modellen er allerede blevet kvantiseret i fp8 for vLLM af Neural Magic, så vi behøver ikke at udføre kvantiseringen igen. Vi indlæser simpelthen den kvantificerede model fra HuggingFace Hub.
Parameteren tensor_parallel_size er indstillet efter det antal GPU'er, vi har på vores maskine.
Dette simple Python-script er dog ikke en rigtig produktionsserver. Vi vil nu starte inferensserveren for at kunne bruge mange forespørgsler parallelt og maksimere gennemstrømningen:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Når modellen er indlæst, kan du starte en anden terminal og lave nogle forespørgsler:
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 er en banebrydende generativ AI-model, men det er ikke let at implementere den i produktionen.
Den største udfordring er at finde den rigtige hardware. GPU'er er meget dyre, og der er global mangel på dem. Men når det først er lykkedes at skaffe de rigtige GPU'er, er det ret nemt at implementere modellen med en inferensserver som vLLM.
For så store modeller kan det være en god idé at udnytte kvantisering til at reducere VRAM-forbruget og forbedre ventetiden, som vi gjorde. Men vær forsigtig: Kvantisering er ikke altid et mirakelmiddel, da det kan mindske modellens nøjagtighed.
Hvis du ikke selv kan eller vil implementere LLaMA 3.1 405B, kan du nemt bruge den i NLP Cloud og udnytte denne fantastiske model i stor skala i produktionen. Prøv LLaMA 3.1 405B på NLP Cloud nu!
Hvis du har spørgsmål om LLaMA 3.1 405B og AI generelt, så tøv ikke med at spørge os, det er altid en fornøjelse at rådgive!
Julien
CTO hos NLP Cloud