2023. gadā ir publicēti daudzi progresīvi atvērtā koda LLM, taču šo AI modeļu ieviešana ražošanā joprojām ir tehnisks izaicinājums. Šajā rakstā mēs parādīsim, kā izvietot dažus no labākajiem LLM uz AWS EC2: LLaMA 3 70B, Mistral 7B un Mixtral 8x7B. Mēs izmantosim uzlabotu secinājumu izdarīšanas dzinēju, kas atbalsta sērijveida secinājumu izdarīšanu, lai maksimāli palielinātu caurlaides spēju: vLLM.
Uzņēmums Meta ir izveidojis un laidis klajā lielo valodas modeļu (LLM) sēriju LLaMA 3, kas ietver dažādus ģeneratīvos teksta modeļus, kuri ir iepriekš apmācīti un precīzi noregulēti. Šie modeļi ir dažāda lieluma, un to parametri svārstās no 7 miljardiem līdz 70 miljardiem.
Mistral AI, jaunuzņēmums, ko līdzdibinājuši cilvēki ar pieredzi Google DeepMind un Meta, ar Mistral 7B un pēc tam Mixtral 8x7B ievērojami iekaroja LLM pasauli.
Mistral 7B ir īpaši iespaidīgs ar savu veiktspēju. Dažādos testos tas ir pārspējis Llama2-13B un daudzos rādītājos pat pārspējis Llama1-34B. Tas liecina, ka Mistral 7B nodrošina līdzīgas vai labākas iespējas ar ievērojami zemākām skaitļošanas izmaksām. Attiecībā uz kodēšanas uzdevumiem Mistral 7B konkurē ar CodeLlama 7B, un tā kompaktais izmērs 13,4 GB ļauj to darbināt standarta mašīnās.
Mixtral 8x7B ir pielāgojams un ātrs modelis, kas piemērots dažādiem lietojumiem. Tas darbojas ar sešas reizes lielāku ātrumu un atbilst vai pārsniedz LLaMA 3 70B veiktspēju visos testa rādītājos. Šis modelis atbalsta vairākas valodas un tam piemīt iedzimtas kodēšanas iespējas. Tas var apstrādāt līdz 32 k žetonu garas sekvences.
Visi šie modeļi ir atvērtā koda modeļi, un tos varat izvietot savā serverī, ja jums izdodas iegūt piekļuvi pareizai aparatūrai. Apskatīsim, kā tos izvietot AWS EC2 ar vLLM.
vLLM ir ātra un lietotājam draudzīga bibliotēka, kas pielāgota efektīvai LLM secinājumu izdarīšanai un izvietošanai. vLLM veiktspēju nodrošina vairākas uzlabotas metodes, piemēram, "paged attention" efektīvai uzmanības atslēgas un vērtības atmiņas pārvaldībai, ienākošo pieprasījumu sērijveida apstrāde reāllaikā un pielāgoti CUDA kodoli.
Turklāt vLLM piedāvā labu elastību, izmantojot izkliedētu secinājumu (izmantojot tenzoru paralēlismu), izvades straumēšanu un pielāgošanu gan NVIDIA, gan AMD GPU arhitektūrām.
Jo īpaši vLLM būs ļoti noderīgs LLaMA 3, Mistral un Mixtral izvietošanai, jo tas mums ļaus izvietot mūsu modeļus AWS EC2 instancēs, kurās ir vairāki mazāki GPU (piemēram, NVIDIA A10), nevis viens liels GPU (piemēram, NVIDIA A100 vai H100). Turklāt vLLM ļaus mums ievērojami palielināt mūsu modeļa caurlaides spēju, pateicoties sērijveida secinājumiem.
Mūžizglītības programmas izvietošana ir izaicinājums daudzu iemeslu dēļ: VRAM (GPU atmiņas) izmantošana, secinājumu izdarīšanas ātrums, caurlaidspēja, diska vietas izmantošana... Šajā gadījumā mums ir jāpārliecinās, ka mēs nodrošināsim AWS EC2 GPU instanci, kurai ir pietiekami daudz VRAM, lai darbinātu mūsu modeļus.
G5 gadījumi ir laba izvēle, jo tie nodrošina piekļuvi mūsdienīgiem NVIDIA A10 GPU un var palielināt VRAM līdz 192 GB (skatīt g5.48xlarge gadījumu), vienlaikus saglabājot diezgan zemu izmaksu efektivitāti.
Mistral 7B ir visvieglāk ieviešamais modelis, jo tam nepieciešams aptuveni 14 GB VRAM. Tālāk seko Mistral 8x7B ar 110 GB un LLaMA 3 70B ar 140 GB. Šeit mēs ņemam vērā tikai fp16, nevis fp32, un mēs nepiemērojam nekāda veida kvantizāciju.
Līdz ar to Mistral 7B var darboties ar g5.xlarge instanci, bet Mixtral 8x7B un LLaMA 3 70B nepieciešama g5.48xlarge instance, tāpēc šajā pamācībā mēs nodrošināsim g5.48xlarge instanci.
Lai nodrošinātu šādus gadījumus, autorizējieties AWS EC2 konsoles logā un izveidojiet jaunu gadījumu: izvēlieties NVIDIA dziļās mācīšanās AMI, izmantojot g5.48xlarge gadījumu. Jums būs nepieciešams vismaz 300 GB diska vietas.
vLLM instalēšana ir diezgan vienkārša. Atvērsim SSH savienojumu ar mūsu jaunizveidoto AWS gadījumu un instalēsim vLLM ar pip:
pip install vllm
Tā kā mēs izmantosim vLLM sadalītai atvasināšanai 8 x A10 GPU, mums ir nepieciešams instalēt arī Ray:
pip install ray
Ja instalēšanas procesa laikā rodas savietojamības problēmas, jums varētu būt vieglāk izveidot vLLM no pirmkoda vai izmantot to Docker attēlu: sīkāku informāciju skatiet instalēšanas dokumentācijā.
Tagad varat izveidot savu pirmo secinājumu skriptu. Izveidojiet Python failu, kas satur šādu informāciju:
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?"))
Tagad palaidiet savu skriptu, izmantojot Python, kas atgriež kaut ko līdzīgu šim:
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.
Kā redzat, tas ir pavisam vienkāršs uzdevums. Jums ir jāpielāgo tensor_parallel_size atkarībā no pamatā esošo GPU skaita.
Iepriekš minētais bija vienreizējs scenārijs. Tagad mēs vēlamies palaist atbilstošu secinājumu serveri, kas var apstrādāt vairākus pieprasījumus un veikt sērijveida secinājumus. Vispirms palaidiet serveri:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Pēc kāda laika, kad modelis ir pareizi ielādēts VRAM atmiņā, varat atvērt otru čaulas logu un veikt dažus pieprasījumus:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Tiks iegūts tāds pats rezultāts kā iepriekš, taču šoreiz varat veikt vairākus pieprasījumus vienlaicīgi.
Ja vēlaties maksimāli izmantot savu GPU un viegli paralēli izvietot modeli uz vairākiem GPU, ir lietderīgi izmantot tādu uzlabotu inferences serveri kā vLLM.
Kā redzat, izmantojot šo paņēmienu, ir pavisam vienkārši izvietot vismodernākos atvērtā koda mākslīgā intelekta modeļus, piemēram, LLaMA 3, Mistral un Mixtral, uz sava servera.
Šajā pamācībā mēs izmantojām AWS EC2, bet, protams, varējām izmantot arī citus piegādātājus. Galvenais izaicinājums būs GPU izmaksas un arī to pieejamība.
Ja nevēlaties paši izvietot šādus LLM, iesakām izmantot mūsu NLP Cloud API. Tas ietaupīs jums daudz laika un, iespējams, pat būs lētāk nekā pašiem izvietot savus LLM. Ja tas vēl nav izdarīts, nekautrējieties pamēģināt!
Vincent
NLP Cloud izstrādātāju advokāts