LLaMA 3.1 405b je velký jazykový model vyvinutý společností Meta AI, který představuje jeden z největších otevřeně dostupných modelů umělé inteligence, pokud jde o velikost parametrů, s 405 miliardami parametrů. Je součástí rodiny Llama 3.1, která zahrnuje modely různých velikostí (8B, 70B a 405B parametrů).
Verze 405B je pozoruhodná zejména svým rozsahem, který se snaží vyrovnat nebo dokonce překonat výkon některých špičkových modelů s uzavřeným zdrojovým kódem, jako je GPT-4, v různých benchmarcích, což svědčí o jeho nejmodernějších schopnostech v oblasti porozumění jazyku, generování a dalších úlohách. Modely Llama 3.1 jsou navrženy s rozšířenou vícejazyčnou podporou, jsou schopny chápat a generovat text ve více jazycích, což rozšiřuje jejich použitelnost v různých regionech a uživatelských základnách.
V tomto článku si ukážeme, jak nainstalovat a nasadit LLaMA 3.1 405B do produkčního provozu na platformě Google Cloud Platform (GCP) Compute Engine. Nejprve si povíme něco o hardwarových požadavcích, poté o poskytování instancí na GCP a o nasazení a kvantifikaci pomocí vLLM.
Hardwarové požadavky na provoz systému Llama 3.1 405B jsou vzhledem k jeho velikosti a složitosti poměrně rozsáhlé. Jak je při nasazování LLM obvyklé, nejsložitější částí je GPU. K nasazení tohoto modelu budete potřebovat velké množství VRAM (tj. paměti GPU):
Vzhledem k těmto potřebám byste se obvykle měli zaměřit na nastavení, jako jsou:
Jako obvykle je třeba dávat pozor na kvantizaci a dbát na to, aby kvalita modelu příliš neutrpěla. V našem testu se zdá, že kvantizace fp8 kvalitě modelu nijak neškodí, proto ji budeme používat i v tomto článku.
Google Cloud Platform (GCP) je zajímavý poskytovatel pro nasazení a škálování pracovních zátěží s umělou inteligencí. Jsou relativně levní a mají dobrou nabídku GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Jsou také poměrně flexibilní, pokud jde o výběr instance. Můžete například zajistit instance s jedním nebo více grafickými procesory H100: Můžete si vybrat z následujících možností: 1xH100, 2xH100, 4xH100 nebo 8xH100.
Pokud je váš účet nový, možná nebudete moci poskytovat instance GPU a v takovém případě budete muset požádat o zvýšení kvóty prostřednictvím podpory.
V prvním kroku budete chtít vytvořit nový projekt v systému GCP. Poté budete chtít pro svůj projekt povolit rozhraní Compute Engine API. To provedete tak, že v konzole GCP přejdete do knihovny API a vyhledáte položku "Compute Engine". Klikněte na něj a poté kliknutím na "Enable" aktivujte rozhraní API.
Po povolení rozhraní API budete moci vytvořit novou instanci. To provedete tak, že v konzole GCP přejdete do sekce "VM instances" a kliknete na "Create instance".
Poté budete vyzváni k výběru typu stroje. Pro LLaMA 3.1 405B v režimu fp8 budete chtít vybrat stroj a3-highgpu-1g s 8xH100 GPU.
Instance GCP pro LLaMA 3.1 405B
Poté budete moci nastavit mnoho podrobností pro váš virtuální počítač, jako je síť, úložiště atd. V tomto článku se nebudeme zabývat všemi těmito nastaveními, ale zaměříme se na typ obrazu a úložiště.
Pro stažení modelových vah LLaMA 3.1 405B ve formátu fp8 potřebujete alespoň 500 GB místa na disku. Doporučujeme také použít obraz systému Linux Deep Learning s již nainstalovanou aplikací CUDA 12, protože vám to může později ušetřit práci. Toho můžete dosáhnout v části "Operační systém a úložiště":
Obraz GCP a místo na disku pro LLaMA 3.1 405B
vLLM, což je zkratka pro Virtual Large Language Model, představuje významný pokrok v oblasti umělé inteligence, zejména v tom, jak jsou velké jazykové modely (LLM) obsluhovány a využívány pro odvozování.
Systém vLLM je navržen pro vysoce výkonné a nízko zpožděné odvozování závěrů, takže je ideální pro aplikace, kde je rychlé a efektivní zpracování jazyka klíčové. Toho dosahuje díky inovativním technikám, jako je PagedAttention, která optimalizuje využití paměti tím, že efektivněji spravuje paměť klíčů pozornosti a hodnot, což umožňuje až 24x vyšší propustnost ve srovnání s tradičními metodami, jako jsou HuggingFace Transformers.
Jádro efektivity vLLM spočívá ve správě paměti. Pomocí funkce PagedAttention rozděluje vLLM mezipaměť klíč-hodnota (KV) do bloků, což umožňuje lepší využití paměti a snižuje fragmentaci, která je častým úzkým místem při využívání paměti GPU pro LLM. Tento přístup nejen zrychluje zpracování, ale také umožňuje zpracovávat více požadavků současně bez výrazného poklesu výkonu.
Jako inferenční a obslužný engine se vLLM zaměřuje nejen na spouštění LLM, ale také na to, aby maximalizoval využití zdrojů. Používá techniky, jako je průběžné dávkování příchozích požadavků, které zajišťuje, že GPU zůstává plně využitý, čímž se snižuje doba nečinnosti a zvyšuje celková efektivita.
vLLM podporuje různé techniky kvantizace (například GPTQ, AWQ, INT4, INT8, FP8), které snižují přesnost vah modelu, čímž snižují spotřebu paměti a potenciálně zrychlují odvozování.
Instalace vLLM je poměrně snadná. Připojíme se k naší instanci virtuálního počítače GCP a nainstalujeme vLLM pomocí pip:
pip install vllm
Distribuovanou inferenci budeme provádět na 8 x H100 GPU, takže musíme nainstalovat také Ray:
pip install ray
Pokud se při instalaci vLLM vyskytnou problémy s kompatibilitou, může být jednodušší zkompilovat vLLM ze zdrojových kódů nebo použít jejich obraz Docker: podívejte se na návod k instalaci vLLM.
Začněme základním příkladem v jazyce Python, na kterém otestujeme náš 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?"))
Můžete spustit skript Python. Pokud jej spouštíte poprvé, musíte počkat, až se model stáhne a načte na GPU, a pak se zobrazí tato odpověď:
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 byl již kvantifikován v programu fp8 pro vLLM programem Neural Magic, takže kvantizaci nemusíme provádět znovu. Jednoduše načteme kvantizovaný model z rozbočovače HuggingFace.
Parametr tensor_parallel_size je nastaven podle počtu grafických procesorů, které máme na našem počítači.
Tento jednoduchý skript v jazyce Python však není správným produkčním serverem. Nyní spustíme inferenční server, abychom mohli spotřebovávat mnoho požadavků paralelně a maximalizovat propustnost:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Po načtení modelu můžete spustit druhý terminál a zadat několik požadavků:
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 špičkový generativní model umělé inteligence, ale jeho nasazení do výroby není snadné.
Největší výzvou je najít správný hardware. GPU jsou velmi drahé a je jich celosvětový nedostatek. Ale jakmile se podaří zajistit správné GPU, je nasazení modelu s inferenčním serverem, jako je vLLM, poměrně snadné.
U takto rozsáhlých modelů byste mohli chtít využít kvantizaci, abyste snížili využití paměti VRAM a zlepšili latenci, jako jsme to udělali my. Buďte však opatrní: kvantizace není vždy stříbrnou kulkou, protože může snížit přesnost modelu.
Pokud nemůžete nebo nechcete nasadit LLaMA 3.1 405B sami, můžete jej snadno použít v NLP Cloud a využít tento skvělý model v produkčním měřítku. Vyzkoušejte si LLaMA 3.1 405B na NLP Cloud!
Pokud máte dotazy k LLaMA 3.1 405B a AI obecně, neváhejte se nás zeptat, vždy vám rádi poradíme!
Julien
Technický ředitel společnosti NLP Cloud