Δυσκολεύεστε με το AI ή την ανάπτυξη πλήρους πακέτου; Οι ειδικοί μας είναι εδώ για να σας καθοδηγήσουν: εξατομικευμένες συμβουλές, τεχνική ενσωμάτωση και πολλά άλλα. Επικοινωνήστε μαζί μας στο [email protected].

Ανάπτυξη των LLaMA 3, Mistral και Mixtral σε AWS EC2 με vLLM

Το 2023, έχουν κυκλοφορήσει πολλά προηγμένα LLM ανοιχτού κώδικα, αλλά η ανάπτυξη αυτών των μοντέλων ΤΝ στην παραγωγή εξακολουθεί να αποτελεί τεχνική πρόκληση. Σε αυτό το άρθρο θα δείξουμε πώς να αναπτύξετε μερικά από τα καλύτερα LLMs στο AWS EC2: LLaMA 3 70B, Mistral 7B και Mixtral 8x7B. Θα χρησιμοποιήσουμε μια προηγμένη μηχανή εξαγωγής συμπερασμάτων που υποστηρίζει την εξαγωγή συμπερασμάτων κατά δέσμες, προκειμένου να μεγιστοποιήσουμε την απόδοση: vLLM.

vLLM

LLaMA 3, Mistral και Mixtral

Η Meta δημιούργησε και εγκαινίασε τη σειρά μεγάλων γλωσσικών μοντέλων (LLM) LLaMA 3, η οποία περιλαμβάνει μια ποικιλία γεννητικών μοντέλων κειμένου που έχουν προ-εκπαιδευτεί και ρυθμιστεί λεπτομερώς. Αυτά τα μοντέλα ποικίλλουν σε μέγεθος, με παραμέτρους που κυμαίνονται μεταξύ 7 και 70 δισεκατομμυρίων.

Η Mistral AI, μια νεοσύστατη επιχείρηση που συνιδρύθηκε από άτομα με εμπειρία στην DeepMind και τη Meta της Google, έκανε μια σημαντική είσοδο στον κόσμο των LLM με το Mistral 7B και στη συνέχεια με το Mixtral 8x7B.

Αυτό που κάνει το Mistral 7B ιδιαίτερα εντυπωσιακό είναι οι επιδόσεις του. Σε διάφορες δοκιμές, ξεπέρασε το Llama2-13B και ξεπέρασε ακόμη και το Llama1-34B σε πολλές μετρήσεις. Αυτό υποδηλώνει ότι το Mistral 7B παρέχει παρόμοιες ή καλύτερες δυνατότητες με σημαντικά μικρότερη υπολογιστική επιβάρυνση. Όταν πρόκειται για εργασίες κωδικοποίησης, το Mistral 7B ανταγωνίζεται το CodeLlama 7B, και το συμπαγές μέγεθός του στα 13,4 GB του επιτρέπει να εκτελείται σε τυπικές μηχανές.

Το Mixtral 8x7B είναι ένα ευέλικτο και γρήγορο μοντέλο κατάλληλο για διάφορες εφαρμογές. Λειτουργεί με ταχύτητα που είναι έξι φορές ταχύτερη και είτε ανταποκρίνεται είτε ξεπερνά την απόδοση του LLaMA 3 70B σε όλες τις μετρήσεις δοκιμών. Αυτό το μοντέλο υποστηρίζει πολλαπλές γλώσσες και διαθέτει εγγενείς δυνατότητες κωδικοποίησης. Μπορεί να διαχειριστεί ακολουθίες μήκους έως και 32k tokens.

Όλα αυτά τα μοντέλα είναι ανοιχτού κώδικα και μπορείτε να τα αναπτύξετε στον δικό σας διακομιστή, αν καταφέρετε να αποκτήσετε πρόσβαση στο κατάλληλο υλικό. Ας δούμε πώς μπορείτε να τα αναπτύξετε στον AWS EC2 με το vLLM.

