Aveți probleme cu inteligența artificială sau cu dezvoltarea full-stack? Experții noștri sunt aici pentru a vă ghida: consiliere personalizată, integrare tehnică și multe altele. Contactați-ne la [email protected].

Instalarea și implementarea LLaMA 3.1 405B în producție pe GCP Compute Engine

LLaMA 3.1 405b este un model lingvistic mare dezvoltat de Meta AI, reprezentând unul dintre cele mai mari modele AI disponibile în mod deschis în ceea ce privește dimensiunea parametrilor, cu 405 miliarde de parametri. Acesta face parte din familia Llama 3.1, care include modele de dimensiuni diferite (8B, 70B și 405B parametri).

Versiunea 405B se remarcă în special prin amploarea sa, urmărind să egaleze sau chiar să depășească performanța unora dintre cele mai importante modele cu sursă închisă, cum ar fi GPT-4, în diferite criterii de referință, indicând capacitățile sale de ultimă generație în înțelegerea și generarea limbii și în alte sarcini. Modelele Llama 3.1 sunt concepute cu un suport multilingv îmbunătățit, fiind capabile să înțeleagă și să genereze text în mai multe limbi, ceea ce îi extinde aplicabilitatea în diferite regiuni și baze de utilizatori.

În acest articol, vom arăta cum să instalați și să implementați LLaMA 3.1 405B în producție pe Google Cloud Platform (GCP) Compute Engine. Vorbim mai întâi despre cerințele hardware, apoi despre provizionarea instanțelor pe GCP și despre implementarea și cuantizarea cu vLLM.

LLaMA 3.1 405B

LLaMA 3.1 405B: cerințe hardware

Cerințele hardware pentru rularea Llama 3.1 405B sunt destul de extinse din cauza dimensiunii și complexității sale. Ca de obicei în cazul implementării LLM-urilor, cea mai complexă parte este GPU-ul. Veți avea nevoie de o cantitate mare de VRAM (adică memorie GPU) pentru a implementa acest model:

Având în vedere aceste nevoi, vă veți uita de obicei la configurații precum:

Ca de obicei, trebuie să fiți atenți la cuantizare și să vă asigurați că calitatea modelului nu suferă prea mult. În testul nostru, cuantizarea fp8 nu pare să afecteze calitatea modelului, așa că o vom folosi în acest articol.

Aprovizionarea unei instanțe pentru LLaMA 3.1 405B pe GCP Compute Engine

Google Cloud Platform (GCP) este un furnizor interesant pentru implementarea și scalarea sarcinilor de lucru AI. Acestea sunt relativ ieftine și au o ofertă bună de GPU-uri (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).

Acestea sunt, de asemenea, destul de flexibile în ceea ce privește alegerea instanțelor. De exemplu, puteți furniza instanțe cu unul sau mai multe GPU-uri H100: 1xH100, 2xH100, 4xH100 sau 8xH100.

Totuși, este posibil să nu vi se permită să furnizați instanțe GPU dacă contul dvs. este nou și, în acest caz, va trebui să apelați la asistență pentru a solicita o creștere a cotei.

Ca prim pas, veți dori să creați un proiect nou pe GCP. Apoi, veți dori să activați API-ul Compute Engine pentru proiectul dumneavoastră. Puteți face acest lucru accesând Biblioteca API din Consola GCP și căutând "Compute Engine". Faceți clic pe acesta și apoi faceți clic pe "Enable" pentru a activa API-ul.

Odată ce ați activat API-ul, veți putea crea o nouă instanță. Puteți face acest lucru accesând secțiunea "VM instances" din Consola GCP și făcând clic pe "Create instance".

Vi se va cere apoi să alegeți un tip de mașină. Pentru LLaMA 3.1 405B în modul fp8, veți dori să alegeți o mașină a3-highgpu-1g cu 8xH100 GPU-uri.

Instanță GCP pentru LLaMA 3.1 405B Instanță GCP pentru LLaMA 3.1 405B

Apoi va trebui să puteți seta mai multe detalii pentru mașina virtuală, cum ar fi rețeaua, stocarea etc. Nu vom analiza toate aceste setări în acest articol, ci ne vom concentra pe tipul de imagine și pe stocare.

Pentru a descărca greutățile modelului LLaMA 3.1 405B în format fp8, veți avea nevoie de cel puțin 500 GB de spațiu pe disc. De asemenea, vă recomandăm să utilizați o imagine Linux Deep Learning cu CUDA 12 deja instalat, deoarece poate economisi ceva muncă mai târziu. Puteți obține acest lucru în secțiunea "Sistem de operare și stocare":

