În 2023, au fost lansate multe LLM-uri avansate cu sursă deschisă, dar implementarea acestor modele de inteligență artificială în producție este încă o provocare tehnică. În acest articol vom arăta cum să implementăm unele dintre cele mai bune LLM-uri pe AWS EC2: LLaMA 3 70B, Mistral 7B și Mixtral 8x7B. Vom utiliza un motor de inferență avansat care acceptă inferența pe loturi pentru a maximiza randamentul: vLLM.
Meta a creat și a lansat seria LLaMA 3 de modele lingvistice mari (LLMs), care include o varietate de modele textuale generative care au fost pre-antrenate și ajustate. Aceste modele au dimensiuni diferite, cu parametri care variază între 7 miliarde și 70 de miliarde.
Mistral AI, un startup cofondat de persoane cu experiență la DeepMind și Meta de la Google, și-a făcut o intrare semnificativă în lumea LLM-urilor cu Mistral 7B și apoi Mixtral 8x7B.
Ceea ce face ca Mistral 7B să fie deosebit de impresionant este performanța sa. În diverse teste, a depășit Llama2-13B și chiar Llama1-34B în multe criterii. Acest lucru sugerează că Mistral 7B oferă capabilități similare sau mai bune cu o sarcină de calcul semnificativ mai mică. Când vine vorba de sarcini de codare, Mistral 7B concurează cu CodeLlama 7B, iar dimensiunea sa compactă de 13,4 GB îi permite să ruleze pe mașini standard.
Mixtral 8x7B este un model adaptabil și rapid, potrivit pentru diverse aplicații. Funcționează la o viteză de șase ori mai mare și fie respectă, fie depășește performanța LLaMA 3 70B în toate parametrii de testare. Acest model suportă mai multe limbi și posedă capacități inerente de codificare. Acesta poate gestiona secvențe cu o lungime de până la 32k token-uri.
Toate aceste modele sunt open-source și le puteți implementa pe propriul server dacă reușiți să obțineți acces la hardware-ul potrivit. Să vedem cum să le implementăm pe AWS EC2 cu vLLM.
vLLM este o bibliotecă rapidă și ușor de utilizat, concepută pentru inferența și implementarea eficientă a LLM. Performanța vLLM provine din mai multe tehnici avansate, cum ar fi atenția paginată pentru gestionarea eficientă a cheilor de atenție și a valorilor de memorie, procesarea pe loturi a interogărilor primite în timp real și nucleele CUDA personalizate.
În plus, vLLM oferă o bună flexibilitate prin inferența distribuită (prin paralelismul tensorial), streamingul de ieșire și adaptarea la arhitecturile GPU NVIDIA și AMD.
În special, vLLM va fi foarte util pentru a implementa LLaMA 3, Mistral și Mixtral, deoarece ne va permite să ne implementăm modelele pe instanțe AWS EC2 care integrează mai multe GPU-uri mai mici (cum ar fi NVIDIA A10), în loc de un singur GPU mare (cum ar fi NVIDIA A100 sau H100). De asemenea, vLLM ne va permite să creștem dramatic randamentul modelului nostru datorită inferenței pe loturi.
Desfășurarea LLM-urilor reprezintă o provocare din mai multe motive: utilizarea VRAM (memoria GPU), viteza de inferență, debitul, utilizarea spațiului pe disc... Aici trebuie să ne asigurăm că vom furniza o instanță GPU pe AWS EC2 care are suficientă VRAM pentru a rula modelele noastre.
Instanțele G5 sunt o alegere bună, deoarece vă oferă acces la GPU NVIDIA A10 moderne și pot ajunge până la 192 GB de VRAM (consultați instanța g5.48xlarge), rămânând în același timp destul de eficiente din punct de vedere al costurilor.
Mistral 7B este cel mai ușor de implementat, deoarece necesită aproximativ 14 GB de VRAM. Urmează Mixtral 8x7B cu 110GB și LLaMA 3 70B cu 140GB. Aici luăm în considerare doar fp16, nu fp32, și nu aplicăm niciun fel de cuantificare.
Prin urmare, Mistral 7B poate rula pe o instanță g5.xlarge, dar Mixtral 8x7B și LLaMA 3 70B necesită o instanță g5.48xlarge, așa că în acest tutorial vom furniza o instanță g5.48xlarge.
Pentru a furniza astfel de instanțe, conectați-vă la consola AWS EC2 și lansați o nouă instanță: selectați AMI NVIDIA deep learning, pe o instanță g5.48xlarge. Veți avea nevoie de cel puțin 300 GB de spațiu pe disc.
Instalarea vLLM este destul de simplă. Să deschidem o conexiune SSH la instanța noastră AWS nou creată și să instalăm vLLM cu pip:
pip install vllm
Deoarece vom folosi vLLM pentru inferență distribuită pe 8 GPU A10, trebuie să instalăm și Ray:
pip install ray
În cazul în care apar probleme de compatibilitate în timpul procesului de instalare, ar putea fi mai ușor pentru dvs. să construiți vLLM de la sursă sau să utilizați imaginea Docker a acestora: consultați documentația de instalare pentru mai multe detalii.
Acum puteți crea primul dumneavoastră script de inferență. Creați un fișier Python care să conțină următoarele:
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?"))
Acum rulați scriptul cu Python, care returnează ceva de genul acesta:
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.
După cum puteți vedea, este floare la ureche. Trebuie să adaptați tensor_parallel_size în funcție de numărul de GPU-uri de bază pe care le aveți.
Scenariul de mai sus a fost un scenariu unic. Acum dorim să pornim un server de inferență adecvat care să poată gestiona mai multe cereri și să efectueze inferențe pe loturi din mers. Mai întâi, porniți serverul:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
După un anumit timp, odată ce modelul este încărcat corect în VRAM, puteți deschide o a doua fereastră de tip shell și puteți face câteva cereri:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Aceasta va returna același rezultat ca și înainte, dar de data aceasta puteți efectua mai multe cereri în același timp.
Folosirea unui server de inferență avansat, cum ar fi vLLM, este benefică dacă doriți să maximizați utilizarea GPU-ului dvs. și să vă implementați cu ușurință modelul pe mai multe GPU-uri în paralel.
După cum puteți vedea, este destul de ușor să implementați cele mai avansate modele de inteligență artificială open-source, cum ar fi LLaMA 3, Mistral și Mixtral, pe propriul server, datorită acestei tehnici.
În acest tutorial am folosit AWS EC2, dar am fi putut folosi și alți furnizori, desigur. Principala provocare va fi costul GPU-urilor și, de asemenea, disponibilitatea acestora.
Dacă nu doriți să implementați astfel de LLM-uri de unul singur, vă recomandăm să utilizați în schimb API-ul nostru NLP Cloud. Veți economisi mult timp și ar putea fi chiar mai ieftin decât să implementați propriile LLM-uri. Dacă nu ați făcut-o încă, nu ezitați să încercați!
Vincent
Developer Advocate la NLP Cloud