A LLaMA 3.1 405B telepítése és telepítése a termelésbe a GCP Compute Engine-en

A LLaMA 3.1 405b a Meta AI által kifejlesztett nagyméretű nyelvi modell, amely a paraméterek méretét tekintve az egyik legnagyobb nyíltan elérhető mesterséges intelligencia modell, 405 milliárd paraméterrel. A modell a Llama 3.1 család része, amely különböző méretű modelleket tartalmaz (8B, 70B és 405B paraméteres).

A 405B verzió különösen figyelemre méltó a méretarányossága miatt, mivel a különböző benchmarkokban a GPT-4-hez hasonló zárt forráskódú csúcsmodellek teljesítményét igyekszik elérni vagy akár felülmúlni, jelezve a nyelvi megértés, generálás és egyéb feladatok terén mutatott legmodernebb képességeit. A Llama 3.1 modelleket továbbfejlesztett többnyelvű támogatással tervezték, amelyek több nyelven képesek szöveget megérteni és generálni, ami szélesíti alkalmazhatóságát a különböző régiókban és felhasználói bázisokon.

Ebben a cikkben bemutatjuk, hogyan telepítheti és telepítheti a LLaMA 3.1 405B-t a Google Cloud Platform (GCP) Compute Engine-en. Először a hardverkövetelményekről, majd a példányok GCP-n való rendelkezésre bocsátásáról, valamint a vLLM-mel történő telepítésről és kvantálásról beszélünk.

LLaMA 3.1 405B

LLaMA 3.1 405B: hardverkövetelmények

A Llama 3.1 405B futtatásának hardverigénye a méretéből és összetettségéből adódóan meglehetősen nagy. Ahogy az LLM-ek telepítésekor szokás, a legösszetettebb rész a GPU. A modell telepítéséhez sok VRAM-ra (azaz GPU-memóriára) lesz szükség:

Ezen igények alapján jellemzően a következő beállításokat nézzük:

Mint mindig, most is óvatosnak kell lenned a kvantálással, és ügyelned kell arra, hogy a modell minősége ne szenvedjen túl nagy csorbát. A mi tesztünkben az fp8 kvantálás nem látszik rontani a modell minőségét, ezért ebben a cikkben ezt fogjuk használni.

Egy példány létrehozása a LLaMA 3.1 405B számára a GCP Compute Engine-en

A Google Cloud Platform (GCP) érdekes szolgáltató az AI-munkaterhelések telepítéséhez és skálázásához. Viszonylag olcsók és jó GPU-kínálattal rendelkeznek (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).

A példányválasztás tekintetében is meglehetősen rugalmasak. Például egy vagy több H100 GPU-val is biztosíthat példányokat: 1xH100, 2xH100, 4xH100 vagy 8xH100.

Előfordulhat, hogy nem engedélyezik a GPU-példányok biztosítását, ha a fiókod új, és ha ez a helyzet, akkor a támogatáson keresztül kell kérned a kvóta növelését.

Első lépésként hozzon létre egy új projektet a GCP-n. Ezután engedélyezni kell a Compute Engine API-t a projekthez. Ezt úgy teheti meg, hogy a GCP-konzolban az API-könyvtárba lép, és rákeres a "Compute Engine" kifejezésre. Kattintson rá, majd az "Enable" (Engedélyezés) gombra az API aktiválásához.

Miután engedélyezte az API-t, új példányt hozhat létre. Ezt úgy teheti meg, hogy a GCP konzol "VM példányok" szakaszába lép, és a "Példa létrehozása" gombra kattint.

Ezután megkérjük, hogy válasszon egy géptípust. Az LLaMA 3.1 405B fp8 módban történő használatához egy a3-highgpu-1g gépet kell választania 8xH100 GPU-val.

GCP-példány a LLaMA 3.1 405B számára GCP-példány a LLaMA 3.1 405B számára

Ezután számos részletet be kell tudnia állítani a VM-hez, mint például a hálózat, tárolás stb. Ebben a cikkben nem fogjuk ezeket a beállításokat mind áttekinteni, hanem a kép típusára és a tárolásra fogunk koncentrálni.

A LLaMA 3.1 405B modell súlyok fp8 formátumban történő letöltéséhez legalább 500 GB lemezterületre lesz szükséged. Azt is javasoljuk, hogy használjon egy olyan Linux Deep Learning image-et, amelyre már telepítve van a CUDA 12, mivel ez a későbbiekben némi munkát takaríthat meg. Ezt az "Operációs rendszer és tárolás" részben érheti el:

GCP-kép és lemezterület a LLaMA 3.1 számára 405B 405B GCP-kép és lemezterület a LLaMA 3.1 számára 405B 405B

A vLLM telepítése

A vLLM, ami a Virtual Large Language Model rövidítése, jelentős előrelépést jelent a mesterséges intelligencia területén, különösen a nagy nyelvi modellek (LLM) kiszolgálásának és következtetésre való felhasználásának módjában.

