Kämpar du med AI eller fullstack-utveckling? Våra experter finns här för att vägleda dig: skräddarsydda råd, teknisk integration och mycket mer. Nå ut till oss på [email protected].

Installera och distribuera LLaMA 3.1 405B till produktion på GCP Compute Engine

LLaMA 3.1 405b är en stor språkmodell utvecklad av Meta AI, som representerar en av de största öppet tillgängliga AI-modellerna när det gäller parameterstorlek, med 405 miljarder parametrar. Den är en del av Llama 3.1-familjen, som innehåller modeller av olika storlekar (8B, 70B och 405B parametrar).

405B-versionen är särskilt anmärkningsvärd för sin storlek och har som mål att matcha eller till och med överträffa prestandan hos några av de bästa modellerna med sluten källkod som GPT-4 i olika benchmarks, vilket indikerar dess toppmoderna kapacitet inom språkförståelse, generering och andra uppgifter. Llama 3.1-modellerna är utformade med förbättrat flerspråkigt stöd och kan förstå och generera text på flera språk, vilket breddar deras användbarhet i olika regioner och användarbaser.

I den här artikeln visar vi hur du installerar och distribuerar LLaMA 3.1 405B till produktion på Google Cloud Platform (GCP) Compute Engine. Vi talar först om maskinvarukrav, sedan om tillhandahållande av instanser på GCP samt om distribution och kvantisering med vLLM.

LLaMA 3.1 405B

LLaMA 3.1 405B: krav på maskinvara

Hårdvarukraven för att köra Llama 3.1 405B är ganska omfattande på grund av dess storlek och komplexitet. Som vanligt när man distribuerar LLM:er är GPU:n den mest komplexa delen. Du kommer att behöva mycket VRAM (dvs. GPU-minne) för att distribuera den här modellen:

Med tanke på dessa behov skulle du vanligtvis titta på inställningar som:

Som vanligt måste du vara försiktig med kvantisering och se till att modellens kvalitet inte lider för mycket. I vårt test verkar fp8-kvantiseringen inte skada modellens kvalitet, så vi kommer att använda den i den här artikeln.

Tillhandahållande av en instans för LLaMA 3.1 405B på GCP Compute Engine

Google Cloud Platform (GCP) är en intressant leverantör för att distribuera och skala upp dina AI-arbetsbelastningar. De är relativt billiga och har ett bra GPU-erbjudande (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4 ...).

De är också ganska flexibla när det gäller val av instanser. Du kan till exempel förse instanser med en eller flera H100 GPU: er: 1xH100, 2xH100, 4xH100 eller 8xH100.

Du kanske inte får tillhandahålla GPU-instanser om ditt konto är nytt, och om så är fallet måste du gå via support för att be om en kvotökning.

Som ett första steg kommer du att vilja skapa ett nytt projekt på GCP. Sedan vill du aktivera Compute Engine API för ditt projekt. Du kan göra detta genom att gå till API-biblioteket i GCP-konsolen och söka efter "Compute Engine". Klicka på den och klicka sedan på "Enable" för att aktivera API:et.

När du har aktiverat API:et kommer du att kunna skapa en ny instans. Du kan göra detta genom att gå till avsnittet "VM-instanser" i GCP-konsolen och klicka på "Skapa instans".

Du kommer sedan att bli ombedd att välja en maskintyp. För LLaMA 3.1 405B i fp8-läge vill du välja en a3-highgpu-1g-maskin med 8xH100 GPU:er.

GCP-instans för LLaMA 3.1 405B GCP-instans för LLaMA 3.1 405B

Du kommer sedan att behöva ställa in många detaljer för din VM som nätverk, lagring etc. Vi kommer inte att gå igenom alla dessa inställningar i den här artikeln, men vi kommer att fokusera på avbildningstyp och lagring.

För att kunna ladda ner LLaMA 3.1 405B-modellvikterna i fp8-format behöver du minst 500 GB diskutrymme. Vi rekommenderar också att du använder en Linux Deep Learning-bild med CUDA 12 redan installerad eftersom det kan spara en del arbete senare. Du kan uppnå det i avsnittet "OS och lagring":

GCP-bild och diskutrymme för LLaMA 3.1 405B GCP-bild och diskutrymme för LLaMA 3.1 405B

