Zmagasz się z AI lub rozwojem full-stack? Nasi eksperci są tutaj, aby Cię poprowadzić: dostosowane porady, integracja techniczna i nie tylko. Skontaktuj się z nami pod adresem [email protected].

Wdrożenie LLaMA 3, Mistral i Mixtral na AWS EC2 z vLLM

W 2023 r. wydano wiele zaawansowanych LLM typu open source, ale wdrożenie tych modeli sztucznej inteligencji do produkcji nadal stanowi wyzwanie techniczne. W tym artykule pokażemy, jak wdrożyć niektóre z najlepszych LLM na AWS EC2: LLaMA 3 70B, Mistral 7B i Mixtral 8x7B. Użyjemy zaawansowanego silnika wnioskowania, który obsługuje wnioskowanie wsadowe w celu zmaksymalizowania przepustowości: vLLM.

vLLM

LLaMA 3, Mistral i Mixtral

Meta stworzyła i uruchomiła serię dużych modeli językowych (LLM) LLaMA 3, która obejmuje różnorodne generatywne modele tekstowe, które zostały wstępnie wytrenowane i dostrojone. Modele te różnią się wielkością, z parametrami w zakresie od 7 miliardów do 70 miliardów.

Mistral AI, startup współzałożony przez osoby z doświadczeniem w Google DeepMind i Meta, dokonał znaczącego wejścia w świat LLM z Mistral 7B, a następnie Mixtral 8x7B.

To, co sprawia, że Mistral 7B jest szczególnie imponujący, to jego wydajność. W różnych testach przewyższył on Llama2-13B, a nawet Llama1-34B w wielu metrykach. Sugeruje to, że Mistral 7B zapewnia podobne lub lepsze możliwości przy znacznie niższym narzucie obliczeniowym. Jeśli chodzi o zadania kodowania, Mistral 7B konkuruje z CodeLlama 7B, a jego kompaktowy rozmiar 13,4 GB umożliwia działanie na standardowych maszynach.

Mixtral 8x7B to elastyczny i szybki model odpowiedni do różnych zastosowań. Działa z sześciokrotnie większą prędkością i spełnia lub przewyższa wydajność LLaMA 3 70B we wszystkich metrykach testowych. Model ten obsługuje wiele języków i posiada nieodłączne możliwości kodowania. Może zarządzać sekwencjami o długości do 32 tys. tokenów.

Wszystkie te modele są open-source i można je wdrożyć na własnym serwerze, jeśli uda się uzyskać dostęp do odpowiedniego sprzętu. Zobaczmy, jak wdrożyć je na AWS EC2 za pomocą vLLM.

Wnioskowanie wsadowe i wiele GPU z vLLM

vLLM to szybka i przyjazna dla użytkownika biblioteka dostosowana do wydajnego wnioskowania i wdrażania LLM. Wydajność vLLM wynika z kilku zaawansowanych technik, takich jak stronicowanie uwagi w celu efektywnego zarządzania pamięcią klucza uwagi i wartości, przetwarzanie wsadowe zapytań przychodzących w czasie rzeczywistym oraz niestandardowe jądra CUDA.

Co więcej, vLLM oferuje dobrą elastyczność dzięki rozproszonemu wnioskowaniu (poprzez równoległość tensorów), strumieniowaniu danych wyjściowych i dostosowaniu do architektur GPU NVIDIA i AMD.

W szczególności vLLM będzie bardzo pomocny przy wdrażaniu LLaMA 3, Mistral i Mixtral, ponieważ pozwoli nam wdrożyć nasze modele na instancjach AWS EC2 z kilkoma mniejszymi procesorami graficznymi (takimi jak NVIDIA A10), zamiast jednego dużego procesora graficznego (takiego jak NVIDIA A100 lub H100). Ponadto vLLM pozwoli nam radykalnie zwiększyć przepustowość naszego modelu dzięki wnioskowaniu wsadowemu.

Zapewnienie odpowiedniego sprzętu na AWS EC2

Wdrażanie mechanizmów LLM jest wyzwaniem z wielu powodów: Wykorzystanie pamięci VRAM (GPU), szybkość wnioskowania, przepustowość, wykorzystanie przestrzeni dyskowej... W tym przypadku musimy upewnić się, że udostępnimy instancję GPU na AWS EC2, która ma wystarczającą ilość pamięci VRAM do uruchomienia naszych modeli.