A vLLM-et nagy átviteli teljesítményű és alacsony késleltetésű következtetésekre tervezték, így ideális olyan alkalmazásokhoz, ahol a gyors és hatékony nyelvi feldolgozás kulcsfontosságú. Ezt olyan innovatív technikákkal éri el, mint a PagedAttention, amely a figyelemkulcs és az értékmemória hatékonyabb kezelésével optimalizálja a memóriahasználatot, így akár 24x nagyobb átbocsátási sebességet tesz lehetővé a hagyományos módszerekhez, például az HuggingFace Transformershez képest.

A vLLM hatékonyságának lényege a memóriakezelésben rejlik. A PagedAttention használatával a vLLM blokkokra osztja a kulcs-érték (KV) gyorsítótárat, ami jobb memóriahasználatot tesz lehetővé, és csökkenti a töredezettséget, ami az LLM-ek GPU-memóriahasználatának gyakori szűk keresztmetszete. Ez a megközelítés nemcsak a feldolgozást gyorsítja fel, hanem lehetővé teszi több kérés egyidejű kezelését is jelentős teljesítménycsökkenés nélkül.

Következtető és kiszolgáló motorként a vLLM nem csak az LLM-ek futtatására összpontosít, hanem arra is, hogy ezt úgy tegye, hogy az erőforrás-kihasználtságot maximalizálja. Olyan technikákat alkalmaz, mint a bejövő kérések folyamatos kötegelése, amely biztosítja, hogy a GPU teljes mértékben kihasználva maradjon, ezáltal csökkentve az üresjárati időket és növelve az általános hatékonyságot.

A vLLM támogatja a különböző kvantálási technikákat (például GPTQ, AWQ, INT4, INT8, FP8), amelyek csökkentik a modell súlyainak pontosságát, ezáltal csökkentve a memóriahasználatot és potenciálisan felgyorsítva a következtetést.

A vLLM telepítése viszonylag egyszerű. Csatlakozzunk a GCP VM-példányunkhoz, és telepítsük a vLLM-et a pip segítségével:

pip install vllm

8 x H100 GPU-n fogunk elosztott következtetést végezni, ezért a Ray-t is telepítenünk kell:

pip install ray

Ha a vLLM telepítése során kompatibilitási problémákat tapasztal, egyszerűbb lehet a vLLM-et a forrásból fordítani, vagy a Docker-képüket használni: nézze meg a vLLM telepítési útmutatóját.

Következtetési kiszolgáló a LLaMA 3.1 405B számára

Kezdjük egy egyszerű Python példával, hogy teszteljük a modellünket:

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

Futtathatja a Python szkriptet. Ha most futtatja először, meg kell várnia, amíg a modell letöltődik és betöltődik a GPU-ra, majd egy ehhez hasonló választ kap:

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. 

Az LLaMA 3.1 405B modellt a Neural Magic már kvantálta az fp8-ban a vLLM számára, így nem kell újra elvégeznünk a kvantálást. A kvantált modellt egyszerűen betöltjük az HuggingFace Hubból.

A tensor_parallel_size paramétert a gépünkön található GPU-k számának megfelelően állítjuk be.

Ez az egyszerű Python szkript azonban nem egy megfelelő termelési szerver. Most elindítjuk a következtetési kiszolgálót, hogy sok kérést párhuzamosan fogyasszunk, és maximalizáljuk az átviteli teljesítményt:

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

Ha a modell betöltődött, elindíthat egy második terminált, és kérhet néhány kérést:

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

Következtetés

A LLaMA 3.1 405B egy élvonalbeli generatív mesterséges intelligenciamodell, de nem könnyű a termelésbe való bevezetése.

A legnagyobb kihívást a megfelelő hardver megtalálása jelenti. A GPU-k nagyon drágák, és világszerte hiány van belőlük. Ha azonban sikerül a megfelelő GPU-kat biztosítani, a modell telepítése egy olyan következtetési szerverrel, mint a vLLM, meglehetősen egyszerű.

Ilyen nagy modellek esetén érdemes kihasználni a kvantálást a VRAM-használat csökkentése és a késleltetés javítása érdekében, ahogy mi is tettük. De vigyázzon: a kvantálás nem mindig jelent ezüstgolyót, mivel csökkentheti a modell pontosságát.

Ha nem tudja vagy nem akarja saját maga telepíteni a LLaMA 3.1 405B-t, akkor könnyedén használhatja az NLP Cloudon, és kihasználhatja ezt a nagyszerű modellt a termelésben. Próbáld ki a LLaMA 3.1 405B-t az NLP Cloudon most!

Ha kérdése van a LLaMA 3.1 405B-vel és általában a mesterséges intelligenciával kapcsolatban, kérjük, ne habozzon kérdezni, mindig örömmel adunk tanácsot!

Julien
CTO az NLP Cloudnál