Installera vLLM

vLLM, som står för Virtual Large Language Model, innebär ett betydande framsteg inom AI, särskilt när det gäller hur stora språkmodeller (LLM) används för inferens.

vLLM är konstruerad för inferenser med hög genomströmning och låg latens, vilket gör den idealisk för applikationer där snabb och effektiv språkbearbetning är avgörande. Detta uppnås genom innovativa tekniker som PagedAttention, som optimerar minnesanvändningen genom att hantera uppmärksamhetsnycklar och värdeminnen mer effektivt, vilket möjliggör upp till 24 gånger högre genomströmning jämfört med traditionella metoder som HuggingFace Transformers.

Kärnan i vLLM:s effektivitet ligger i dess minneshantering. Genom att använda PagedAttention delar vLLM upp key-value (KV)-cachen i block, vilket ger bättre minnesutnyttjande och minskar fragmenteringen, en vanlig flaskhals i GPU-minnesanvändningen för LLM. Detta tillvägagångssätt påskyndar inte bara bearbetningen utan gör det också möjligt att hantera fler förfrågningar samtidigt utan betydande prestandaförluster.

Som inferens- och serveringsmotor fokuserar vLLM inte bara på att köra LLM:er utan även på att göra det på ett sätt som maximerar resursanvändningen. Den använder tekniker som kontinuerlig batchning av inkommande förfrågningar, vilket säkerställer att GPU:n förblir fullt utnyttjad, vilket minskar tomgångstiderna och ökar den totala effektiviteten.

vLLM stöder olika kvantiseringstekniker (t.ex. GPTQ, AWQ, INT4, INT8, FP8) som minskar precisionen i modellvikterna, vilket minskar minnesanvändningen och potentiellt påskyndar inferens.

Att installera vLLM är relativt enkelt. Låt oss ansluta till vår GCP VM-instans och installera vLLM med pip:

pip install vllm

Vi kommer att utföra distribuerad inferens på 8 x H100 GPU:er, så vi måste installera Ray också:

pip install ray

Om du upplever kompatibilitetsproblem när du installerar vLLM kan det vara enklare för dig att kompilera vLLM från källan eller använda deras Docker-image: ta en titt på installationsanvisningarna för vLLM.

Inferensserver för LLaMA 3.1 405B

Vi börjar med ett grundläggande Python-exempel för att testa vår modell:

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öra Python-skriptet. Om det är första gången du kör det måste du vänta på att modellen ska laddas ned och laddas på GPU:n, och sedan får du ett svar som det här:

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 har redan kvantifierats i fp8 för vLLM av Neural Magic, så vi behöver inte utföra kvantifieringen igen. Vi laddar helt enkelt den kvantiserade modellen från HuggingFace Hub.

Parametern tensor_parallel_size ställs in enligt det antal GPU:er som vi har på vår maskin.

Detta enkla Python-skript är dock inte en riktig produktionsserver. Vi kommer nu att starta inferensservern för att kunna konsumera många förfrågningar parallellt och maximera genomströ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 är inläst kan du starta en andra terminal och göra några förfrågningar:

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."

Slutsats

LLaMA 3.1 405B är en banbrytande generativ AI-modell, men det är inte lätt att använda den i produktionen.

Den största utmaningen är att hitta rätt hårdvara. GPU:er är mycket kostsamma och det finns en global brist. Men när du väl har lyckats tillhandahålla rätt GPU:er är det ganska enkelt att distribuera modellen med en inferensserver som vLLM.

För så stora modeller kanske du vill utnyttja kvantisering för att minska VRAM-användningen och förbättra latensen, som vi gjorde. Men var försiktig: kvantisering är inte alltid en silverkula eftersom det kan minska modellens noggrannhet.

Om du inte kan eller vill driftsätta LLaMA 3.1 405B själv kan du enkelt använda den på NLP Cloud och utnyttja denna fantastiska modell i stor skala i produktionen. Prova LLaMA 3.1 405B på NLP Cloud nu!

Om du har frågor om LLaMA 3.1 405B och AI i allmänhet, tveka inte att fråga oss, det är alltid ett nöje att ge råd!

Julien
CTO på NLP Cloud