LLaMA 3.1 405b on Meta AI:n kehittämä suuri kielimalli, joka on yksi suurimmista avoimesti saatavilla olevista tekoälymalleista parametrien koon suhteen, sillä siinä on 405 miljardia parametria. Se on osa Llama 3.1 -perhettä, joka sisältää erikokoisia malleja (8B, 70B ja 405B parametria).
405B-versio on erityisen merkittävä mittakaavansa vuoksi, sillä se pyrkii saavuttamaan tai jopa ylittämään joidenkin suljetun lähdekoodin huippumallien, kuten GPT-4:n, suorituskyvyn eri vertailuanalyyseissä, mikä osoittaa sen huipputason kyvyt kielen ymmärtämisessä, generoinnissa ja muissa tehtävissä. Llama 3.1 -mallit on suunniteltu tehostetulla monikielisyystuella, ja ne kykenevät ymmärtämään ja tuottamaan tekstiä useilla eri kielillä, mikä laajentaa niiden sovellettavuutta eri alueilla ja eri käyttäjäkunnissa.
Tässä artikkelissa näytämme, miten LLaMA 3.1 405B asennetaan ja otetaan käyttöön tuotannossa Google Cloud Platform (GCP) Compute Engine -palvelussa. Puhumme ensin laitteistovaatimuksista, sitten instanssin tarjoamisesta GCP:ssä ja käyttöönotosta ja kvantisoinnista vLLM:n avulla.
Llama 3.1 405B:n käyttämiseen tarvittavat laitteistovaatimukset ovat melko laajat sen koon ja monimutkaisuuden vuoksi. Kuten tavallista LLM:ien käyttöönotossa, monimutkaisin osa on näytönohjain. Tarvitset paljon VRAM-muistia (eli näytönohjaimen muistia) tämän mallin käyttöönottoon:
Näihin tarpeisiin nähden tarkastellaan tyypillisesti seuraavanlaisia kokoonpanoja:
Kuten tavallista, sinun on oltava varovainen kvantisoinnin suhteen ja varmistettava, että mallin laatu ei kärsi liikaa. Testissämme fp8-kvantisointi ei näytä heikentävän mallin laatua, joten käytämme sitä tässä artikkelissa.
Google Cloud Platform (GCP) on mielenkiintoinen palveluntarjoaja tekoälyn työmäärän käyttöönottoon ja skaalaamiseen. Ne ovat suhteellisen edullisia ja niillä on hyvä GPU-tarjonta (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Ne ovat myös varsin joustavia instanssivalintojen suhteen. Voit esimerkiksi tarjota instansseja, joissa on yksi tai useampi H100-grafiikkaohjain: 1xH100, 2xH100, 4xH100 tai 8xH100.
Jos tilisi on uusi, et ehkä saa tarjota GPU-instansseja, ja jos näin on, sinun on pyydettävä tuen kautta kiintiön lisäämistä.
Ensimmäiseksi haluat luoda uuden projektin GCP:hen. Sitten haluat ottaa Compute Engine API:n käyttöön projektissasi. Voit tehdä tämän menemällä API-kirjastoon GCP-konsolissa ja etsimällä "Compute Engine". Napsauta sitä ja sitten "Enable" (Ota käyttöön) API:n aktivoimiseksi.
Kun olet ottanut API:n käyttöön, voit luoda uuden instanssin. Voit tehdä tämän menemällä GCP-konsolin "VM instances" -osioon ja napsauttamalla "Create instance".
Tämän jälkeen sinua pyydetään valitsemaan konetyyppi. LLaMA 3.1 405B:n fp8-tilassa on valittava a3-highgpu-1g-kone, jossa on 8xH100 GPU:ta.
GCP-instanssi LLaMA 3.1:lle 405B 405B
Tämän jälkeen sinun on voit määrittää monia VM:n yksityiskohtia, kuten verkkoyhteydet, tallennustilat jne. Emme aio tarkastella kaikkia näitä asetuksia tässä artikkelissa, vaan keskitymme kuvatyyppiin ja tallennustilaan.
Jotta voit ladata LLaMA 3.1 405B -mallin painot fp8-muodossa, tarvitset vähintään 500 Gt levytilaa. Suosittelemme myös, että käytät Linux Deep Learning -kuvaa, jossa CUDA 12 on jo asennettu, sillä se voi säästää työtä myöhemmin. Voit saavuttaa sen kohdassa "Käyttöjärjestelmä ja tallennus":
GCP-kuva ja levytila LLaMA 3.1:lle 405B 405B
vLLM on lyhenne sanoista Virtual Large Language Model (virtuaalinen suuri kielimalli), ja se on merkittävä edistysaskel tekoälyn alalla, erityisesti siinä, miten suuria kielimalleja (LLM) käytetään ja hyödynnetään päättelyssä.
vLLM on suunniteltu korkean läpimenon ja alhaisen viiveen johtopäätöksiin, joten se sopii erinomaisesti sovelluksiin, joissa nopea ja tehokas kielenkäsittely on ratkaisevan tärkeää. Se saavuttaa tämän innovatiivisilla tekniikoilla, kuten PagedAttention, joka optimoi muistin käytön hallinnoimalla huomioavainta ja arvomuistia tehokkaammin, mikä mahdollistaa jopa 24-kertaisen läpimenon verrattuna perinteisiin menetelmiin, kuten HuggingFace Transformersiin.
vLLM:n tehokkuuden ydin on sen muistinhallinnassa. Käyttämällä PagedAttentionia vLLM jakaa avain-arvovälimuistin (KV) lohkoihin, mikä mahdollistaa paremman muistin käytön ja vähentää pirstaloitumista, joka on yleinen pullonkaula LLM:n GPU-muistin käytössä. Tämä lähestymistapa paitsi nopeuttaa käsittelyä myös mahdollistaa useampien pyyntöjen samanaikaisen käsittelyn ilman merkittävää suorituskyvyn laskua.
Päättely- ja palvelumoottorina vLLM keskittyy LLM:n suorittamisen lisäksi myös siihen, että resurssien käyttö maksimoidaan. Se käyttää tekniikoita, kuten saapuvien pyyntöjen jatkuvaa panostamista, jolla varmistetaan, että näytönohjain pysyy täydessä käytössä, jolloin tyhjäkäyntiajat lyhenevät ja kokonaistehokkuus kasvaa.
vLLM tukee erilaisia kvantisointitekniikoita (kuten GPTQ, AWQ, INT4, INT8, FP8), jotka vähentävät mallipainojen tarkkuutta, mikä vähentää muistin käyttöä ja mahdollisesti nopeuttaa päättelyä.
vLLM:n asentaminen on suhteellisen helppoa. Otetaan yhteys GCP VM-instanssiin ja asennetaan vLLM pipin avulla:
pip install vllm
Suoritamme hajautettua päättelyä 8 x H100-grafiikkasuorittimella, joten meidän on asennettava myös Ray:
pip install ray
Jos havaitset yhteensopivuusongelmia vLLM:ää asentaessasi, voi olla yksinkertaisempaa kääntää vLLM lähdekoodista tai käyttää niiden Docker-kuvaa: tutustu vLLM:n asennusohjeisiin.
Aloitetaan Python-ohjelmalla, jossa testataan malliamme:
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?"))
Voit suorittaa Python-skriptin. Jos suoritat sen ensimmäistä kertaa, sinun on odotettava, että malli ladataan ja ladataan näytönohjaimeen, minkä jälkeen saat tämän kaltaisen vastauksen:
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 -malli on jo kvantisoitu fp8:ssa vLLM:lle Neural Magicin toimesta, joten meidän ei tarvitse tehdä kvantisointia uudelleen. Lataamme yksinkertaisesti kvantisoidun mallin HuggingFace Hubista.
Parametri tensor_parallel_size asetetaan sen mukaan, kuinka monta GPU:ta koneessamme on.
Tämä yksinkertainen Python-skripti ei kuitenkaan ole varsinainen tuotantopalvelin. Käynnistämme nyt päättelypalvelimen, jotta voimme kuluttaa useita pyyntöjä rinnakkain ja maksimoida läpimenon:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Kun malli on ladattu, voit käynnistää toisen päätelaitteen ja tehdä joitakin pyyntöjä:
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 huippuluokan generatiivinen tekoälymalli, mutta sen käyttöönotto tuotannossa ei ole helppoa.
Suurin haaste on oikean laitteiston löytäminen. Näytönohjaimet ovat hyvin kalliita, ja niistä on maailmanlaajuinen pula. Mutta kun oikeat näytönohjaimet on saatu hankittua, mallin käyttöönotto vLLM:n kaltaisella päättelypalvelimella on melko helppoa.
Näin suurissa malleissa kannattaa ehkä hyödyntää kvantisointia VRAMin käytön vähentämiseksi ja viiveen parantamiseksi, kuten me teimme. Ole kuitenkin varovainen: kvantisointi ei ole aina hopealuoti, sillä se voi heikentää mallin tarkkuutta.
Jos et voi tai halua ottaa LLaMA 3.1 405B:tä käyttöön itse, voit helposti käyttää sitä NLP Cloudissa ja hyödyntää tätä loistavaa mallia tuotannossa. Kokeile LLaMA 3.1 405B NLP Cloudissa nyt!
Jos sinulla on kysyttävää LLaMA 3.1 405B:stä ja tekoälystä yleensä, älä epäröi kysyä meiltä, on aina ilo neuvoa!
Julien
teknologiajohtaja, NLP Cloud