Το LLaMA 3.1 405b είναι ένα μεγάλο γλωσσικό μοντέλο που αναπτύχθηκε από την Meta AI και αποτελεί ένα από τα μεγαλύτερα ανοιχτά διαθέσιμα μοντέλα τεχνητής νοημοσύνης από άποψη μεγέθους παραμέτρων, με 405 δισεκατομμύρια παραμέτρους. Αποτελεί μέρος της οικογένειας Llama 3.1, η οποία περιλαμβάνει μοντέλα διαφορετικών μεγεθών (8B, 70B και 405B παραμέτρων).
Η έκδοση 405B είναι ιδιαίτερα αξιοσημείωτη για την κλίμακά της, με στόχο να φτάσει ή και να ξεπεράσει την απόδοση ορισμένων από τα κορυφαία μοντέλα κλειστού κώδικα, όπως το GPT-4, σε διάφορα benchmarks, υποδεικνύοντας τις κορυφαίες δυνατότητές της στην κατανόηση γλώσσας, τη δημιουργία και άλλες εργασίες. Τα μοντέλα Llama 3.1 έχουν σχεδιαστεί με ενισχυμένη πολυγλωσσική υποστήριξη, ικανά να κατανοούν και να παράγουν κείμενο σε πολλές γλώσσες, γεγονός που διευρύνει την εφαρμογή του σε διάφορες περιοχές και βάσεις χρηστών.
Σε αυτό το άρθρο, παρουσιάζουμε πώς να εγκαταστήσετε και να αναπτύξετε το LLaMA 3.1 405B στην παραγωγή στο Google Cloud Platform (GCP) Compute Engine. Μιλάμε πρώτα για τις απαιτήσεις υλικού, στη συνέχεια για την παροχή στιγμιοτύπων στο GCP και για την εγκατάσταση και την κβαντοποίηση με το vLLM.
Οι απαιτήσεις υλικού για την εκτέλεση του Llama 3.1 405B είναι αρκετά εκτεταμένες λόγω του μεγέθους και της πολυπλοκότητάς του. Ως συνήθως κατά την ανάπτυξη LLM, το πιο περίπλοκο μέρος είναι η GPU. Θα χρειαστείτε πολλή VRAM (δηλαδή μνήμη GPU) για να αναπτύξετε αυτό το μοντέλο:
Δεδομένων αυτών των αναγκών, συνήθως εξετάζετε ρυθμίσεις όπως:
Ως συνήθως, θα πρέπει να είστε προσεκτικοί με την κβάντιση και να βεβαιωθείτε ότι η ποιότητα του μοντέλου δεν υποβαθμίζεται υπερβολικά. Στη δοκιμή μας, η κβάντιση fp8 δεν φαίνεται να βλάπτει την ποιότητα του μοντέλου, οπότε θα τη χρησιμοποιήσουμε σε αυτό το άρθρο.
Η πλατφόρμα Google Cloud Platform (GCP) είναι ένας ενδιαφέρων πάροχος για την ανάπτυξη και την κλιμάκωση των φορτίων εργασίας τεχνητής νοημοσύνης σας. Είναι σχετικά φθηνή και διαθέτει μια καλή προσφορά GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Είναι επίσης αρκετά ευέλικτες όσον αφορά τις επιλογές των περιπτώσεων. Για παράδειγμα, μπορείτε να παρέχετε στιγμιότυπα με μία ή περισσότερες GPU H100: 1xH100, 2xH100, 4xH100 ή 8xH100.
Ενδέχεται να μην σας επιτρέπεται η παροχή GPU instances αν ο λογαριασμός σας είναι νέος και αν αυτό συμβαίνει, θα πρέπει να απευθυνθείτε στην υποστήριξη για να ζητήσετε αύξηση της ποσόστωσης.
Ως πρώτο βήμα θα πρέπει να δημιουργήσετε ένα νέο έργο στο GCP. Στη συνέχεια, θα πρέπει να ενεργοποιήσετε το Compute Engine API για το έργο σας. Μπορείτε να το κάνετε αυτό μεταβαίνοντας στη βιβλιοθήκη API στην κονσόλα GCP και αναζητώντας το "Compute Engine". Κάντε κλικ σε αυτό και, στη συνέχεια, κάντε κλικ στο "Enable" για να ενεργοποιήσετε το API.
Μόλις ενεργοποιήσετε το API, θα μπορείτε να δημιουργήσετε μια νέα περίπτωση. Μπορείτε να το κάνετε αυτό πηγαίνοντας στην ενότητα "VM instances" στην κονσόλα GCP και κάνοντας κλικ στο "Create instance".
Στη συνέχεια θα σας ζητηθεί να επιλέξετε έναν τύπο μηχανήματος. Για LLaMA 3.1 405B σε λειτουργία fp8, θα πρέπει να επιλέξετε ένα μηχάνημα a3-highgpu-1g με 8xH100 GPU.
Παράδειγμα GCP για LLaMA 3.1 405B
Στη συνέχεια, θα πρέπει να μπορείτε να ορίσετε πολλές λεπτομέρειες για το VM σας, όπως δικτύωση, αποθήκευση κ.λπ. Δεν πρόκειται να εξετάσουμε όλες αυτές τις ρυθμίσεις σε αυτό το άρθρο, αλλά θα επικεντρωθούμε στον τύπο εικόνας και την αποθήκευση.
Για να κατεβάσετε τα βάρη του μοντέλου LLaMA 3.1 405B σε μορφή fp8, θα χρειαστείτε τουλάχιστον 500 GB χώρο στο δίσκο. Συνιστούμε επίσης να χρησιμοποιήσετε μια εικόνα Linux Deep Learning με ήδη εγκατεστημένο το CUDA 12, καθώς μπορεί να σας εξοικονομήσει αρκετή δουλειά αργότερα. Μπορείτε να το επιτύχετε αυτό στην ενότητα "Λειτουργικό σύστημα και αποθήκευση":
Εικόνα GCP και χώρος στο δίσκο για το LLaMA 3.1 405B
Το vLLM, το οποίο σημαίνει Virtual Large Language Model (Εικονικό Μεγάλο Γλωσσικό Μοντέλο), αντιπροσωπεύει μια σημαντική πρόοδο στον τομέα της τεχνητής νοημοσύνης, ιδίως όσον αφορά τον τρόπο με τον οποίο εξυπηρετούνται και χρησιμοποιούνται τα μεγάλα γλωσσικά μοντέλα (LLM) για εξαγωγή συμπερασμάτων.
Το vLLM έχει σχεδιαστεί για συμπεράσματα υψηλής απόδοσης και χαμηλής καθυστέρησης, καθιστώντας το ιδανικό για εφαρμογές όπου η γρήγορη και αποτελεσματική γλωσσική επεξεργασία είναι ζωτικής σημασίας. Το επιτυγχάνει αυτό μέσω καινοτόμων τεχνικών όπως η PagedAttention, η οποία βελτιστοποιεί τη χρήση της μνήμης με την αποτελεσματικότερη διαχείριση της μνήμης κλειδιών προσοχής και τιμών, επιτρέποντας έως και 24 φορές υψηλότερη απόδοση σε σύγκριση με παραδοσιακές μεθόδους όπως οι μετασχηματιστές HuggingFace.
Ο πυρήνας της αποτελεσματικότητας του vLLM έγκειται στη διαχείριση της μνήμης. Με τη χρήση του PagedAttention, το vLLM διαιρεί την κρυφή μνήμη κλειδιού-τιμής (KV) σε μπλοκ, γεγονός που επιτρέπει την καλύτερη αξιοποίηση της μνήμης και μειώνει τον κατακερματισμό, ένα συνηθισμένο σημείο συμφόρησης στη χρήση μνήμης GPU για LLM. Αυτή η προσέγγιση όχι μόνο επιταχύνει την επεξεργασία, αλλά επιτρέπει επίσης τη διαχείριση περισσότερων αιτήσεων ταυτόχρονα χωρίς σημαντική πτώση της απόδοσης.
Ως μηχανή εξαγωγής συμπερασμάτων και εξυπηρέτησης, η vLLM εστιάζει όχι μόνο στην εκτέλεση LLM αλλά και στη μεγιστοποίηση της χρήσης των πόρων. Χρησιμοποιεί τεχνικές όπως η συνεχής ομαδοποίηση των εισερχόμενων αιτήσεων, η οποία εξασφαλίζει ότι η GPU παραμένει πλήρως αξιοποιημένη, μειώνοντας έτσι τους χρόνους αδράνειας και αυξάνοντας τη συνολική αποδοτικότητα.
Το vLLM υποστηρίζει διάφορες τεχνικές κβαντισμού (όπως GPTQ, AWQ, INT4, INT8, FP8), οι οποίες μειώνουν την ακρίβεια των βαρών του μοντέλου, μειώνοντας έτσι τη χρήση μνήμης και ενδεχομένως επιταχύνοντας την εξαγωγή συμπερασμάτων.
Η εγκατάσταση του vLLM είναι σχετικά εύκολη. Ας συνδεθούμε στην περίπτωση του GCP VM μας και ας εγκαταστήσουμε το vLLM χρησιμοποιώντας το pip:
pip install vllm
Θα εκτελέσουμε κατανεμημένη εξαγωγή συμπερασμάτων σε 8 x H100 GPU, οπότε πρέπει να εγκαταστήσουμε και την Ray:
pip install ray
Αν αντιμετωπίζετε προβλήματα συμβατότητας κατά την εγκατάσταση του vLLM, μπορεί να είναι απλούστερο για εσάς να μεταγλωττίσετε το vLLM από τον πηγαίο κώδικα ή να χρησιμοποιήσετε την εικόνα του Docker: ρίξτε μια ματιά στις οδηγίες εγκατάστασης του vLLM.
Ξεκινάμε με ένα βασικό παράδειγμα Python για να δοκιμάσουμε το μοντέλο μας:
from vllm import LLM
# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)
print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))
Μπορείτε να εκτελέσετε το σενάριο Python. Αν είναι η πρώτη φορά που το εκτελείτε, θα πρέπει να περιμένετε να γίνει λήψη και φόρτωση του μοντέλου στη GPU, και στη συνέχεια θα λάβετε μια απάντηση όπως αυτή:
FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.
**INT8 Quantization**
INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.
INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.
**FP8 Quantization**
FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.
FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.
**Key differences**
Here are the key differences between FP8 and INT8 quantization:
1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.
In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications.
Το μοντέλο LLaMA 3.1 405B έχει ήδη κβαντιστεί στο fp8 για vLLM από τη Neural Magic, οπότε δεν χρειάζεται να εκτελέσουμε ξανά την κβαντοποίηση. Απλώς φορτώνουμε το κβαντισμένο μοντέλο από τον κόμβο HuggingFace Hub.
Η παράμετρος tensor_parallel_size ρυθμίζεται ανάλογα με τον αριθμό των GPU που διαθέτουμε στο μηχάνημά μας.
Αυτό το απλό σενάριο Python δεν είναι όμως ένας σωστός διακομιστής παραγωγής. Τώρα θα ξεκινήσουμε τον διακομιστή συμπερασμού προκειμένου να καταναλώσουμε πολλές αιτήσεις παράλληλα και να μεγιστοποιήσουμε την απόδοση:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Μόλις φορτωθεί το μοντέλο, μπορείτε να εκκινήσετε ένα δεύτερο τερματικό και να κάνετε κάποιες αιτήσεις:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
"prompt": "Who are you?"
}'
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."
Το LLaMA 3.1 405B είναι ένα πρωτοποριακό παραγωγικό μοντέλο τεχνητής νοημοσύνης, αλλά η ανάπτυξή του στην παραγωγή δεν είναι εύκολη.
Η μεγαλύτερη πρόκληση είναι η εύρεση του κατάλληλου υλικού. Οι GPU είναι πολύ ακριβές και υπάρχει παγκόσμια έλλειψη. Αλλά μόλις καταφέρετε να διαθέσετε τις σωστές GPU, η ανάπτυξη του μοντέλου με έναν διακομιστή συμπερασμού όπως ο vLLM είναι αρκετά εύκολη.
Για τόσο μεγάλα μοντέλα, μπορεί να θέλετε να αξιοποιήσετε την κβάντιση για να μειώσετε τη χρήση της VRAM και να βελτιώσετε την καθυστέρηση, όπως κάναμε εμείς. Αλλά προσέξτε: η κβάντιση δεν είναι πάντα μια ασημένια σφαίρα, καθώς μπορεί να μειώσει την ακρίβεια του μοντέλου.
Αν δεν μπορείτε ή δεν θέλετε να αναπτύξετε το LLaMA 3.1 405B μόνοι σας, μπορείτε εύκολα να το χρησιμοποιήσετε στο NLP Cloud και να αξιοποιήσετε αυτό το εξαιρετικό μοντέλο σε κλίμακα παραγωγής. Δοκιμάστε το LLaMA 3.1 405B στο NLP Cloud τώρα!
Αν έχετε ερωτήσεις σχετικά με το LLaMA 3.1 405B και την ΤΝ γενικά, μη διστάσετε να μας ρωτήσετε, είναι πάντα χαρά μας να σας συμβουλεύουμε!
Julien
CTO στο NLP Cloud