I 2023 har mange avanserte LLM-er med åpen kildekode blitt lansert, men det er fortsatt en teknisk utfordring å sette disse AI-modellene i produksjon. I denne artikkelen viser vi hvordan du distribuerer noen av de beste LLM-modellene på AWS EC2: LLaMA 3 70B, Mistral 7B og Mixtral 8x7B. Vi bruker en avansert inferensmotor som støtter batch-inferens for å maksimere gjennomstrømningen: vLLM.
Meta har utviklet og lansert LLaMA 3-serien med store språkmodeller (LLM), som omfatter en rekke generative tekstmodeller som er ferdig opplært og finjustert. Disse modellene varierer i størrelse, med parametere på mellom 7 og 70 milliarder.
Mistral AI, en oppstartsbedrift som ble grunnlagt av personer med erfaring fra Googles DeepMind og Meta, gjorde et betydelig inntog i LLM-verdenen med Mistral 7B og deretter Mixtral 8x7B.
Det som gjør Mistral 7B spesielt imponerende, er ytelsen. I ulike tester har den overgått Llama2-13B, og til og med overgått Llama1-34B i mange beregninger. Dette tyder på at Mistral 7B gir lignende eller bedre muligheter med en betydelig lavere beregningsoverhead. Når det gjelder kodingsoppgaver, konkurrerer Mistral 7B med CodeLlama 7B, og den kompakte størrelsen på 13,4 GB gjør at den kan kjøres på standardmaskiner.
Mixtral 8x7B er en tilpasningsdyktig og rask modell som egner seg til mange ulike bruksområder. Den opererer med en hastighet som er seks ganger raskere og enten oppfyller eller overgår ytelsen til LLaMA 3 70B på alle testparametere. Denne modellen støtter flere språk og har iboende kodingsegenskaper. Den kan håndtere sekvenser på opptil 32 000 tokens.
Alle disse modellene har åpen kildekode, og du kan distribuere dem på din egen server hvis du har tilgang til riktig maskinvare. La oss se hvordan du distribuerer dem på AWS EC2 med vLLM.
vLLM er et raskt og brukervennlig bibliotek som er skreddersydd for effektiv LLM-inferens og distribusjon. Ytelsen til vLLM kommer fra flere avanserte teknikker som paged attention for effektiv håndtering av oppmerksomhetsnøkler og verdiminne, batchbehandling av innkommende spørringer i sanntid og tilpassede CUDA-kjerner.
Dessuten gir vLLM god fleksibilitet gjennom distribuert inferens (via tensorparallellitet), strømming av utdata og tilpasning til både NVIDIA- og AMD-GPU-arkitekturer.
Spesielt vil vLLM være svært nyttig for å distribuere LLaMA 3, Mistral og Mixtral, fordi det vil gjøre det mulig for oss å distribuere modellene våre på AWS EC2-instanser med flere mindre GPU-er (som NVIDIA A10) i stedet for én stor GPU (som NVIDIA A100 eller H100). Dessuten vil vLLM gjøre det mulig for oss å øke modellens gjennomstrømning dramatisk takket være batch-inferens.
Implementering av LLM er en utfordring av mange grunner: Bruk av VRAM (GPU-minne), inferenshastighet, gjennomstrømning, bruk av diskplass ... Her må vi sørge for at vi får en GPU-forekomst på AWS EC2 som har nok VRAM til å kjøre modellene våre.
G5-instanser er et godt valg fordi de gir deg tilgang til moderne NVIDIA A10 GPU-er og kan skaleres opp til 192 GB VRAM (se g5.48xlarge-instansen), samtidig som de er ganske kostnadseffektive.
Mistral 7B er den enkleste modellen å installere, da den krever rundt 14 GB VRAM. Deretter kommer Mixtral 8x7B med 110 GB og LLaMA 3 70B med 140 GB. Her ser vi bare på fp16, ikke fp32, og vi bruker ikke noen form for kvantisering.
Derfor kan Mistral 7B kjøres på en g5.xlarge-forekomst, men Mixtral 8x7B og LLaMA 3 70B krever en g5.48xlarge-forekomst, så i denne veiledningen skal vi klargjøre en g5.48xlarge-forekomst.
For å klargjøre slike forekomster logger du inn på AWS EC2-konsollen og starter en ny forekomst: Velg NVIDIA deep learning AMI på en g5.48xlarge-forekomst. Du trenger minst 300 GB diskplass.
Installasjonen av vLLM er ganske enkel. La oss åpne en SSH-tilkobling til vår nyopprettede AWS-forekomst og installere vLLM med pip:
pip install vllm
Siden vi skal bruke vLLM til distribuert inferens på 8 x A10 GPU-er, må vi også installere Ray:
pip install ray
Hvis det oppstår kompatibilitetsproblemer under installasjonen, kan det være enklere for deg å bygge vLLM fra kildekode eller bruke Docker-image: se installasjonsdokumentasjonen for mer informasjon.
Du kan nå opprette ditt første inferensskript. Opprett en Python-fil som inneholder 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?"))
Kjør nå skriptet med Python, som returnerer noe slikt som dette:
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 ser, er dette en smal sak. Du må tilpasse tensor_parallel_size avhengig av antall underliggende GPU-er du har.
Ovennevnte var et engangsscenario. Nå ønsker vi å starte en skikkelig inferensserver som kan håndtere flere forespørsler og utføre batch-inferens på farten. Først starter vi serveren:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Etter en stund, når modellen er riktig lastet inn i VRAM, kan du åpne et nytt skallvindu og gjøre noen forespørsler:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Dette vil gi samme resultat som tidligere, men denne gangen kan du utføre flere forespørsler samtidig.
Det er en fordel å bruke en avansert inferensserver som vLLM hvis du vil maksimere utnyttelsen av GPU-en og enkelt distribuere modellen på flere GPU-er parallelt.
Som du ser, er det ganske enkelt å distribuere de mest avanserte AI-modellene med åpen kildekode, som LLaMA 3, Mistral og Mixtral, på din egen server takket være denne teknikken.
I denne opplæringen har vi brukt AWS EC2, men vi kunne selvsagt ha brukt andre leverandører. Hovedutfordringen vil være kostnaden for GPU-ene og tilgjengeligheten av dem.
Hvis du ikke ønsker å distribuere slike LLM-er selv, anbefaler vi at du i stedet bruker vårt NLP Cloud API. Det vil spare deg for mye tid og kan til og med være billigere enn å distribuere dine egne LLM-er. Hvis du ikke har gjort det ennå, kan du gjerne prøve!
Vincent
Utvikleradvokat hos NLP Cloud