Distribuera LLaMA 3, Mistral och Mixtral på AWS EC2 med vLLM

År 2023 har många avancerade LLM:er med öppen källkod släppts, men att distribuera dessa AI-modeller i produktion är fortfarande en teknisk utmaning. I den här artikeln visar vi hur man distribuerar några av de bästa LLM:erna på AWS EC2: LLaMA 3 70B, Mistral 7B och Mixtral 8x7B. Vi kommer att använda en avancerad inferensmotor som stöder batchinferens för att maximera genomströmningen: vLLM.

vLLM

LLaMA 3, Mistral och Mixtral

Meta har skapat och lanserat LLaMA 3-serien av stora språkmodeller (LLM), som innehåller en mängd olika generativa textmodeller som har förutbildats och finjusterats. Dessa modeller varierar i storlek, med parametrar som sträcker sig mellan 7 miljarder och 70 miljarder.

Mistral AI, en startup som grundades av personer med erfarenhet från Googles DeepMind och Meta, gjorde en betydande entré i LLM-världen med Mistral 7B och sedan Mixtral 8x7B.

Det som gör Mistral 7B särskilt imponerande är dess prestanda. I olika tester har den överträffat Llama2-13B och till och med överträffat Llama1-34B i många mätningar. Detta tyder på att Mistral 7B ger liknande eller bättre kapacitet med en betydligt lägre beräkningsomkostnad. När det gäller kodningsuppgifter konkurrerar Mistral 7B med CodeLlama 7B, och dess kompakta storlek på 13,4 GB gör att den kan köras på standardmaskiner.

Mixtral 8x7B är en anpassningsbar och snabb modell som passar för många olika användningsområden. Den arbetar med en hastighet som är sex gånger snabbare och antingen uppfyller eller överträffar LLaMA 3 70B:s prestanda i alla testmått. Denna modell stöder flera språk och har inbyggd kodningskapacitet. Den kan hantera sekvenser på upp till 32k tokens.

Alla dessa modeller har öppen källkod och du kan distribuera dem på din egen server om du lyckas få tillgång till rätt hårdvara. Låt oss se hur man distribuerar dem på AWS EC2 med vLLM.

Batchinferens och flera GPU med vLLM

vLLM är ett snabbt och användarvänligt bibliotek som är skräddarsytt för effektiv LLM-inferens och -distribution. Prestandan i vLLM kommer från flera avancerade tekniker som paged attention för effektiv hantering av uppmärksamhetsnycklar och minnesvärden, batchbearbetning av inkommande frågor i realtid och anpassade CUDA-kärnor.

Dessutom erbjuder vLLM god flexibilitet genom distribuerad inferens (via tensorparallellism), streaming av utdata och anpassning till både NVIDIA- och AMD GPU-arkitekturer.

I synnerhet kommer vLLM att vara till stor hjälp för att distribuera LLaMA 3, Mistral och Mixtral, eftersom det gör att vi kan distribuera våra modeller på AWS EC2-instanser med flera mindre GPU:er (som NVIDIA A10), istället för en enda stor GPU (som NVIDIA A100 eller H100). Dessutom kommer vLLM att göra det möjligt för oss att dramatiskt öka genomströmningen av vår modell tack vare batchinferens.

Konfigurera rätt hårdvara på AWS EC2

Att distribuera LLM är en utmaning av många skäl: VRAM-användning (GPU-minne), inferenshastighet, genomströmning, användning av diskutrymme... Här måste vi se till att vi kommer att tillhandahålla en GPU-instans på AWS EC2 som har tillräckligt med VRAM för att köra våra modeller.

G5-instanser är ett bra val eftersom de ger dig tillgång till moderna NVIDIA A10 GPU:er och kan skala upp till 192 GB VRAM (se instansen g5.48xlarge), samtidigt som de är ganska kostnadseffektiva.

Mistral 7B är den enklaste modellen att driftsätta eftersom den kräver cirka 14 GB VRAM. Därefter kommer Mixtral 8x7B med 110 GB och LLaMA 3 70B med 140 GB. Här tar vi bara hänsyn till fp16, inte fp32, och vi tillämpar inte någon form av kvantisering.

Följaktligen kan Mistral 7B köras på en g5.xlarge-instans men Mixtral 8x7B och LLaMA 3 70B kräver en g5.48xlarge-instans, så vi kommer att tillhandahålla en g5.48xlarge-instans i den här handledningen.

För att tillhandahålla sådana instanser loggar du in på din AWS EC2-konsol och startar en ny instans: välj NVIDIA deep learning AMI, på en g5.48xlarge-instans. Du behöver minst 300 GB diskutrymme.

Deep Learning AMI på G5-instans på AWS

Installera vLLM för distribuerad inferens

vLLM-installationen är ganska enkel. Låt oss öppna en SSH-anslutning till vår nyskapade AWS-instans och installera vLLM med pip:

pip install vllm

Eftersom vi kommer att använda vLLM för distribuerad inferens på 8 x A10 GPU:er måste vi även installera Ray:

pip install ray

Om kompatibilitetsproblem uppstår under installationsprocessen kan det vara enklare för dig att bygga vLLM från källan eller använda deras Docker-image: se installationsdokumentationen för mer information.

Skapa inferensskriptet

Nu kan du skapa ditt första inferensskript. Skapa en Python-fil som innehåller följande:

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

Kör nu ditt skript med Python, som returnerar något i den här stilen:

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.

Som du kan se är detta en barnlek. Du måste anpassa tensor_parallel_size beroende på hur många underliggande GPU:er du har.

Ovanstående var ett engångsscenario. Nu vill vi starta en riktig inferensserver som kan hantera flera förfrågningar och utföra batchinferens i farten. Först startar vi servern:

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

Efter en stund, när modellen har laddats korrekt i VRAM, kan du öppna ett andra skalfönster och göra några förfrågningar:

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

Detta kommer att ge samma resultat som tidigare, men den här gången kan du utföra flera förfrågningar samtidigt.

Slutsats

Att använda en avancerad inferensserver som vLLM är fördelaktigt om du vill maximera utnyttjandet av din GPU och enkelt distribuera din modell på flera GPU:er parallellt.

Som du kan se är det ganska enkelt att distribuera de mest avancerade AI-modellerna med öppen källkod som LLaMA 3, Mistral och Mixtral på din egen server tack vare den här tekniken.

I den här handledningen använde vi AWS EC2, men vi kunde naturligtvis ha använt andra leverantörer. Den största utmaningen kommer att vara kostnaden för GPU:erna och även deras tillgänglighet.

Om du inte vill distribuera sådana LLM:er själv rekommenderar vi att du använder vårt NLP Cloud API istället. Det sparar mycket tid och kan till och med vara billigare än att distribuera dina egna LLM. Om du inte har gjort det ännu kan du gärna prova!

Vincent
Utvecklare på NLP Cloud