Το παραγωγικό μοντέλο τεχνητής νοημοσύνης LLaMA 3 κυκλοφόρησε από τη Meta πριν από λίγες ημέρες και ήδη παρουσιάζει εντυπωσιακές δυνατότητες.
Μάθετε πώς να εγκαθιστάτε και να αναπτύσσετε το LLaMA 3 στην παραγωγή με αυτόν τον οδηγό βήμα προς βήμα. Από τις απαιτήσεις υλικού έως την εγκατάσταση και την κλιμάκωση, καλύπτουμε όλα όσα πρέπει να γνωρίζετε για μια ομαλή υλοποίηση.
Η Meta παρουσίασε τις αρχικές εκδόσεις του μοντέλου τεχνητής νοημοσύνης ανοικτού κώδικα Llama 3, το οποίο μπορεί να χρησιμοποιηθεί για τη δημιουργία κειμένων, τον προγραμματισμό ή τα chatbots. Επιπλέον, η Meta ανακοίνωσε τα σχέδιά της να ενσωματώσει το LLaMA 3 στις πρωταρχικές εφαρμογές της στα μέσα κοινωνικής δικτύωσης. Η κίνηση αυτή έχει ως στόχο να ανταγωνιστεί άλλους βοηθούς AI, όπως το ChatGPT της OpenAI, το Copilot της Microsoft και το Gemini της Google.
Παρόμοια με το Llama 2, το Llama 3 ξεχωρίζει ως ένα ελεύθερα προσβάσιμο μεγάλο γλωσσικό μοντέλο με ανοιχτά βάρη, το οποίο προσφέρεται από μια κορυφαία εταιρεία τεχνητής νοημοσύνης (αν και δεν χαρακτηρίζεται ως "ανοιχτού κώδικα" με τη συμβατική έννοια).
Επί του παρόντος, το Llama 3 μπορεί να μεταφορτωθεί δωρεάν από την ιστοσελίδα της Meta σε δύο διαφορετικά μεγέθη παραμέτρων: 8 δισεκατομμύρια (8B) και 70 δισεκατομμύρια (70B). Οι χρήστες μπορούν να εγγραφούν για να έχουν πρόσβαση σε αυτές τις εκδόσεις. Το Llama 3 προσφέρεται σε δύο παραλλαγές: προ-εκπαιδευμένο, το οποίο είναι ένα βασικό μοντέλο για την πρόβλεψη του επόμενου token, και συντονισμένο με οδηγίες, το οποίο είναι λεπτομερώς ρυθμισμένο ώστε να συμμορφώνεται με τις εντολές του χρήστη. Και οι δύο εκδόσεις έχουν όριο πλαισίου 8.192 tokens.
Σε συνέντευξή του στον Dwarkesh Patel, ο Mark Zuckerberg, ο διευθύνων σύμβουλος της Meta, ανέφερε ότι εκπαίδευσαν δύο ειδικά κατασκευασμένα μοντέλα χρησιμοποιώντας ένα cluster 24.000 GPU. Το μοντέλο 70B εκπαιδεύτηκε με περίπου 15 τρισεκατομμύρια μάρκες δεδομένων και δεν έφτασε ποτέ σε σημείο κορεσμού ή σε όριο των δυνατοτήτων του. Στη συνέχεια, η Meta αποφάσισε να επικεντρωθεί στην εκπαίδευση άλλων μοντέλων. Η εταιρεία αποκάλυψε επίσης ότι εργάζεται επί του παρόντος σε μια έκδοση του Llama 3 με παραμέτρους 400B, η οποία, σύμφωνα με ειδικούς όπως ο Jim Fan της Nvidia, θα μπορούσε να έχει παρόμοιες επιδόσεις με τις GPT-4 Turbo, Claude 3 Opus και Gemini Ultra σε συγκριτικές δοκιμές όπως MMLU, GPQA, HumanEval και MATH.
Σύμφωνα με τη Meta, το Llama 3 έχει αξιολογηθεί με τη χρήση διαφόρων κριτηρίων αναφοράς, συμπεριλαμβανομένων των MMLU (γνώσεις προπτυχιακού επιπέδου), GSM-8K (μαθηματικά δημοτικού), HumanEval (κωδικοποίηση), GPQA (ερωτήσεις μεταπτυχιακού επιπέδου) και MATH (μαθηματικά προβλήματα λέξεων). Αυτά τα συγκριτικά κριτήρια αποδεικνύουν ότι το μοντέλο 8B υπερτερεί έναντι μοντέλων με ανοικτά βάρη, όπως το Gemma 7B και το Mistral 7B Instruct της Google, και το μοντέλο 70B είναι ανταγωνιστικό έναντι του Gemini Pro 1.5 και του Claude 3 Sonnet.
Η Meta αναφέρει ότι το μοντέλο Llama 3 έχει βελτιωθεί με την ικανότητα κατανόησης κωδικοποίησης, παρόμοια με το Llama 2, και για πρώτη φορά εκπαιδεύτηκε χρησιμοποιώντας εικόνες και κείμενο. Ωστόσο, η τρέχουσα παραγωγή του περιορίζεται στο κείμενο.
LLaMA 3 Benchmarks
Καθώς πολλοί οργανισμοί χρησιμοποιούν το AWS για τους φόρτους εργασίας παραγωγής τους, ας δούμε πώς να αναπτύξετε το LLaMA 3 στο AWS EC2.
Υπάρχουν πολλαπλά εμπόδια όσον αφορά την υλοποίηση των LLM, όπως η κατανάλωση VRAM (μνήμη GPU), η ταχύτητα εξαγωγής συμπερασμάτων, η απόδοση και η χρήση του χώρου στο δίσκο. Σε αυτό το σενάριο, πρέπει να διασφαλίσουμε ότι διαθέτουμε μια παρουσία GPU στο AWS EC2 με επαρκή χωρητικότητα VRAM για να υποστηρίξουμε την εκτέλεση των μοντέλων μας.
Το LLaMA 3 8B απαιτεί περίπου 16GB χώρου στο δίσκο και 20GB VRAM (μνήμη GPU) σε FP16. Θα μπορούσατε φυσικά να αναπτύξετε το LLaMA 3 σε μια CPU, αλλά η καθυστέρηση θα ήταν πολύ υψηλή για μια πραγματική περίπτωση χρήσης στην παραγωγή. Όσον αφορά την LLaMA 3 70B, απαιτεί περίπου 140GB χώρου στο δίσκο και 160GB VRAM στο FP16.
Το να αποκτήσετε 20GB VRAM για το LLaMA 3 8B είναι αρκετά εύκολο. Σας συνιστώ να προμηθεύεστε μια GPU NVIDIA A10: αυτή η GPU διαθέτει 24GB VRAM και είναι μια γρήγορη GPU που βασίζεται στην πλατφόρμα Ampere. Στο AWS EC2, θα πρέπει να επιλέξετε μια περίπτωση G5 προκειμένου να παρέχετε μια GPU A10. Ένα g5.xlarge θα είναι αρκετό.
Ωστόσο, η ανάπτυξη του μοντέλου LLaMA 3 70B είναι πολύ πιο δύσκολη. Καμία GPU δεν έχει αρκετή VRAM για αυτό το μοντέλο, οπότε θα πρέπει να παρέχετε μια περίπτωση πολλαπλών GPU. Αν παρέχετε μια περίπτωση g5.48xlarge στο AWS, θα έχετε 192 GB VRAM (8 x GPU A10), η οποία είναι αρκετή για το LLaMA 3 70B.
Σε μια τέτοια διαμόρφωση, μπορείτε να περιμένετε τις ακόλουθες καθυστερήσεις (χρόνοι απόκρισης): για το LLaMA 3 8B, και 50 tokens που παράγονται σε 5 δευτερόλεπτα για το LLaMA 3 70B.
Προκειμένου να μειώσετε το λειτουργικό κόστος αυτών των μοντέλων και να αυξήσετε την καθυστέρηση, μπορείτε να διερευνήσετε τεχνικές κβαντισμού, αλλά πρέπει να γνωρίζετε ότι τέτοιες βελτιστοποιήσεις μπορεί να βλάψουν την ακρίβεια του μοντέλου σας. Η κβάντιση δεν εμπίπτει στο πεδίο εφαρμογής αυτού του άρθρου.
Για να παρέχετε τέτοιες περιπτώσεις, συνδεθείτε στην κονσόλα AWS EC2 και εκκινήστε μια νέα περίπτωση: επιλέξτε το AMI βαθιάς μάθησης NVIDIA, σε μια περίπτωση g5.xlarge ή g5.48xlarge. Μην ξεχάσετε επίσης να προβλέψετε αρκετό χώρο στο δίσκο.
Η vLLM είναι μια βιβλιοθήκη σχεδιασμένη για γρήγορη και εύκολη εξαγωγή συμπερασμάτων και ανάπτυξη LLM. Η αποτελεσματικότητά της αποδίδεται σε διάφορες εξελιγμένες μεθόδους, όπως η σελιδοποιημένη προσοχή για τη βέλτιστη διαχείριση της μνήμης κλειδιών και τιμών προσοχής, η επεξεργασία σε πραγματικό χρόνο των εισερχόμενων ερωτημάτων σε δέσμες και οι εξατομικευμένοι πυρήνες CUDA.
Επιπλέον, το vLLM παρέχει υψηλό βαθμό προσαρμοστικότητας, χρησιμοποιώντας κατανεμημένους υπολογισμούς (χρησιμοποιώντας παραλληλισμό τανυστών), ροή σε πραγματικό χρόνο και συμβατότητα με κάρτες γραφικών NVIDIA και AMD.
Συγκεκριμένα, το vLLM θα βοηθήσει σημαντικά στην ανάπτυξη του LLaMA 3, επιτρέποντάς μας να χρησιμοποιήσουμε στιγμιότυπα AWS EC2 εξοπλισμένα με αρκετές συμπαγείς GPU NVIDIA A10. Αυτό είναι πλεονέκτημα σε σχέση με τη χρήση μίας μόνο μεγάλης GPU, όπως η NVIDIA A100 ή H100. Επιπλέον, η vLLM θα βελτιώσει σημαντικά την αποδοτικότητα του μοντέλου μας μέσω της συνεχούς εξαγωγής συμπερασμάτων σε δέσμες.
Η ρύθμιση του vLLM είναι αρκετά απλή. Ας δημιουργήσουμε μια σύνδεση SSH στην πρόσφατα δημιουργηθείσα παρουσία μας στο AWS και ας εγκαταστήσουμε το vLLM χρησιμοποιώντας το pip:
pip install vllm
Δεδομένου ότι σκοπεύουμε να εκτελέσουμε κατανεμημένη εξαγωγή συμπερασμάτων χρησιμοποιώντας το vLLM σε 8 x A10 GPUs, απαιτείται επίσης η εγκατάσταση του Ray:
pip install ray
Σε περίπτωση που αντιμετωπίσετε προβλήματα συμβατότητας κατά την εγκατάσταση, μπορεί να είναι απλούστερο για εσάς να μεταγλωττίσετε το vLLM από τον πηγαίο κώδικα ή να χρησιμοποιήσετε την εικόνα του Docker: ρίξτε μια ματιά στις οδηγίες εγκατάστασης του vLLM.
Τώρα ας δημιουργήσουμε το σενάριο συμπερασμού Python:
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?"))
Μπορείτε να εκτελέσετε το παραπάνω σενάριο. Αν είναι η πρώτη φορά που εκτελείτε αυτό το σενάριο, θα πρέπει να περιμένετε να γίνει λήψη και φόρτωση του μοντέλου στην GPU, και στη συνέχεια θα λάβετε κάτι σαν αυτό:
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
Είναι αρκετά απλό να το καταλάβετε. Απλώς πρέπει να προσαρμόσετε το tensor_parallel_size ανάλογα με τον αριθμό των GPU που διαθέτετε.
Αναζητούμε τώρα την έναρξη ενός κατάλληλου διακομιστή συμπερασμάτων, ο οποίος θα μπορεί να διαχειρίζεται πολυάριθμα αιτήματα και να εκτελεί ταυτόχρονα συμπεράσματα. Για να ξεκινήσουμε, εκκινήστε τον διακομιστή:
Για το LLaMA 3 8B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct
Για το LLaMA 3 70B:
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8
Το μοντέλο θα χρειαστεί έως και 1 λεπτό για να φορτωθεί στην GPU. Στη συνέχεια, μπορείτε να ξεκινήσετε ένα δεύτερο τερματικό και να αρχίσετε να κάνετε κάποια αιτήματα:
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?"
}'
Τώρα έχετε έναν κατάλληλο διακομιστή συμπερασμού έτοιμο για παραγωγή, ο οποίος μπορεί να χειριστεί πολλές παράλληλες αιτήσεις χάρη στη συνεχή ομαδοποίηση. Κάποια στιγμή, αν ο αριθμός των αιτήσεων είναι πολύ μεγάλος, η GPU θα υπερφορτωθεί όμως. Σε αυτή την περίπτωση θα πρέπει να αντιγράψετε το μοντέλο σε πολλές περιπτώσεις GPU και να εξισορροπήσετε το φορτίο των αιτημάτων σας (αλλά αυτό δεν είναι αντικείμενο αυτού του άρθρου).
Όπως μπορείτε να δείτε, η ανάπτυξη του LLaMA 3 στην παραγωγή δεν απαιτεί πολύπλοκο κώδικα χάρη σε διακομιστές συμπερασμού όπως ο vLLM.
Ωστόσο, η παροχή του κατάλληλου υλικού αποτελεί πρόκληση. Πρώτον, επειδή αυτές οι GPU είναι πολύ δαπανηρές, αλλά και λόγω της τρέχουσας παγκόσμιας έλλειψης GPU. Αν είναι η πρώτη φορά που προσπαθείτε να παρέχετε έναν διακομιστή GPU στο AWS, ίσως να μην έχετε την άδεια να δημιουργήσετε έναν διακομιστή GPU. Σε αυτή την περίπτωση θα πρέπει να επικοινωνήσετε με την υποστήριξη και να εξηγήσετε την περίπτωση χρήσης σας. Σε αυτό το άρθρο χρησιμοποιήσαμε το AWS EC2, αλλά υπάρχουν φυσικά και άλλοι προμηθευτές (Azure, GCP, OVH, Scaleway...).
Αν δεν ενδιαφέρεστε να αναπτύξετε το LLaMA 3 μόνοι σας, σας προτείνουμε να χρησιμοποιήσετε το NLP Cloud API. Αυτή η επιλογή μπορεί να είναι πιο αποτελεσματική και ενδεχομένως πολύ πιο αποδοτική από τη διαχείριση της δικής σας υποδομής LLaMA 3. Δοκιμάστε το LLaMA 3 στο NLP Cloud τώρα!
Αν έχετε ερωτήσεις σχετικά με το LLaMA 3 και την ανάπτυξη της AI γενικότερα, μη διστάσετε να μας ρωτήσετε, είναι πάντα χαρά μας να σας βοηθήσουμε!
Julien
CTO στο NLP Cloud