LLaMA 3.1 405b on Meta AI poolt välja töötatud suur keelemudel, mis on 405 miljardi parameetriga üks suurimaid avalikult kättesaadavaid tehisintellekti mudeleid. See on osa Llama 3.1 perekonnast, mis sisaldab erineva suurusega mudeleid (8B, 70B ja 405B parameetrit).
405B versioon on eriti tähelepanuväärne oma ulatuse poolest, mille eesmärk on saavutada või isegi ületada mitmetes võrdlusuuringutes mõne tipptasemel suletud lähtekoodiga mudeli, nagu GPT-4, jõudlust, mis näitab selle tipptasemel võimeid keele mõistmisel, genereerimisel ja muudes ülesannetes. Llama 3.1 mudelid on loodud täiustatud mitmekeelse toega, mis võimaldab mõista ja genereerida teksti mitmes keeles, mis laiendab selle rakendatavust erinevates piirkondades ja kasutajaskondades.
Selles artiklis näitame, kuidas paigaldada ja juurutada LLaMA 3.1 405B tootmisesse Google Cloud Platform (GCP) Compute Engine'ile. Esmalt räägime riistvaranõuetest, seejärel instantside loomisest GCPs ning kasutuselevõtust ja kvantitatiivsusest vLLMiga.
Llama 3.1 405B käivitamise riistvaranõuded on selle suuruse ja keerukuse tõttu üsna suured. Nagu tavaliselt LLMi kasutuselevõtmisel, on kõige keerulisem osa GPU. Selle mudeli kasutuselevõtuks on vaja palju VRAMi (st GPU mälu):
Arvestades neid vajadusi, siis tavaliselt vaadatakse selliseid seadistusi nagu:
Nagu tavaliselt, tuleb kvantimise suhtes olla ettevaatlik ja veenduda, et mudeli kvaliteet ei kannataks liiga palju. Meie testis ei tundu, et fp8 kvantimine kahjustaks mudeli kvaliteeti, seega kasutame seda käesolevas artiklis.
Google Cloud Platform (GCP) on huvitav teenusepakkuja tehisintellekti töökoormuste kasutuselevõtmiseks ja skaleerimiseks. Nad on suhteliselt odavad ja neil on hea GPU pakkumine (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Samuti on nad üsna paindlikud, mis puudutab instantsi valikuid. Näiteks saab instantse varustada ühe või mitme H100 GPUga: 1xH100, 2xH100, 4xH100 või 8xH100.
Kui teie konto on uus, ei pruugi teil olla lubatud GPU instantside eraldamine ja kui see on nii, siis peate kvoodi suurendamiseks pöörduma klienditoe poole.
Esimese sammuna soovite luua uue projekti GCP-s. Seejärel soovite lubada oma projekti jaoks Compute Engine API. Seda saate teha, kui lähete GCP konsooli API raamatukogusse ja otsite "Compute Engine". Klõpsake sellel ja seejärel klõpsake API aktiveerimiseks "Enable".
Kui olete API aktiveerinud, saate luua uue instantsi. Seda saate teha, minnes GCP konsooli jaotisesse "VM instants" ja klõpsates nupul "Create instance".
Seejärel palutakse teil valida masina tüüp. LLaMA 3.1 405B jaoks fp8-režiimis soovite valida a3-highgpu-1g masina 8xH100 GPUga.
LLaMA 3.1 405B GCP-instants 405B
Seejärel peate saama määrata oma VM-i jaoks palju üksikasju, nagu võrgud, salvestusruumid jne. Me ei kavatse selles artiklis kõiki neid seadistusi läbi vaadata, vaid keskendume kujutise tüübile ja salvestusruumile.
LLaMA 3.1 405B mudeli kaalude allalaadimiseks fp8-vormingus on vaja vähemalt 500 GB kettaruumi. Samuti soovitame kasutada Linuxi Deep Learningi kujutist, millele on CUDA 12 juba installitud, sest see võib hiljem tööd säästa. Selle saate saavutada jaotises "Operatsioonisüsteem ja salvestusruum":
GCP kujutis ja kettaruum LLaMA 3.1 405B jaoks
vLLM, mis tähendab virtuaalset suurt keelemudelit, kujutab endast olulist edasiminekut tehisintellekti valdkonnas, eriti selles, kuidas suuri keelemudeleid (LLM) serveeritakse ja kasutatakse järelduste tegemiseks.
vLLM on loodud suure läbilaskevõimega ja väikese hilinemisajaga järelduste tegemiseks, mistõttu on see ideaalne rakenduste jaoks, kus kiire ja tõhus keeletöötlus on väga oluline. See saavutatakse selliste uuenduslike tehnikate abil nagu PagedAttention, mis optimeerib mälukasutust, hallates tõhusamalt tähelepanu võtme- ja väärtusmälu, võimaldades kuni 24 korda suuremat läbilaskevõimet võrreldes traditsiooniliste meetoditega nagu HuggingFace Transformers.
vLLMi tõhususe tuum seisneb mäluhalduses. Kasutades PagedAttention'i, jagab vLLM võtmeväärtuste vahemälu (KV) plokkideks, mis võimaldab mälu paremini kasutada ja vähendab killustatust, mis on LLM-i puhul tavaline kitsaskoht GPU mälukasutusele. See lähenemisviis mitte ainult ei kiirenda töötlemist, vaid võimaldab ka käsitleda rohkem päringuid samaaegselt ilma märkimisväärse jõudluse languseta.
Järeldamise ja teenindamise mootorina keskendub vLLM mitte ainult LLMide käivitamisele, vaid teeb seda nii, et ressursikasutus oleks võimalikult suur. See kasutab selliseid tehnikaid nagu sissetulevate päringute pidev batching, mis tagab, et GPU jääb täielikult kasutusse, vähendades seeläbi tühikäiguaegu ja suurendades üldist tõhusust.
vLLM toetab erinevaid kvantimismeetodeid (nagu GPTQ, AWQ, INT4, INT8, FP8), mis vähendavad mudeli kaalude täpsust, vähendades seeläbi mälukasutust ja potentsiaalselt kiirendades järelduste tegemist.
VLLM-i paigaldamine on suhteliselt lihtne. Ühendame end meie GCP VM-instantsiga ja paigaldame vLLM-i pipi abil:
pip install vllm
Me kavatseme teha jaotatud järeldusi 8 x H100 GPUs, seega peame paigaldama ka Ray:
pip install ray
Kui teil tekib vLLM-i paigaldamisel ühilduvusprobleeme, võib olla lihtsam vLLM-i lähtekoodist kompileerida või kasutada nende Docker-kujutist: vaadake vLLMi paigaldusjuhendit.
Alustame meie mudeli testimiseks lihtsa Pythoni näite abil:
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?"))
Saate Pythoni skripti käivitada. Kui käivitate seda esimest korda, peate ootama, kuni mudel on alla laaditud ja laetud GPU-sse, seejärel saate sellise vastuse:
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 mudel on fp8-s juba kvanteeritud vLLM-i jaoks Neural Magic'i poolt, seega ei ole meil vaja kvantimist uuesti läbi viia. Me lihtsalt laadime kvanteeritud mudeli HuggingFace Hubist.
Tensor_parallel_size parameeter on määratud vastavalt meie masina GPUde arvule.
See lihtne Pythoni skript ei ole siiski korralik tootmisserver. Nüüd käivitame järelduste serveri, et tarbida paralleelselt palju päringuid ja maksimeerida läbilaskevõimet:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Kui mudel on laetud, võite käivitada teise terminali ja teha mõned päringud:
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 on tipptasemel genereeriv tehisintellekti mudel, kuid selle kasutuselevõtt tootmises ei ole lihtne.
Suurim väljakutse on leida õige riistvara. GPUd on väga kallid ja neist on ülemaailmne puudus. Aga kui teil õnnestub õige GPU hankida, on mudeli kasutuselevõtt koos vLLMi-suguse järeldusserveriga üsna lihtne.
Selliste suurte mudelite puhul võiksite kasutada kvantimist, et vähendada VRAMi kasutamist ja parandada latentsust, nagu me tegime. Kuid olge ettevaatlik: kvantimine ei ole alati hõbekuulik, sest see võib vähendada mudeli täpsust.
Kui te ei saa või ei taha LLaMA 3.1 405B-d ise kasutusele võtta, saate seda hõlpsasti kasutada NLP Cloudis ja kasutada seda suurepärast mudelit tootmises. Proovi LLaMA 3.1 405B NLP Cloudis nüüd!
Kui teil on küsimusi LLaMA 3.1 405B ja tehisintellekti kohta üldiselt, küsige meilt julgelt, meil on alati hea meel teid nõustada!
Julien
NLP Cloudi tehnoloogiajuht