Model generatywnej sztucznej inteligencji LLaMA 3 został wydany przez Meta kilka dni temu i już teraz pokazuje imponujące możliwości.
Dowiedz się, jak krok po kroku zainstalować i wdrożyć LLaMA 3 w środowisku produkcyjnym. Od wymagań sprzętowych po wdrożenie i skalowanie - omawiamy wszystko, co trzeba wiedzieć, aby wdrożenie przebiegło sprawnie.
Meta wprowadziła wstępne wersje swojego modelu open-source AI Llama 3, który może być wykorzystywany do tworzenia tekstu, programowania lub chatbotów. Ponadto Meta ogłosiła plany włączenia LLaMA 3 do swoich głównych aplikacji społecznościowych. Ten ruch ma na celu konkurowanie z innymi asystentami AI, takimi jak ChatGPT OpenAI, Copilot Microsoftu i Gemini Google.
Podobnie jak Llama 2, Llama 3 wyróżnia się jako swobodnie dostępny duży model językowy z otwartymi wagami, oferowany przez wiodącą firmę AI (choć nie kwalifikuje się jako "open source" w konwencjonalnym sensie).
Obecnie Llama 3 można pobrać za darmo ze strony internetowej Meta w dwóch różnych rozmiarach parametrów: 8 miliardów (8B) i 70 miliardów (70B). Użytkownicy mogą zarejestrować się, aby uzyskać dostęp do tych wersji. Llama 3 jest oferowana w dwóch wariantach: wstępnie wytrenowanym, który jest podstawowym modelem przewidywania następnego tokena, oraz dostrojonym do instrukcji, który jest precyzyjnie dostrojony do poleceń użytkownika. Obie wersje mają limit kontekstowy 8 192 tokenów.
W wywiadzie udzielonym Dwarkeshowi Patelowi, Mark Zuckerberg, dyrektor generalny Meta, wspomniał, że przeszkolili dwa niestandardowe modele przy użyciu klastra 24 000 GPU. Model 70B został przeszkolony z około 15 bilionów tokenów danych i nigdy nie osiągnął punktu nasycenia lub ograniczenia swoich możliwości. Następnie Meta postanowiła skupić się na szkoleniu innych modeli. Firma ujawniła również, że obecnie pracuje nad wersją Llama 3 o parametrach 400B, która zdaniem ekspertów, takich jak Jim Fan z Nvidii, może działać podobnie do GPT-4 Turbo, Claude 3 Opus i Gemini Ultra w testach porównawczych, takich jak MMLU, GPQA, HumanEval i MATH.
Według Meta, Llama 3 została oceniona przy użyciu różnych testów porównawczych, w tym MMLU (wiedza na poziomie licencjackim), GSM-8K (matematyka w szkole podstawowej), HumanEval (kodowanie), GPQA (pytania na poziomie absolwenta) i MATH (matematyczne zadania słowne). Testy te pokazują, że model 8B przewyższa modele o otwartych wagach, takie jak Google Gemma 7B i Mistral 7B Instruct, a model 70B jest konkurencyjny w stosunku do Gemini Pro 1.5 i Claude 3 Sonnet.
Meta donosi, że model Llama 3 został ulepszony o zdolność rozumienia kodowania, podobnie jak Llama 2, i po raz pierwszy został przeszkolony przy użyciu zarówno obrazów, jak i tekstu. Jednak jego obecne wyniki są ograniczone do tekstu.
Testy porównawcze LLaMA 3
Ponieważ wiele organizacji korzysta z AWS dla swoich obciążeń produkcyjnych, zobaczmy, jak wdrożyć LLaMA 3 na AWS EC2.
Istnieje wiele przeszkód, jeśli chodzi o wdrażanie LLM, takich jak zużycie pamięci VRAM (GPU), szybkość wnioskowania, przepustowość i wykorzystanie przestrzeni dyskowej. W tym scenariuszu musimy upewnić się, że przydzieliliśmy instancję GPU na AWS EC2 z wystarczającą ilością pamięci VRAM, aby obsłużyć wykonanie naszych modeli.
LLaMA 3 8B wymaga około 16 GB przestrzeni dyskowej i 20 GB pamięci VRAM (pamięci GPU) w FP16. Można oczywiście wdrożyć LLaMA 3 na CPU, ale opóźnienia byłyby zbyt wysokie dla rzeczywistego przypadku użycia produkcyjnego. Jeśli chodzi o LLaMA 3 70B, wymaga ona około 140 GB miejsca na dysku i 160 GB pamięci VRAM w FP16.
Uzyskanie 20 GB pamięci VRAM dla LLaMA 3 8B jest dość łatwe. Zalecam aprowizację procesora graficznego NVIDIA A10: ten procesor graficzny jest wyposażony w 24 GB pamięci VRAM i jest szybkim procesorem graficznym opartym na platformie Ampere. W AWS EC2 należy wybrać instancję G5, aby zapewnić procesor graficzny A10. Wystarczająca będzie instancja g5.xlarge.
Wdrożenie modelu LLaMA 3 70B jest jednak znacznie trudniejsze. Żaden procesor graficzny nie ma wystarczającej ilości pamięci VRAM dla tego modelu, więc konieczne będzie zapewnienie instancji z wieloma procesorami graficznymi. Jeśli udostępnisz instancję g5.48xlarge na AWS, otrzymasz 192 GB pamięci VRAM (8 x GPU A10), co będzie wystarczające dla LLaMA 3 70B.
W takiej konfiguracji można oczekiwać następujących opóźnień (czasów odpowiedzi): 50 tokenów wygenerowanych w ciągu 1 sekundy dla LLaMA 3 8B i 50 tokenów wygenerowanych w ciągu 5 sekund dla LLaMA 3 70B.
Aby zmniejszyć koszty operacyjne tych modeli i zwiększyć opóźnienia, można zbadać techniki kwantyzacji, ale należy pamiętać, że takie optymalizacje mogą zaszkodzić dokładności modelu. Kwantyzacja wykracza poza zakres tego artykułu.
Aby zapewnić takie instancje, zaloguj się do konsoli AWS EC2 i uruchom nową instancję: wybierz NVIDIA deep learning AMI, na instancji g5.xlarge lub g5.48xlarge. Nie zapomnij również zapewnić wystarczającej ilości miejsca na dysku.
vLLM to biblioteka zaprojektowana do szybkiego i łatwego wnioskowania i wdrażania LLM. Jej wydajność przypisuje się różnym zaawansowanym metodom, w tym stronicowaniu uwagi w celu optymalnego zarządzania kluczem uwagi i pamięcią wartości, przetwarzaniu w czasie rzeczywistym przychodzących zapytań w partiach oraz spersonalizowanym jądrom CUDA.
Ponadto, vLLM zapewnia wysoki stopień adaptacyjności poprzez wykorzystanie obliczeń rozproszonych (z wykorzystaniem równoległości tensorów), strumieniowanie w czasie rzeczywistym oraz kompatybilność zarówno z kartami graficznymi NVIDIA, jak i AMD.
W szczególności, vLLM znacznie pomoże we wdrożeniu LLaMA 3, umożliwiając nam wykorzystanie instancji AWS EC2 wyposażonych w kilka kompaktowych procesorów graficznych NVIDIA A10. Jest to korzystniejsze rozwiązanie niż wykorzystanie pojedynczego dużego układu GPU, takiego jak NVIDIA A100 lub H100. Co więcej, vLLM znacznie zwiększy wydajność naszego modelu dzięki ciągłemu wnioskowaniu wsadowemu.
Konfiguracja vLLM jest dość prosta. Nawiążmy połączenie SSH z naszą niedawno utworzoną instancją AWS i zainstalujmy vLLM za pomocą pip:
pip install vllm
Ponieważ planujemy przeprowadzić rozproszone wnioskowanie przy użyciu vLLM na 8 procesorach graficznych A10, wymagana jest również instalacja Ray:
pip install ray
W przypadku napotkania problemów z kompatybilnością podczas instalacji, prostszym rozwiązaniem może być skompilowanie vLLM ze źródła lub użycie ich obrazu Docker: Zapoznaj się z instrukcją instalacji vLLM.
Teraz stwórzmy nasz skrypt wnioskowania w Pythonie:
from vllm import LLM
# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")
# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)
print(llm.generate("What are the most popular quantization techniques for LLMs?"))
Możesz uruchomić powyższy skrypt. Jeśli uruchamiasz ten skrypt po raz pierwszy, będziesz musiał poczekać, aż model zostanie pobrany i załadowany na GPU, a następnie otrzymasz coś takiego:
The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation
Jest to dość proste do zrozumienia. Wystarczy dostosować tensor_parallel_size do liczby posiadanych procesorów graficznych.
Teraz chcemy zainicjować odpowiedni serwer wnioskowania zdolny do zarządzania wieloma żądaniami i wykonywania jednoczesnych wnioskowań. Aby rozpocząć, uruchom serwer:
Dla LLaMA 3 8B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct
Dla LLaMA 3 70B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8
Załadowanie modelu na GPU powinno zająć do 1 minuty. Następnie możesz uruchomić drugi terminal i rozpocząć wykonywanie żądań:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Meta-Llama-3-8B-Instruct",
"prompt": "What are the most popular quantization techniques for LLMs?"
}'
Masz teraz odpowiedni serwer wnioskowania gotowy do produkcji, który może obsługiwać wiele równoległych żądań dzięki ciągłemu wsadowaniu. W pewnym momencie, jeśli liczba żądań będzie zbyt duża, procesor graficzny zostanie przeciążony. W takim przypadku konieczne będzie zreplikowanie modelu na kilku instancjach GPU i zrównoważenie obciążenia żądań (ale wykracza to poza zakres tego artykułu).
Jak widać, wdrożenie LLaMA 3 do produkcji nie wymaga skomplikowanego kodu dzięki serwerom wnioskowania, takim jak vLLM.
Zapewnienie odpowiedniego sprzętu stanowi jednak wyzwanie. Po pierwsze dlatego, że te układy GPU są bardzo kosztowne, ale także z powodu obecnego globalnego niedoboru GPU. Jeśli po raz pierwszy próbujesz aprowizować serwer GPU w AWS, możesz nie mieć uprawnień do jego utworzenia. W takim przypadku należy skontaktować się z pomocą techniczną i wyjaśnić swój przypadek użycia. W tym artykule użyliśmy AWS EC2, ale inni dostawcy są oczywiście dostępni (Azure, GCP, OVH, Scaleway...).
Jeśli nie jesteś zainteresowany samodzielnym wdrożeniem LLaMA 3, sugerujemy skorzystanie z naszego NLP Cloud API. Ta opcja może być bardziej wydajna i potencjalnie bardziej opłacalna niż zarządzanie własną infrastrukturą LLaMA 3. Wypróbuj LLaMA 3 na NLP Cloud już teraz!
Jeśli masz pytania dotyczące LLaMA 3 i ogólnie wdrażania AI, nie wahaj się nas zapytać, zawsze chętnie pomożemy!
Julien
CTO w NLP Cloud