LLaMA 3.1 405b to duży model językowy opracowany przez Meta AI, reprezentujący jeden z największych ogólnodostępnych modeli sztucznej inteligencji pod względem wielkości parametrów, z 405 miliardami parametrów. Jest on częścią rodziny Llama 3.1, która obejmuje modele o różnych rozmiarach (8B, 70B i 405B parametrów).
Wersja 405B jest szczególnie godna uwagi ze względu na swoją skalę, dążąc do dorównania lub nawet przewyższenia wydajności niektórych z najlepszych modeli o zamkniętym kodzie źródłowym, takich jak GPT-4, w różnych testach porównawczych, wskazując na jego najnowocześniejsze możliwości w zakresie rozumienia języka, generowania i innych zadań. Modele Llama 3.1 zostały zaprojektowane z ulepszonym wsparciem wielojęzycznym, zdolnym do rozumienia i generowania tekstu w wielu językach, co poszerza ich zastosowanie w różnych regionach i bazach użytkowników.
W tym artykule pokazujemy, jak zainstalować i wdrożyć LLaMA 3.1 405B w środowisku produkcyjnym na platformie Google Cloud Platform (GCP) Compute Engine. Najpierw omówimy wymagania sprzętowe, a następnie udostępnianie instancji na GCP oraz wdrażanie i kwantyzację za pomocą vLLM.
Wymagania sprzętowe do uruchomienia Llama 3.1 405B są dość duże ze względu na jego rozmiar i złożoność. Jak zwykle przy wdrażaniu LLM, najbardziej złożoną częścią jest GPU. Do wdrożenia tego modelu potrzebna będzie duża ilość pamięci VRAM (tj. pamięci GPU):
Biorąc pod uwagę te potrzeby, zazwyczaj należy przyjrzeć się takim konfiguracjom:
Jak zwykle, należy uważać na kwantyzację i upewnić się, że jakość modelu nie ucierpi zbytnio. W naszym teście kwantyzacja fp8 nie wydaje się szkodzić jakości modelu, więc użyjemy jej w tym artykule.
Google Cloud Platform (GCP) jest interesującym dostawcą do wdrażania i skalowania obciążeń AI. Są one stosunkowo tanie i mają dobrą ofertę GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Są one również dość elastyczne pod względem wyboru instancji. Przykładowo, można zapewnić instancje z jednym lub większą liczbą układów GPU H100: 1xH100, 2xH100, 4xH100 lub 8xH100.
Może się jednak zdarzyć, że nie będziesz mógł udostępniać instancji GPU, jeśli twoje konto jest nowe, a jeśli tak jest, będziesz musiał skontaktować się z pomocą techniczną, aby poprosić o zwiększenie limitu.
Pierwszym krokiem będzie utworzenie nowego projektu na GCP. Następnie należy włączyć interfejs API Compute Engine dla swojego projektu. Możesz to zrobić, przechodząc do biblioteki API w konsoli GCP i wyszukując "Compute Engine". Kliknij na nią, a następnie kliknij "Enable", aby aktywować API.
Po włączeniu interfejsu API będzie można utworzyć nową instancję. Możesz to zrobić, przechodząc do sekcji "Instancje maszyn wirtualnych" w konsoli GCP i klikając "Utwórz instancję".
Następnie zostaniesz poproszony o wybranie typu maszyny. W przypadku LLaMA 3.1 405B w trybie fp8 należy wybrać maszynę a3-highgpu-1g z 8 procesorami graficznymi H100.
Wystąpienie GCP dla LLaMA 3.1 405B
Będziesz wtedy musiał ustawić wiele szczegółów dla swojej maszyny wirtualnej, takich jak sieć, pamięć masowa itp. Nie będziemy przeglądać wszystkich tych ustawień w tym artykule, ale skupimy się na typie obrazu i pamięci masowej.
Aby pobrać wagi modelu LLaMA 3.1 405B w formacie fp8, potrzebne będzie co najmniej 500 GB miejsca na dysku. Zalecamy również użycie obrazu Linux Deep Learning z już zainstalowanym CUDA 12, ponieważ może to zaoszczędzić trochę pracy później. Można to osiągnąć w sekcji "System operacyjny i pamięć masowa":
Obraz GCP i miejsce na dysku dla LLaMA 3.1 405B
vLLM, skrót od Virtual Large Language Model, stanowi znaczący postęp w dziedzinie sztucznej inteligencji, w szczególności w sposobie, w jaki duże modele językowe (LLM) są obsługiwane i wykorzystywane do wnioskowania.
vLLM został zaprojektowany z myślą o wysokiej przepustowości i niskim opóźnieniu wnioskowania, dzięki czemu idealnie nadaje się do zastosowań, w których kluczowe znaczenie ma szybkie i wydajne przetwarzanie języka. Osiąga to dzięki innowacyjnym technikom, takim jak PagedAttention, która optymalizuje wykorzystanie pamięci poprzez bardziej efektywne zarządzanie kluczem uwagi i pamięcią wartości, umożliwiając nawet 24-krotnie wyższą przepustowość w porównaniu do tradycyjnych metod, takich jak HuggingFace Transformers.
Podstawą wydajności vLLM jest zarządzanie pamięcią. Wykorzystując PagedAttention, vLLM dzieli pamięć podręczną klucz-wartość (KV) na bloki, co pozwala na lepsze wykorzystanie pamięci i redukuje fragmentację, która jest częstym wąskim gardłem w wykorzystaniu pamięci GPU przez LLM. Takie podejście nie tylko przyspiesza przetwarzanie, ale także pozwala na jednoczesną obsługę większej liczby żądań bez znaczących spadków wydajności.
Jako silnik wnioskowania i serwowania, vLLM koncentruje się nie tylko na uruchamianiu LLM, ale także na robieniu tego w sposób maksymalizujący wykorzystanie zasobów. Wykorzystuje on takie techniki jak ciągłe grupowanie przychodzących żądań, co zapewnia pełne wykorzystanie GPU, skracając tym samym czas bezczynności i zwiększając ogólną wydajność.
vLLM obsługuje różne techniki kwantyzacji (takie jak GPTQ, AWQ, INT4, INT8, FP8), które zmniejszają precyzję wag modelu, zmniejszając w ten sposób zużycie pamięci i potencjalnie przyspieszając wnioskowanie.
Instalacja vLLM jest stosunkowo prosta. Połączmy się z naszą instancją GCP VM i zainstalujmy vLLM za pomocą pip:
pip install vllm
Zamierzamy przeprowadzić rozproszone wnioskowanie na 8 procesorach graficznych H100, więc musimy również zainstalować Ray:
pip install ray
Jeśli podczas instalacji vLLM wystąpią problemy z kompatybilnością, prostszym rozwiązaniem może być skompilowanie vLLM ze źródła lub użycie obrazu Docker: Zapoznaj się z instrukcją instalacji vLLM.
Zacznijmy od podstawowego przykładu w Pythonie, aby przetestować nasz 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?"))
Możesz uruchomić skrypt Python. Jeśli uruchamiasz go po raz pierwszy, będziesz musiał poczekać, aż model zostanie pobrany i załadowany na GPU, a następnie otrzymasz odpowiedź w następujący sposób:
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 został już skwantyzowany w fp8 dla vLLM przez Neural Magic, więc nie musimy ponownie przeprowadzać kwantyzacji. Po prostu ładujemy skwantyzowany model z HuggingFace Hub.
Parametr tensor_parallel_size jest ustawiany zgodnie z liczbą procesorów graficznych, które posiadamy na naszej maszynie.
Ten prosty skrypt Pythona nie jest jednak właściwym serwerem produkcyjnym. Teraz uruchomimy serwer wnioskowania w celu równoległego wykorzystania wielu żądań i zmaksymalizowania przepustowości:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Po załadowaniu modelu można uruchomić drugi terminal i wykonać kilka żądań:
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 to najnowocześniejszy model generatywnej sztucznej inteligencji, ale wdrożenie go do produkcji nie jest łatwe.
Największym wyzwaniem jest znalezienie odpowiedniego sprzętu. Układy GPU są bardzo kosztowne i występuje ich globalny niedobór. Ale gdy już uda się zapewnić odpowiednie układy GPU, wdrożenie modelu za pomocą serwera wnioskowania, takiego jak vLLM, jest dość łatwe.
W przypadku tak dużych modeli warto wykorzystać kwantyzację, aby zmniejszyć zużycie pamięci VRAM i poprawić opóźnienia, tak jak my to zrobiliśmy. Ale bądź ostrożny: kwantyzacja nie zawsze jest srebrną kulą, ponieważ może zmniejszyć dokładność modelu.
Jeśli nie możesz lub nie chcesz samodzielnie wdrożyć LLaMA 3.1 405B, możesz z łatwością użyć go w NLP Cloud i wykorzystać ten świetny model na dużą skalę w produkcji. Wypróbuj LLaMA 3.1 405B na NLP Cloud już teraz!
Jeśli masz pytania dotyczące LLaMA 3.1 405B i sztucznej inteligencji w ogóle, nie wahaj się nas zapytać, zawsze chętnie doradzimy!
Julien
CTO w NLP Cloud