Instancje G5 są dobrym wyborem, ponieważ zapewniają dostęp do nowoczesnych procesorów graficznych NVIDIA A10 i mogą skalować się do 192 GB pamięci VRAM (patrz instancja g5.48xlarge), pozostając przy tym dość opłacalne.

Mistral 7B jest najłatwiejszym modelem do wdrożenia, ponieważ wymaga około 14 GB pamięci VRAM. Następnie Mixtral 8x7B z 110 GB i LLaMA 3 70B z 140 GB. Tutaj bierzemy pod uwagę tylko fp16, a nie fp32, i nie stosujemy żadnego rodzaju kwantyzacji.

W rezultacie Mistral 7B może działać na instancji g5.xlarge, ale Mixtral 8x7B i LLaMA 3 70B wymagają instancji g5.48xlarge, więc w tym samouczku zapewnimy instancję g5.48xlarge.

Aby udostępnić takie instancje, zaloguj się do konsoli AWS EC2 i uruchom nową instancję: wybierz NVIDIA deep learning AMI, na instancji g5.48xlarge. Będziesz potrzebował co najmniej 300 GB miejsca na dysku.

Deep Learning AMI na instancji G5 w AWS

Instalacja vLLM dla wnioskowania rozproszonego

Instalacja vLLM jest dość prosta. Otwórzmy połączenie SSH do naszej nowo utworzonej instancji AWS i zainstalujmy vLLM za pomocą pip:

pip install vllm

Ponieważ będziemy używać vLLM do rozproszonego wnioskowania na 8 procesorach graficznych A10, musimy również zainstalować Ray:

pip install ray

W przypadku problemów z kompatybilnością podczas procesu instalacji, łatwiejsze może być zbudowanie vLLM ze źródła lub użycie ich obrazu Docker: Więcej szczegółów można znaleźć w dokumentacji instalacji.

Tworzenie skryptu wnioskowania

Możesz teraz utworzyć swój pierwszy skrypt wnioskowania. Utwórz plik w języku Python zawierający następujące elementy:

from vllm import LLM

# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)

print(llm.generate("What is batch inference?"))

Teraz uruchom skrypt w Pythonie, który zwróci coś takiego:

Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.

Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.

Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.

In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.

Jak widać, jest to bułka z masłem. Musisz dostosować tensor_parallel_size w zależności od liczby posiadanych procesorów graficznych.

Powyższy scenariusz był jednorazowy. Teraz chcemy uruchomić odpowiedni serwer wnioskowania, który może obsługiwać wiele żądań i wykonywać wnioskowanie wsadowe w locie. Najpierw należy uruchomić serwer:

python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8

Po pewnym czasie, gdy model zostanie poprawnie załadowany do pamięci VRAM, można otworzyć drugie okno powłoki i wykonać kilka żądań:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
    "prompt": "What is batch inference?"
}'

Zwróci to taki sam wynik jak poprzednio, ale tym razem można wykonać kilka żądań jednocześnie.

Wnioski

Wykorzystanie zaawansowanego serwera wnioskowania, takiego jak vLLM, jest korzystne, jeśli chcesz zmaksymalizować wykorzystanie GPU i łatwo wdrożyć model na kilku GPU równolegle.

Jak widać, dzięki tej technice dość łatwo jest wdrożyć najbardziej zaawansowane modele AI typu open source, takie jak LLaMA 3, Mistral i Mixtral, na własnym serwerze.

W tym tutorialu użyliśmy AWS EC2, ale oczywiście mogliśmy użyć innych dostawców. Głównym wyzwaniem będzie koszt procesorów graficznych, a także ich dostępność.

Jeśli nie chcesz samodzielnie wdrażać takich LLM, zalecamy skorzystanie z naszego NLP Cloud API. Zaoszczędzi to wiele czasu i może być nawet tańsze niż wdrażanie własnych LLM. Jeśli jeszcze tego nie zrobiłeś, możesz spróbować!

Vincent
Rzecznik programistów w NLP Cloud