Imagine GCP și spațiu pe disc pentru LLaMA 3.1 405B Imagine GCP și spațiu pe disc pentru LLaMA 3.1 405B

Instalarea vLLM

vLLM, care vine de la Virtual Large Language Model, reprezintă un progres semnificativ în domeniul inteligenței artificiale, în special în ceea ce privește modul în care modelele lingvistice mari (LLM) sunt servite și utilizate pentru inferență.

vLLM este proiectat pentru inferențe cu randament ridicat și latență redusă, fiind ideal pentru aplicații în care prelucrarea rapidă și eficientă a limbajului este esențială. Aceasta realizează acest lucru prin tehnici inovatoare precum PagedAttention, care optimizează utilizarea memoriei prin gestionarea mai eficientă a cheii de atenție și a memoriei valorilor, permițând un randament de până la 24 de ori mai mare în comparație cu metodele tradiționale precum HuggingFace Transformers.

Nucleul eficienței vLLM constă în gestionarea memoriei. Prin utilizarea PagedAttention, vLLM împarte cache-ul cheie-valoare (KV) în blocuri, ceea ce permite o mai bună utilizare a memoriei și reduce fragmentarea, un blocaj comun în utilizarea memoriei GPU pentru LLM-uri. Această abordare nu numai că accelerează procesarea, dar permite și gestionarea mai multor cereri simultan, fără scăderi semnificative de performanță.

În calitate de motor de inferență și de servire, vLLM se concentrează nu doar pe rularea LLM-urilor, ci și pe realizarea acestora într-un mod care maximizează utilizarea resurselor. Acesta utilizează tehnici precum gruparea continuă a cererilor primite, ceea ce asigură utilizarea completă a GPU-ului, reducând astfel timpii de inactivitate și crescând eficiența generală.

vLLM acceptă diverse tehnici de cuantificare (cum ar fi GPTQ, AWQ, INT4, INT8, FP8) care reduc precizia ponderilor modelului, reducând astfel utilizarea memoriei și accelerând potențial inferența.

Instalarea vLLM este relativ ușoară. Să ne conectăm la instanța noastră GCP VM și să instalăm vLLM utilizând pip:

pip install vllm

Vom efectua inferențe distribuite pe 8 x GPU H100, deci trebuie să instalăm și Ray:

pip install ray

Dacă întâmpinați probleme de compatibilitate în timpul instalării vLLM, poate fi mai simplu să compilați vLLM din sursă sau să utilizați imaginea lor Docker: consultați instrucțiunile de instalare a vLLM.

Server de inferență pentru LLaMA 3.1 405B

Să începem cu un exemplu Python de bază pentru a testa modelul nostru:

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?"))

Puteți rula scriptul Python. Dacă este prima dată când îl executați, va trebui să așteptați ca modelul să fie descărcat și încărcat pe GPU, apoi veți primi un răspuns ca acesta:

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. 

Modelul LLaMA 3.1 405B a fost deja cuantificat în fp8 pentru vLLM de către Neural Magic, deci nu trebuie să efectuăm cuantificarea din nou. Pur și simplu încărcăm modelul cuantificat de la HuggingFace Hub.

Parametrul tensor_parallel_size este setat în funcție de numărul de GPU-uri pe care le avem pe mașina noastră.

Totuși, acest script Python simplu nu este un server de producție adecvat. Vom porni acum serverul de inferență pentru a consuma mai multe cereri în paralel și a maximiza randamentul:

python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8

Odată ce modelul este încărcat, puteți porni un al doilea terminal și puteți face câteva cereri:

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

Concluzie

LLaMA 3.1 405B este un model de AI generativ de ultimă generație, dar implementarea sa în producție nu este ușoară.

Cea mai mare provocare este găsirea hardware-ului potrivit. GPU-urile sunt foarte costisitoare și există o penurie globală. Dar odată ce reușiți să furnizați GPU-urile potrivite, implementarea modelului cu un server de inferență precum vLLM este destul de ușoară.

Pentru modele atât de mari, ați putea dori să profitați de cuantizare pentru a reduce utilizarea VRAM și a îmbunătăți latența, așa cum am făcut noi. Dar fiți atenți: cuantizarea nu este întotdeauna un glonț de argint, deoarece poate reduce precizia modelului.

Dacă nu puteți sau nu doriți să implementați singur LLaMA 3.1 405B, îl puteți utiliza cu ușurință pe NLP Cloud și să profitați de acest model excelent la scară largă în producție. Încercați LLaMA 3.1 405B pe NLP Cloud acum!

Dacă aveți întrebări despre LLaMA 3.1 405B și AI în general, vă rugăm să nu ezitați să ne întrebați, este întotdeauna o plăcere să vă sfătuim!

Julien
CTO la NLP Cloud