Hur installerar och driftsätter jag LLaMA 3 i produktion?

Den generativa AI-modellen LLaMA 3 släpptes av Meta för ett par dagar sedan, och den visar redan imponerande kapacitet.

Lär dig hur du installerar och driftsätter LLaMA 3 i produktion med denna steg-för-steg-guide. Vi går igenom allt du behöver veta för en smidig implementering, från hårdvarukrav till driftsättning och skalning.

LLaMA 3

Introduktion till LLaMA 3

Meta har introducerat de första versionerna av sin Llama 3 open source AI-modell, som kan användas för textskapande, programmering eller chatbots. Dessutom tillkännagav Meta sina planer på att införliva LLaMA 3 i sina primära applikationer för sociala medier. Detta drag syftar till att konkurrera med andra AI-assistenter, såsom OpenAI: s ChatGPT, Microsofts Copilot och Googles Gemini.

I likhet med Llama 2 sticker Llama 3 ut som en fritt tillgänglig stor språkmodell med öppna vikter, som erbjuds av ett ledande AI-företag (även om den inte kvalificerar sig som "öppen källkod" i konventionell mening).

För närvarande kan Llama 3 laddas ner gratis från Metas webbplats i två olika parameterstorlekar: 8 miljarder (8B) och 70 miljarder (70B). Användare kan registrera sig för att få tillgång till dessa versioner. Llama 3 erbjuds i två varianter: pre-trained, som är en grundläggande modell för förutsägelse av nästa token, och instruction-tuned, som är finjusterad för att följa användarkommandon. Båda versionerna har en kontextgräns på 8 192 tokens.

I en intervju med Dwarkesh Patel nämnde Mark Zuckerberg, VD för Meta, att de tränade två specialbyggda modeller med ett 24,000 XNUMX-GPU-kluster. 70B-modellen tränades med cirka 15 biljoner tokens av data, och den nådde aldrig en mättnadspunkt eller en gräns för dess kapacitet. Därefter bestämde Meta sig för att fokusera på att träna andra modeller. Företaget avslöjade också att de för närvarande arbetar med en 400B-parameterversion av Llama 3, som experter som Nvidias Jim Fan tror kan prestera på samma sätt som GPT-4 Turbo, Claude 3 Opus och Gemini Ultra på riktmärken som MMLU, GPQA, HumanEval och MATH.

Enligt Meta har Llama 3 utvärderats med hjälp av olika benchmarks, inklusive MMLU (kunskap på grundnivå), GSM-8K (matematik på grundskolenivå), HumanEval (kodning), GPQA (frågor på avancerad nivå) och MATH (matematiska ordproblem). Dessa benchmarks visar att 8B-modellen överträffar modeller med öppna vikter som Googles Gemma 7B och Mistral 7B Instruct, och 70B-modellen är konkurrenskraftig mot Gemini Pro 1.5 och Claude 3 Sonnet.

Meta rapporterar att Llama 3-modellen har förbättrats med förmågan att förstå kodning, i likhet med Llama 2, och för första gången har den tränats med både bilder och text. Dess nuvarande utdata är dock begränsad till text.

LLaMA 3 riktmärken LLaMA 3 riktmärken

LLaMA 3 Hårdvarukrav och val av rätt instanser på AWS EC2

Eftersom många organisationer använder AWS för sina produktionsarbetsbelastningar ska vi se hur man distribuerar LLaMA 3 på AWS EC2.

Det finns flera hinder när det gäller att implementera LLM, till exempel VRAM-förbrukning (GPU-minne), inferenshastighet, genomströmning och användning av diskutrymme. I det här scenariot måste vi se till att vi allokerar en GPU-instans på AWS EC2 med tillräcklig VRAM-kapacitet för att stödja exekveringen av våra modeller.

LLaMA 3 8B kräver cirka 16 GB diskutrymme och 20 GB VRAM (GPU-minne) i FP16. Du kan naturligtvis distribuera LLaMA 3 på en CPU men latensen skulle vara för hög för ett verkligt produktionsanvändningsfall. När det gäller LLaMA 3 70B krävs det cirka 140 GB diskutrymme och 160 GB VRAM i FP16.

Det är ganska enkelt att få tag på 20 GB VRAM för LLaMA 3 8B. Jag rekommenderar att du provisionerar en NVIDIA A10 GPU: denna GPU levereras med 24 GB VRAM och det är en snabb GPU baserad på Ampere-plattformen. På AWS EC2 bör du välja en G5-instans för att kunna provisionera en A10 GPU. En g5.xlarge kommer att räcka.

Att driftsätta LLaMA 3 70B-modellen är dock mycket mer utmanande. Ingen GPU har tillräckligt med VRAM för den här modellen, så du måste provisionera en multi-GPU-instans. Om du provisionerar en g5.48xlarge-instans på AWS får du 192 GB VRAM (8 x A10 GPU:er), vilket är tillräckligt för LLaMA 3 70B.

