Worstel je met AI of full-stack ontwikkeling? Onze experts staan klaar om je te begeleiden: advies op maat, technische integratie en meer. Neem contact op met [email protected].

LLaMA 3, Mistral en Mixtral implementeren op AWS EC2 met vLLM

In 2023 zijn er veel geavanceerde open-source LLM's uitgebracht, maar het inzetten van deze AI-modellen in productie is nog steeds een technische uitdaging. In dit artikel laten we zien hoe je enkele van de beste LLM's kunt implementeren op AWS EC2: LLaMA 3 70B, Mistral 7B en Mixtral 8x7B. We gebruiken een geavanceerde inferentie-engine die batch-inferentie ondersteunt om de verwerkingscapaciteit te maximaliseren: vLLM.

vLLM

LLaMA 3, Mistral en Mixtral

Meta heeft de LLaMA 3-serie van grote taalmodellen (LLM's) gemaakt en gelanceerd, die verschillende generatieve tekstmodellen bevat die vooraf getraind en verfijnd zijn. Deze modellen variëren in grootte, met parameters tussen 7 miljard en 70 miljard.

Mistral AI, een startup die mede is opgericht door mensen met ervaring bij Google's DeepMind en Meta, maakte een belangrijke entree in de wereld van LLM's met Mistral 7B en vervolgens Mixtral 8x7B.

Wat Mistral 7B bijzonder indrukwekkend maakt, zijn de prestaties. In verschillende testen presteerde het beter dan Llama2-13B, en zelfs beter dan Llama1-34B in veel statistieken. Dit suggereert dat Mistral 7B vergelijkbare of betere mogelijkheden biedt met een aanzienlijk lagere rekenoverhead. Als het aankomt op coderingstaken, concurreert Mistral 7B met CodeLlama 7B, en de compacte omvang van 13,4 GB maakt het mogelijk om het op standaardmachines te draaien.

Mixtral 8x7B is een flexibel en snel model dat geschikt is voor verschillende toepassingen. Het werkt op een snelheid die zes keer sneller is en evenaart of overtreft de prestaties van LLaMA 3 70B in alle testmetrieken. Dit model ondersteunt meerdere talen en beschikt over inherente coderingsmogelijkheden. Het kan reeksen tot 32k tokens aan.

Al deze modellen zijn open-source en je kunt ze op je eigen server implementeren als je toegang hebt tot de juiste hardware. Laten we eens kijken hoe je ze kunt implementeren op AWS EC2 met vLLM.

Batch-inferentie en Multi GPU met vLLM

vLLM is een snelle en gebruiksvriendelijke bibliotheek op maat voor efficiënte LLM-inferentie en implementatie. De prestaties van vLLM zijn te danken aan verschillende geavanceerde technieken, zoals paged attention voor effectief beheer van de aandachtssleutel en waardegeheugen, batchverwerking van binnenkomende query's in realtime en aangepaste CUDA-kernels.

Bovendien biedt vLLM goede flexibiliteit door gedistribueerde inferentie (via tensorparallellisme), outputstreaming en accommodatie voor zowel NVIDIA als AMD GPU-architecturen.

In het bijzonder zal vLLM zeer nuttig zijn om LLaMA 3, Mistral en Mixtral te implementeren, omdat het ons in staat stelt om onze modellen te implementeren op AWS EC2-instanties met meerdere kleinere GPU's (zoals de NVIDIA A10), in plaats van één grote GPU (zoals de NVIDIA A100 of H100). Bovendien kunnen we met vLLM de verwerkingscapaciteit van ons model drastisch verhogen dankzij batch-inferentie.

Zorg voor de juiste hardware op AWS EC2

Het inzetten van LLM's is om vele redenen een uitdaging: VRAM-gebruik (GPU-geheugen), inferentiesnelheid, doorvoer, schijfruimtegebruik... Hier moeten we ervoor zorgen dat we een GPU-instance op AWS EC2 beschikbaar stellen die genoeg VRAM heeft om onze modellen uit te voeren.

G5 instanties zijn een goede keuze omdat ze je toegang geven tot moderne NVIDIA A10 GPU's, en kunnen schalen tot 192 GB VRAM (zie de g5.48xlarge instantie), terwijl ze heel kosteneffectief blijven.

Mistral 7B is het eenvoudigste model om te implementeren omdat het ongeveer 14 GB VRAM vereist. Daarna komt Mixtral 8x7B met 110 GB en LLaMA 3 70B met 140 GB. Hier houden we alleen rekening met fp16, niet met fp32, en we passen geen enkele vorm van kwantisatie toe.

Bijgevolg kan Mistral 7B draaien op een g5.xlarge instantie, maar Mixtral 8x7B en LLaMA 3 70B vereisen een g5.48xlarge instantie, dus gaan we in deze tutorial een g5.48xlarge instantie provisionen.

Om dergelijke instanties te provisionen, log je in op je AWS EC2-console en start je een nieuwe instantie: selecteer de NVIDIA deep learning AMI, op een g5.48xlarge instantie. Je hebt ten minste 300 GB schijfruimte nodig.

Diep leren AMI op G5-instantie op AWS

Installeer vLLM voor gedistribueerde inferentie

De installatie van vLLM is vrij eenvoudig. Laten we een SSH-verbinding openen met onze nieuw aangemaakte AWS-instantie en vLLM installeren met pip:

pip install vllm

Omdat we vLLM gaan gebruiken voor gedistribueerde inferentie op 8 x A10 GPU's, moeten we Ray ook installeren:

pip install ray

In het geval van compatibiliteitsproblemen tijdens het installatieproces, is het misschien gemakkelijker voor u om vLLM vanaf de broncode te bouwen of hun Docker image te gebruiken: Raadpleeg de installatiedocumentatie voor meer informatie.

Het inferentiescript maken

U kunt nu uw eerste inferentiescript maken. Maak een Python-bestand dat het volgende bevat:

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

Voer nu je script uit met Python, dat iets als dit teruggeeft:

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.

Zoals je kunt zien is dit een fluitje van een cent. Je moet tensor_parallel_size aanpassen aan het aantal onderliggende GPU's dat je hebt.

Het bovenstaande was een eenmalig scenario. Nu willen we een echte inferentieserver starten die meerdere verzoeken kan verwerken en batchgewijze inferenties kan uitvoeren. Start eerst de server:

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

Na enige tijd, als het model correct in VRAM is geladen, kunt u een tweede shellvenster openen en enkele verzoeken doen:

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

Dit zal hetzelfde resultaat opleveren als voorheen, maar deze keer kun je meerdere verzoeken tegelijkertijd uitvoeren.

Conclusie

Het gebruik van een geavanceerde inferentieserver zoals vLLM is voordelig als u het gebruik van uw GPU wilt maximaliseren en uw model eenvoudig parallel op meerdere GPU's wilt implementeren.

Zoals je kunt zien, is het dankzij deze techniek vrij eenvoudig om de meest geavanceerde open-source AI-modellen zoals LLaMA 3, Mistral en Mixtral op je eigen server te implementeren.

In deze tutorial hebben we AWS EC2 gebruikt, maar we hadden natuurlijk ook andere leveranciers kunnen gebruiken. De grootste uitdaging zijn de kosten van de GPU's en hun beschikbaarheid.

Als u dergelijke LLM's niet zelf wilt implementeren, raden wij u aan om in plaats daarvan onze NLP Cloud API te gebruiken. Dit bespaart u veel tijd en is misschien zelfs goedkoper dan het implementeren van uw eigen LLM's. Als je het nog niet gedaan hebt, probeer het dan gerust!

Vincent
Developer Adviseur bij NLP Cloud