I 2023 er mange avancerede open source LLM'er blevet frigivet, men det er stadig en teknisk udfordring at implementere disse AI-modeller i produktionen. I denne artikel vil vi vise, hvordan man implementerer nogle af de bedste LLM'er på AWS EC2: LLaMA 3 70B, Mistral 7B og Mixtral 8x7B. Vi vil bruge en avanceret inferensmotor, der understøtter batchinferens for at maksimere gennemstrømningen: vLLM.
Meta har skabt og lanceret LLaMA 3-serien af store sprogmodeller (LLM'er), som omfatter en række generative tekstmodeller, der er blevet fortrænet og finjusteret. Disse modeller varierer i størrelse med parametre på mellem 7 milliarder og 70 milliarder.
Mistral AI, en startup grundlagt af personer med erfaring fra Googles DeepMind og Meta, gjorde en markant entré i LLM'ernes verden med Mistral 7B og derefter Mixtral 8x7B.
Det, der gør Mistral 7B særligt imponerende, er dens ydeevne. I forskellige tests har den overgået Llama2-13B og endda overgået Llama1-34B i mange målinger. Dette antyder, at Mistral 7B giver lignende eller bedre muligheder med et betydeligt lavere beregningsoverhead. Når det kommer til kodningsopgaver, konkurrerer Mistral 7B med CodeLlama 7B, og dens kompakte størrelse på 13,4 GB gør det muligt at køre den på standardmaskiner.
Mixtral 8x7B er en tilpasningsdygtig og hurtig model, der er velegnet til forskellige anvendelser. Den arbejder med en hastighed, der er seks gange hurtigere, og enten opfylder eller overgår LLaMA 3 70B's ydeevne på tværs af alle testmetrikker. Denne model understøtter flere sprog og har indbyggede kodningsfunktioner. Den kan håndtere sekvenser på op til 32k tokens i længden.
Alle disse modeller er open source, og du kan implementere dem på din egen server, hvis det lykkes dig at få adgang til den rigtige hardware. Lad os se, hvordan man implementerer dem på AWS EC2 med vLLM.
vLLM er et hurtigt og brugervenligt bibliotek, der er skræddersyet til effektiv LLM-inferens og -implementering. Ydeevnen i vLLM kommer fra flere avancerede teknikker som paged attention for effektiv styring af opmærksomhedsnøgler og værdihukommelse, batchbehandling af indgående forespørgsler i realtid og tilpassede CUDA-kerner.
Desuden giver vLLM god fleksibilitet gennem distribueret inferens (via tensorparallelitet), outputstreaming og tilpasning til både NVIDIA- og AMD-GPU-arkitekturer.
Især vil vLLM være en stor hjælp til at implementere LLaMA 3, Mistral og Mixtral, fordi det vil gøre det muligt for os at implementere vores modeller på AWS EC2-instanser med flere mindre GPU'er (som NVIDIA A10) i stedet for en enkelt stor GPU (som NVIDIA A100 eller H100). Desuden vil vLLM gøre det muligt for os at øge gennemstrømningen af vores model dramatisk takket være batch-inferens.
Implementering af LLM'er er en udfordring af mange årsager: Brug af VRAM (GPU-hukommelse), inferenshastighed, throughput, brug af diskplads... Her skal vi sørge for, at vi får en GPU-instans på AWS EC2, der har nok VRAM til at køre vores modeller.
G5-instanser er et godt valg, fordi de giver dig adgang til moderne NVIDIA A10 GPU'er og kan skalere op til 192 GB VRAM (se instansen g5.48xlarge), samtidig med at de er ret omkostningseffektive.
Mistral 7B er den nemmeste model at implementere, da den kræver omkring 14 GB VRAM. Derefter kommer Mixtral 8x7B med 110 GB og LLaMA 3 70B med 140 GB. Her betragter vi kun fp16, ikke fp32, og vi anvender ikke nogen form for kvantisering.
Derfor kan Mistral 7B køre på en g5.xlarge-instans, men Mixtral 8x7B og LLaMA 3 70B kræver en g5.48xlarge-instans, så vi vil provisionere en g5.48xlarge-instans i denne vejledning.
For at oprette sådanne instanser skal du logge ind på din AWS EC2-konsol og starte en ny instans: Vælg NVIDIA deep learning AMI på en g5.48xlarge-instans. Du skal bruge mindst 300 GB diskplads.
Installationen af vLLM er ret ligetil. Lad os åbne en SSH-forbindelse til vores nyoprettede AWS-instans og installere vLLM med pip:
pip install vllm
Da vi vil bruge vLLM til distribueret inferens på 8 x A10 GPU'er, er vi også nødt til at installere Ray:
pip install ray
I tilfælde af kompatibilitetsproblemer under installationsprocessen kan det være nemmere for dig at bygge vLLM fra kilden eller bruge deres Docker-image: Se installationsdokumentationen for flere detaljer.
Du kan nu oprette dit første inferensscript. Opret en Python-fil, der indeholder følgende:
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 dit script med Python, som returnerer noget i denne stil:
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, er det en smal sag. Du skal tilpasse tensor_parallel_size afhængigt af antallet af underliggende GPU'er, du har.
Ovenstående var et one-shot-scenarie. Nu vil vi gerne starte en rigtig inferensserver, der kan håndtere flere forespørgsler og udføre batch-inferens på farten. Først skal vi starte serveren:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Efter et stykke tid, når modellen er korrekt indlæst i VRAM, kan du åbne et andet shell-vindue og komme med nogle anmodninger:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Det vil give det samme resultat som før, men denne gang kan du udføre flere forespørgsler på samme tid.
Det er en fordel at bruge en avanceret inferensserver som vLLM, hvis du vil maksimere udnyttelsen af din GPU og nemt distribuere din model på flere GPU'er parallelt.
Som du kan se, er det ret nemt at implementere de mest avancerede open source AI-modeller som LLaMA 3, Mistral og Mixtral på din egen server takket være denne teknik.
I denne tutorial har vi brugt AWS EC2, men vi kunne selvfølgelig også have brugt andre leverandører. Den største udfordring vil være prisen på GPU'erne og deres tilgængelighed.
Hvis du ikke selv ønsker at implementere sådanne LLM'er, anbefaler vi, at du i stedet bruger vores NLP Cloud API. Det vil spare dig for en masse tid og kan endda være billigere end at implementere dine egne LLM'er. Hvis du ikke har gjort det endnu, er du velkommen til at prøve!
Vincent
Udvikleradvokat hos NLP Cloud