I en sådan konfiguration kan du förvänta dig följande latenser (svarstider): 50 tokens genererade på 1 sekund för LLaMA 3 8B, och 50 tokens genererade på 5 sekunder för LLaMA 3 70B.

För att minska driftskostnaderna för dessa modeller och öka latensen kan du undersöka kvantiseringstekniker, men var medveten om att sådana optimeringar kan skada noggrannheten i din modell. Kvantisering ligger utanför ramen för denna artikel.

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.xlarge eller g5.48xlarge-instans. Glöm inte att avsätta tillräckligt med diskutrymme också.

Deep Learning AMI på G5-instans på AWS

Produktionsinferens med vLLM

vLLM är ett bibliotek som är utformat för snabb och enkel LLM-inferens och distribution. Dess effektivitet beror på olika sofistikerade metoder, inklusive paged attention för optimal hantering av attention key och värdeminne, realtidsbehandling av inkommande frågor i batcher och personaliserade CUDA-kärnor.

Dessutom ger vLLM en hög grad av anpassningsförmåga genom distribuerade beräkningar (med hjälp av tensorparallellism), realtidsströmning och kompatibilitet med både NVIDIA- och AMD-grafikkort.

Framför allt kommer vLLM att vara till stor hjälp vid implementeringen av LLaMA 3, eftersom vi kan använda AWS EC2-instanser utrustade med flera kompakta NVIDIA A10 GPU:er. Detta är en fördel jämfört med att använda en enda stor GPU, t.ex. NVIDIA A100 eller H100. Dessutom kommer vLLM att avsevärt förbättra vår modells effektivitet genom kontinuerlig batchinferens.

Att konfigurera vLLM är ganska enkelt. Låt oss upprätta en SSH-anslutning till vår nyligen skapade AWS-instans och installera vLLM med pip:

pip install vllm

Eftersom vi planerar att utföra distribuerad inferens med vLLM på 8 x A10 GPU:er krävs även installation av Ray:

pip install ray

Om du stöter på kompatibilitetsproblem under installationen kan det vara enklare för dig att kompilera vLLM från källan eller använda deras Docker-image: ta en titt på installationsanvisningarna för vLLM.

Starta inferensservern

Låt oss nu skapa vårt Python-inferensskript:

from vllm import LLM

# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")

# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)

print(llm.generate("What are the most popular quantization techniques for LLMs?"))

Du kan köra ovanstående skript. Om det är första gången du kör det här skriptet måste du vänta på att modellen laddas ner och laddas på GPU:n, sedan kommer du att få något liknande:

The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation

Det är ganska enkelt att förstå. Du behöver bara justera tensor_parallel_size beroende på antalet GPU:er som du har.

Vi vill nu starta en lämplig inferensserver som kan hantera många förfrågningar och utföra samtidiga inferenser. För att börja, starta servern:

För LLaMA 3 8B:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct

För LLaMA 3 70B:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8

Det bör ta upp till 1 minut för modellen att laddas på GPU:n. Sedan kan du starta en andra terminal och börja göra några förfrågningar:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "What are the most popular quantization techniques for LLMs?"
}'

Du har nu en riktig produktionsklar inferensserver som kan hantera många parallella förfrågningar tack vare kontinuerlig batchning. Vid någon tidpunkt, om antalet förfrågningar är för högt, kommer GPU dock att överbelastas. I så fall måste du replikera modellen på flera GPU-instanser och belastningsbalansera dina förfrågningar (men detta ligger utanför ramen för den här artikeln).

Slutsats

Som du kan se krävs ingen komplicerad kod för att driftsätta LLaMA 3 i produktion tack vare inferensservrar som vLLM.

Att tillhandahålla rätt hårdvara är dock en utmaning. Först och främst för att dessa GPU:er är mycket kostsamma, men också på grund av den nuvarande globala GPU-bristen. Om det här är första gången du försöker provisionera en GPU-server på AWS kanske du inte har tillstånd att skapa en GPU-server. I så fall måste du kontakta supporten och förklara ditt användningsfall. I den här artikeln använde vi AWS EC2 men andra leverantörer är naturligtvis tillgängliga (Azure, GCP, OVH, Scaleway ...).

Om du inte är intresserad av att driftsätta LLaMA 3 själv föreslår vi att du använder vårt NLP Cloud API. Detta alternativ kan vara mer effektivt och potentiellt mycket mer kostnadseffektivt än att hantera din egen LLaMA 3-infrastruktur. Prova LLaMA 3 på NLP Cloud nu!

Om du har frågor om LLaMA 3 och AI-implementering i allmänhet, tveka inte att fråga oss, det är alltid ett nöje att hjälpa till!

Julien
CTO på NLP Cloud