LLaMA 3.1 405b je velik jezikovni model, ki ga je razvilo podjetje Meta AI in je s 405 milijardami parametrov eden največjih prosto dostopnih modelov umetne inteligence glede na velikost parametrov. Je del družine Llama 3.1, ki vključuje modele različnih velikosti (8B, 70B in 405B parametrov).
Različica 405B je še posebej opazna zaradi svojega obsega, saj želi v različnih primerjalnih testih doseči ali celo preseči zmogljivost nekaterih najboljših zaprtokodnih modelov, kot je GPT-4, kar kaže na njegove najsodobnejše zmogljivosti pri razumevanju jezika, generiranju in drugih nalogah. Modeli Llama 3.1 so zasnovani z izboljšano večjezično podporo, saj lahko razumejo in ustvarjajo besedila v več jezikih, kar razširja njihovo uporabnost v različnih regijah in bazah uporabnikov.
V tem članku prikazujemo, kako namestiti in namestiti LLaMA 3.1 405B v produkcijo v Googlovem računalniškem pogonu GCP (Google Cloud Platform). Najprej govorimo o zahtevah glede strojne opreme, nato o zagotavljanju instanc na GCP ter o namestitvi in kvantizaciji z vLLM.
Strojne zahteve za delovanje programa Llama 3.1 405B so zaradi njegove velikosti in zapletenosti precej obsežne. Kot običajno pri uvajanju mehanizmov LLM je najzahtevnejši del grafični procesor. Za namestitev tega modela boste potrebovali veliko VRAM-a (tj. pomnilnika grafičnega procesorja):
Glede na te potrebe bi si običajno ogledali nastavitve, kot so:
Kot običajno morate biti previdni pri kvantizaciji in poskrbeti, da kakovost modela ne bo preveč trpela. V našem preizkusu se zdi, da kvantizacija fp8 ne škoduje kakovosti modela, zato jo bomo uporabili v tem članku.
Google Cloud Platform (GCP) je zanimiv ponudnik za namestitev in razširjanje delovnih obremenitev umetne inteligence. So razmeroma poceni in imajo dobro ponudbo grafičnih procesorjev (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4 ...).
Prav tako so precej prilagodljivi glede izbire primerov. Na primer, instance lahko opremite z enim ali več grafičnimi procesorji H100: 1xH100, 2xH100, 4xH100 ali 8xH100.
Če je vaš račun nov, morda ne boste smeli zagotavljati instanc GPU in v tem primeru boste morali prek podpore zaprositi za povečanje kvote.
V prvem koraku boste želeli ustvariti nov projekt v sistemu GCP. Nato boste za svoj projekt omogočili vmesnik API računskega stroja. To lahko storite tako, da v konzoli GCP odprete knjižnico API in poiščete "Compute Engine". Kliknite nanj in nato kliknite "Enable" (Omogoči), da aktivirate API.
Ko omogočite API, lahko ustvarite nov primerek. To lahko storite tako, da v konzoli GCP odprete razdelek "VM instances" in kliknete "Create instance".
Nato boste morali izbrati vrsto stroja. Za LLaMA 3.1 405B v načinu fp8 boste želeli izbrati stroj a3-highgpu-1g z 8xH100 grafičnimi procesorji.
Primerek GCP za LLaMA 3.1 405B
Nato boste lahko nastavili številne podrobnosti za svoj virtualni stroj, kot so omrežje, shranjevanje itd. V tem članku ne bomo pregledali vseh teh nastavitev, temveč se bomo osredotočili na vrsto slike in shranjevanje.
Za prenos uteži modela LLaMA 3.1 405B v formatu fp8 potrebujete vsaj 500 GB prostora na disku. Priporočamo tudi, da uporabite sliko za globinsko učenje v operacijskem sistemu Linux z že nameščeno programsko opremo CUDA 12, saj vam to lahko prihrani nekaj kasnejšega dela. To lahko dosežete v razdelku "Operacijski sistem in shranjevanje":
Slika GCP in prostor na disku za LLaMA 3.1 405B
vLLM, kar pomeni Virtual Large Language Model (virtualni veliki jezikovni model), predstavlja pomemben napredek na področju umetne inteligence, zlasti pri načinu, kako se veliki jezikovni modeli (LLM) strežejo in uporabljajo za sklepanje.
vLLM je zasnovan za visoko prepustnost in nizke zakasnitve, zato je idealen za aplikacije, kjer je hitra in učinkovita obdelava jezika ključnega pomena. To dosega z inovativnimi tehnikami, kot je PagedAttention, ki optimizira porabo pomnilnika z učinkovitejšim upravljanjem ključa pozornosti in pomnilnika vrednosti, kar omogoča do 24-krat večjo prepustnost v primerjavi s tradicionalnimi metodami, kot so HuggingFace Transformers.
Bistvo učinkovitosti vLLM je v upravljanju pomnilnika. Z uporabo PagedAttention vLLM razdeli predpomnilnik ključ-vrednost (KV) na bloke, kar omogoča boljšo izkoriščenost pomnilnika in zmanjša razdrobljenost, ki je pogosto ozko grlo pri uporabi pomnilnika GPU za LLM. Ta pristop ne le pospešuje obdelavo, temveč omogoča tudi hkratno obdelavo več zahtevkov brez znatnega padca zmogljivosti.
Kot mehanizem za sklepanje in serviranje se vLLM osredotoča ne le na izvajanje mehanizmov LLM, temveč tudi na način, ki omogoča čim večjo izkoriščenost virov. Uporablja tehnike, kot je neprekinjeno združevanje prejetih zahtevkov, ki zagotavlja, da je grafični procesor v celoti izkoriščen, s čimer se skrajša čas mirovanja in poveča splošna učinkovitost.
vLLM podpira različne tehnike kvantizacije (kot so GPTQ, AWQ, INT4, INT8, FP8), ki zmanjšujejo natančnost modelskih uteži, s čimer zmanjšujejo porabo pomnilnika in morda pospešujejo sklepanje.
Namestitev vLLM je razmeroma preprosta. Povežimo se z našim primerkom VM GCP in namestimo vLLM s pipom:
pip install vllm
Porazdeljeno sklepanje bomo izvajali na 8 grafičnih procesorjih H100, zato moramo namestiti tudi Ray:
pip install ray
Če imate pri namestitvi vLLM težave z združljivostjo, bo morda enostavneje, če vLLM sestavite iz izvorne kode ali uporabite njihovo sliko Docker: si oglejte navodila za namestitev vLLM.
Začnimo z osnovnim primerom Pythona, s katerim bomo preizkusili naš 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?"))
Skripto Python lahko zaženete. Če jo zaženete prvič, boste morali počakati, da se model prenese in naloži na grafični procesor, nato pa boste prejeli takšen odgovor:
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.
Model LLaMA 3.1 405B je bil že kvantiziran v fp8 za vLLM s programom Neural Magic, zato nam kvantizacije ni treba ponovno izvajati. Kvantizirani model preprosto naložimo iz vozlišča HuggingFace.
Parameter tensor_parallel_size je nastavljen glede na število grafičnih procesorjev, ki jih imamo na našem računalniku.
Ta preprosta skripta Python pa ni pravi produkcijski strežnik. Zdaj bomo zagnali inferenčni strežnik, da bomo lahko vzporedno porabili veliko zahtevkov in povečali prepustnost:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Ko je model naložen, lahko zaženete drugi terminal in opravite nekaj zahtev:
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 je vrhunski generativni model umetne inteligence, vendar njegova uporaba v produkciji ni enostavna.
Največji izziv je najti pravo strojno opremo. Grafični procesorji so zelo dragi in po vsem svetu jih primanjkuje. Toda ko vam uspe zagotoviti prave grafične procesorje, je namestitev modela z inferenčnim strežnikom, kot je vLLM, precej enostavna.
Pri tako velikih modelih boste morda želeli uporabiti kvantizacijo, da zmanjšate porabo pomnilnika VRAM in izboljšate zakasnitev, kot smo to storili mi. Vendar bodite previdni: kvantizacija ni vedno pravi način, saj lahko zmanjša natančnost modela.
Če LLaMA 3.1 405B ne morete ali ne želite namestiti sami, ga lahko preprosto uporabite v oblaku NLP Cloud in ta odličen model uporabite v velikem obsegu v produkciji. Preizkusite LLaMA 3.1 405B na NLP Cloud zdaj!
Če imate vprašanja o LLaMA 3.1 405B in umetni inteligenci na splošno, nas brez oklevanja vprašajte, vedno vam z veseljem svetujemo!
Julien
Tehnični direktor v podjetju NLP Cloud