Συμπερασματολογία παρτίδας και πολλαπλές GPU με vLLM

Η vLLM είναι μια γρήγορη και φιλική προς το χρήστη βιβλιοθήκη προσαρμοσμένη για αποτελεσματική εξαγωγή συμπερασμάτων και ανάπτυξη LLM. Οι επιδόσεις της vLLM προέρχονται από διάφορες προηγμένες τεχνικές, όπως η σελιδοποιημένη προσοχή για αποτελεσματική διαχείριση της μνήμης κλειδιών και τιμών προσοχής, η ομαδική επεξεργασία των εισερχόμενων ερωτημάτων σε πραγματικό χρόνο και οι προσαρμοσμένοι πυρήνες CUDA.

Επιπλέον, το vLLM προσφέρει μεγάλη ευελιξία μέσω κατανεμημένης συμπερασματολογίας (μέσω παραλληλισμού τανυστών), ροής εξόδου και προσαρμογής τόσο σε αρχιτεκτονικές GPU της NVIDIA όσο και της AMD.

Ειδικότερα, το vLLM θα είναι πολύ χρήσιμο για την ανάπτυξη των LLaMA 3, Mistral και Mixtral, επειδή θα μας επιτρέψει να αναπτύξουμε τα μοντέλα μας σε περιπτώσεις AWS EC2 που ενσωματώνουν πολλές μικρότερες GPU (όπως η NVIDIA A10), αντί για μία μεγάλη GPU (όπως η NVIDIA A100 ή H100). Επίσης, το vLLM θα μας επιτρέψει να αυξήσουμε δραματικά την απόδοση του μοντέλου μας χάρη στη batch inference.

Παροχή του σωστού υλικού στο AWS EC2

Η ανάπτυξη των LLM αποτελεί πρόκληση για πολλούς λόγους: Η χρήση VRAM (μνήμη GPU), η ταχύτητα εξαγωγής συμπερασμάτων, η απόδοση, η χρήση χώρου στο δίσκο... Εδώ πρέπει να βεβαιωθούμε ότι θα παρέχουμε μια παρουσία GPU στο AWS EC2 που έχει αρκετή VRAM για να τρέξουμε τα μοντέλα μας.

Οι περιπτώσεις G5 είναι μια καλή επιλογή επειδή σας δίνουν πρόσβαση σε σύγχρονες GPU A10 της NVIDIA και μπορούν να κλιμακωθούν μέχρι 192 GB VRAM (βλ. την περίπτωση g5.48xlarge), ενώ παραμένουν αρκετά αποδοτικές.

Το Mistral 7B είναι το πιο εύκολο μοντέλο για εγκατάσταση, καθώς απαιτεί περίπου 14GB VRAM. Ακολουθεί το Mixtral 8x7B με 110GB και το LLaMA 3 70B με 140GB. Εδώ εξετάζουμε μόνο το fp16, όχι το fp32, και δεν εφαρμόζουμε κανενός είδους κβαντισμό.

Κατά συνέπεια, το Mistral 7B μπορεί να τρέξει σε μια περίπτωση g5.xlarge, αλλά το Mixtral 8x7B και το LLaMA 3 70B απαιτούν μια περίπτωση g5.48xlarge, οπότε θα παρέχουμε μια περίπτωση g5.48xlarge σε αυτό το σεμινάριο.

Για να παρέχετε τέτοιες περιπτώσεις, συνδεθείτε στην κονσόλα AWS EC2 και εκκινήστε μια νέα περίπτωση: επιλέξτε το AMI βαθιάς μάθησης NVIDIA, σε μια περίπτωση g5.48xlarge. Θα χρειαστείτε τουλάχιστον 300 GB χώρου στο δίσκο.

Deep Learning AMI σε G5 instance στο AWS

Εγκαταστήστε το vLLM για κατανεμημένη εξαγωγή συμπερασμάτων

Η εγκατάσταση του vLLM είναι αρκετά απλή. Ας ανοίξουμε μια σύνδεση SSH στη νεοδημιουργηθείσα παρουσία μας στο AWS και ας εγκαταστήσουμε το vLLM με το pip:

pip install vllm

Καθώς θα χρησιμοποιήσουμε το vLLM για κατανεμημένη εξαγωγή συμπερασμάτων σε 8 x A10 GPUs, πρέπει να εγκαταστήσουμε και το Ray:

pip install ray

Σε περίπτωση προβλημάτων συμβατότητας κατά τη διαδικασία εγκατάστασης, ίσως είναι ευκολότερο για εσάς να δημιουργήσετε το vLLM από τον πηγαίο κώδικα ή να χρησιμοποιήσετε την εικόνα Docker: ανατρέξτε στην τεκμηρίωση εγκατάστασης για περισσότερες λεπτομέρειες.

Δημιουργήστε το σενάριο εξαγωγής συμπερασμάτων

Μπορείτε τώρα να δημιουργήσετε το πρώτο σας σενάριο εξαγωγής συμπερασμάτων. Δημιουργήστε ένα αρχείο Python που περιέχει τα εξής:

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

Τώρα τρέξτε το σενάριό σας με την Python, το οποίο επιστρέφει κάτι σαν αυτό:

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.

Όπως μπορείτε να δείτε, αυτό είναι πανεύκολο. Πρέπει να προσαρμόσετε το tensor_parallel_size ανάλογα με τον αριθμό των υποκείμενων GPU που διαθέτετε.

Το παραπάνω ήταν ένα σενάριο μιας χρήσης. Τώρα θέλουμε να ξεκινήσουμε έναν κατάλληλο διακομιστή εξαγωγής συμπερασμάτων που να μπορεί να χειριστεί πολλαπλές αιτήσεις και να εκτελεί ομαδοποιημένα συμπεράσματα εν κινήσει. Αρχικά, ξεκινήστε τον διακομιστή:

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

Μετά από κάποιο χρονικό διάστημα, μόλις το μοντέλο φορτωθεί σωστά στη VRAM, μπορείτε να ανοίξετε ένα δεύτερο παράθυρο κελύφους και να κάνετε κάποια αιτήματα:

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

Αυτό θα επιστρέψει το ίδιο αποτέλεσμα όπως και πριν, αλλά αυτή τη φορά μπορείτε να εκτελέσετε πολλές αιτήσεις ταυτόχρονα.

Συμπέρασμα

Η αξιοποίηση ενός προηγμένου διακομιστή συμπερασμού όπως το vLLM είναι επωφελής αν θέλετε να μεγιστοποιήσετε τη χρήση της GPU σας και να αναπτύξετε εύκολα το μοντέλο σας σε πολλές GPU παράλληλα.

Όπως μπορείτε να δείτε, είναι αρκετά εύκολο να αναπτύξετε τα πιο προηγμένα μοντέλα τεχνητής νοημοσύνης ανοιχτού κώδικα, όπως τα LLaMA 3, Mistral και Mixtral, στον δικό σας διακομιστή χάρη σε αυτή την τεχνική.

Σε αυτό το σεμινάριο χρησιμοποιήσαμε το AWS EC2, αλλά θα μπορούσαμε φυσικά να χρησιμοποιήσουμε και άλλους προμηθευτές. Η κύρια πρόκληση θα είναι το κόστος των GPU και επίσης η διαθεσιμότητά τους.

Αν δεν θέλετε να αναπτύξετε τέτοιες LLM μόνοι σας, σας συνιστούμε να χρησιμοποιήσετε το NLP Cloud API. Θα σας εξοικονομήσει πολύ χρόνο και μπορεί να είναι ακόμη και φθηνότερο από την ανάπτυξη των δικών σας LLMs. Αν δεν το έχετε κάνει ακόμα, μπορείτε να δοκιμάσετε!

Vincent
Συνήγορος προγραμματιστών στο NLP Cloud