Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού της Amazon

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού της Amazon

Τα μοντέλα μεγάλων γλωσσών ανοιχτού κώδικα (LLM) έχουν γίνει δημοφιλή, επιτρέποντας σε ερευνητές, προγραμματιστές και οργανισμούς να έχουν πρόσβαση σε αυτά τα μοντέλα για την προώθηση της καινοτομίας και του πειραματισμού. Αυτό ενθαρρύνει τη συνεργασία από την κοινότητα ανοιχτού κώδικα για να συμβάλει στην ανάπτυξη και τη βελτίωση των LLM. Τα LLM ανοιχτού κώδικα παρέχουν διαφάνεια στην αρχιτεκτονική του μοντέλου, τη διαδικασία εκπαίδευσης και τα δεδομένα εκπαίδευσης, τα οποία επιτρέπουν στους ερευνητές να κατανοήσουν πώς λειτουργεί το μοντέλο και να εντοπίσουν πιθανές προκαταλήψεις και να αντιμετωπίσουν ηθικά ζητήματα. Αυτά τα LLM ανοιχτού κώδικα εκδημοκρατίζουν τη γενετική τεχνητή νοημοσύνη καθιστώντας την προηγμένη τεχνολογία επεξεργασίας φυσικής γλώσσας (NLP) διαθέσιμη σε ένα ευρύ φάσμα χρηστών για τη δημιουργία επιχειρηματικών εφαρμογών κρίσιμων για την αποστολή. Τα GPT-NeoX, LLaMA, Alpaca, GPT4All, Vicuna, Dolly και OpenAssistant είναι μερικά από τα δημοφιλή LLM ανοιχτού κώδικα.

OpenChatKit είναι ένα LLM ανοιχτού κώδικα που χρησιμοποιείται για τη δημιουργία γενικής χρήσης και εξειδικευμένων εφαρμογών chatbot, που κυκλοφόρησε από την Together Computer τον Μάρτιο του 2023 με την άδεια Apache-2.0. Αυτό το μοντέλο επιτρέπει στους προγραμματιστές να έχουν περισσότερο έλεγχο στη συμπεριφορά του chatbot και να το προσαρμόσουν στις συγκεκριμένες εφαρμογές τους. Το OpenChatKit παρέχει ένα σύνολο εργαλείων, βασικό bot και δομικά στοιχεία για τη δημιουργία πλήρως προσαρμοσμένων, ισχυρών chatbot. Τα βασικά στοιχεία είναι τα εξής:

  • Ένα LLM συντονισμένο με οδηγίες, βελτιωμένο για συνομιλία από το GPT-NeoX-20B της EleutherAI με περισσότερες από 43 εκατομμύρια οδηγίες σε υπολογισμό 100% αρνητικού άνθρακα. ο GPT-NeoXT-Chat-Base-20B Το μοντέλο βασίζεται στο μοντέλο GPT-NeoX της EleutherAI και είναι τελειοποιημένο με δεδομένα που εστιάζουν σε αλληλεπιδράσεις τύπου διαλόγου.
  • Συνταγές προσαρμογής για να τελειοποιήσετε το μοντέλο για να επιτύχετε υψηλή ακρίβεια στις εργασίες σας.
  • Ένα επεκτάσιμο σύστημα ανάκτησης που σας δίνει τη δυνατότητα να αυξάνετε τις αποκρίσεις του bot με πληροφορίες από ένα χώρο αποθήκευσης εγγράφων, API ή άλλη πηγή πληροφοριών ζωντανής ενημέρωσης κατά τη στιγμή της εξαγωγής συμπερασμάτων.
  • Ένα μοντέλο εποπτείας, βελτιστοποιημένο από το GPT-JT-6B, σχεδιασμένο να φιλτράρει τις ερωτήσεις στις οποίες απαντά το bot.

Η αυξανόμενη κλίμακα και το μέγεθος των μοντέλων βαθιάς μάθησης παρουσιάζουν εμπόδια για την επιτυχή ανάπτυξη αυτών των μοντέλων σε εφαρμογές παραγωγής τεχνητής νοημοσύνης. Για να ικανοποιηθούν οι απαιτήσεις για χαμηλό λανθάνοντα χρόνο και υψηλή απόδοση, είναι απαραίτητο να χρησιμοποιηθούν εξελιγμένες μέθοδοι όπως ο παραλληλισμός μοντέλων και η κβαντοποίηση. Ελλείψει επάρκειας στην εφαρμογή αυτών των μεθόδων, πολλοί χρήστες αντιμετωπίζουν δυσκολίες στην εκκίνηση της φιλοξενίας σημαντικών μοντέλων για γενετικές περιπτώσεις χρήσης τεχνητής νοημοσύνης.

Σε αυτήν την ανάρτηση, δείχνουμε πώς να αναπτύξετε μοντέλα OpenChatKit (GPT-NeoXT-Chat-Base-20B and GPT-JT-Moderation-6B) μοντέλα σε Amazon Sage Maker χρησιμοποιώντας DJL Serving και παράλληλες βιβλιοθήκες μοντέλων ανοιχτού κώδικα, όπως DeepSpeed ​​και Hugging Face Accelerate. Χρησιμοποιούμε το DJL Serving, το οποίο είναι μια καθολική λύση εξυπηρέτησης μοντέλων υψηλής απόδοσης που υποστηρίζεται από τη Βιβλιοθήκη Deep Java (DJL) που είναι αγνωστική γλώσσα προγραμματισμού. Δείχνουμε πώς η βιβλιοθήκη Hugging Face Accelerate απλοποιεί την ανάπτυξη μεγάλων μοντέλων σε πολλαπλές GPU, μειώνοντας έτσι τον φόρτο λειτουργίας των LLM με κατανεμημένο τρόπο. Ας αρχίσουμε!

Επεκτάσιμο σύστημα ανάκτησης

Ένα επεκτάσιμο σύστημα ανάκτησης είναι ένα από τα βασικά στοιχεία του OpenChatKit. Σας δίνει τη δυνατότητα να προσαρμόσετε την απόκριση του bot με βάση μια βάση γνώσεων κλειστού τομέα. Αν και τα LLM είναι σε θέση να διατηρούν πραγματικές γνώσεις στις παραμέτρους του μοντέλου τους και μπορούν να επιτύχουν αξιοσημείωτη απόδοση σε εργασίες μεταγενέστερου NLP όταν ρυθμιστούν με ακρίβεια, η ικανότητά τους να έχουν πρόσβαση και να προβλέψουν με ακρίβεια τη γνώση κλειστού τομέα παραμένει περιορισμένη. Ως εκ τούτου, όταν παρουσιάζονται εργασίες έντασης γνώσης, η απόδοσή τους υποφέρει από αυτήν των αρχιτεκτονικών συγκεκριμένων εργασιών. Μπορείτε να χρησιμοποιήσετε το σύστημα ανάκτησης OpenChatKit για να αυξήσετε τη γνώση στις απαντήσεις τους από εξωτερικές πηγές γνώσης όπως η Wikipedia, αποθετήρια εγγράφων, API και άλλες πηγές πληροφοριών.

Το σύστημα ανάκτησης επιτρέπει στο chatbot να έχει πρόσβαση σε τρέχουσες πληροφορίες λαμβάνοντας σχετικές λεπτομέρειες ως απάντηση σε ένα συγκεκριμένο ερώτημα, παρέχοντας έτσι το απαραίτητο πλαίσιο για το μοντέλο να παράγει απαντήσεις. Για να δείξουμε τη λειτουργικότητα αυτού του συστήματος ανάκτησης, παρέχουμε υποστήριξη για ένα ευρετήριο άρθρων της Wikipedia και προσφέρουμε παράδειγμα κώδικα που δείχνει πώς να καλέσετε ένα API αναζήτησης Ιστού για ανάκτηση πληροφοριών. Ακολουθώντας την παρεχόμενη τεκμηρίωση, μπορείτε να ενσωματώσετε το σύστημα ανάκτησης με οποιοδήποτε σύνολο δεδομένων ή API κατά τη διαδικασία συμπερασμάτων, επιτρέποντας στο chatbot να ενσωματώνει δυναμικά ενημερωμένα δεδομένα στις απαντήσεις του.

Μοντέλο μετριοπάθειας

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

Το OpenChatKit έχει ένα μοντέλο εποπτείας 6 δισεκατομμυρίων παραμέτρων, GPT-JT-Moderation-6B, το οποίο μπορεί να εποπτεύσει το chatbot για να περιορίσει τις εισόδους στα εποπτευόμενα θέματα. Αν και το ίδιο το μοντέλο έχει ενσωματωμένη κάποια μετριοπάθεια, το TogetherComputer εκπαιδεύτηκε α GPT-JT-Moderation-6B μοντέλο με το Ontocord.ai's Σύνολο δεδομένων εποπτείας OIG. Αυτό το μοντέλο εκτελείται παράλληλα με το κύριο chatbot για να ελέγξει ότι τόσο η εισαγωγή χρήστη όσο και η απάντηση από το bot δεν περιέχουν ακατάλληλα αποτελέσματα. Μπορείτε επίσης να το χρησιμοποιήσετε για να εντοπίσετε τυχόν ερωτήσεις εκτός τομέα στο chatbot και να παρακάμψετε όταν η ερώτηση δεν αποτελεί μέρος του τομέα του chatbot.

Το παρακάτω διάγραμμα απεικονίζει τη ροή εργασίας του OpenChatKit.

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Θήκες χρήσης επεκτάσιμου συστήματος ανάκτησης

Παρόλο που μπορούμε να εφαρμόσουμε αυτήν την τεχνική σε διάφορους κλάδους για τη δημιουργία γενετικών εφαρμογών τεχνητής νοημοσύνης, για αυτήν την ανάρτηση συζητάμε περιπτώσεις χρήσης στον χρηματοπιστωτικό κλάδο. Η επαυξημένη παραγωγή ανάκτησης μπορεί να χρησιμοποιηθεί στη χρηματοοικονομική έρευνα για την αυτόματη δημιουργία αναφορών έρευνας για συγκεκριμένες εταιρείες, βιομηχανίες ή χρηματοοικονομικά προϊόντα. Με την ανάκτηση σχετικών πληροφοριών από εσωτερικές βάσεις γνώσεων, οικονομικά αρχεία, άρθρα ειδήσεων και ερευνητικές εργασίες, μπορείτε να δημιουργήσετε εκτενείς αναφορές που συνοψίζουν βασικές πληροφορίες, οικονομικές μετρήσεις, τάσεις της αγοράς και επενδυτικές προτάσεις. Μπορείτε να χρησιμοποιήσετε αυτήν τη λύση για να παρακολουθείτε και να αναλύετε τα οικονομικά νέα, το κλίμα της αγοράς και τις τάσεις.

Επισκόπηση λύσεων

Τα ακόλουθα βήματα αφορούν τη δημιουργία ενός chatbot χρησιμοποιώντας μοντέλα OpenChatKit και την ανάπτυξη τους στο SageMaker:

  1. Κατεβάστε τη βάση συνομιλίας GPT-NeoXT-Chat-Base-20B μοντελοποιήστε και συσκευάστε τα τεχνουργήματα του μοντέλου που θα μεταφορτωθούν Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3).
  2. Χρησιμοποιήστε ένα κοντέινερ συμπερασμάτων μεγάλου μοντέλου SageMaker (LMI), διαμορφώστε τις ιδιότητες και ρυθμίστε προσαρμοσμένο κώδικα συμπερασμάτων για την ανάπτυξη αυτού του μοντέλου.
  3. Διαμόρφωση παράλληλων τεχνικών μοντέλων και χρήση βιβλιοθηκών βελτιστοποίησης συμπερασμάτων σε ιδιότητες εξυπηρέτησης DJL. Θα χρησιμοποιήσουμε το Hugging Face Accelerate ως κινητήρα για το σερβίρισμα DJL. Επιπλέον, ορίζουμε παράλληλες διαμορφώσεις τανυστών για να χωρίσουμε το μοντέλο.
  4. Δημιουργήστε ένα μοντέλο SageMaker και διαμόρφωση τελικού σημείου και αναπτύξτε το τελικό σημείο SageMaker.

Μπορείτε να ακολουθήσετε τρέχοντας το σημειωματάριο στο GitHub repo.

Κατεβάστε το μοντέλο OpenChatKit

Αρχικά, κατεβάζουμε το βασικό μοντέλο OpenChatKit. Χρησιμοποιούμε huggingface_hub Και χρήση snapshot_download για λήψη του μοντέλου, το οποίο κατεβάζει ολόκληρο το αποθετήριο σε μια δεδομένη αναθεώρηση. Οι λήψεις γίνονται ταυτόχρονα για να επιταχυνθεί η διαδικασία. Δείτε τον παρακάτω κώδικα:

from huggingface_hub import snapshot_download
from pathlib import Path
import os
# - This will download the model into the current directory where ever the jupyter notebook is running
local_model_path = Path("./openchatkit")
local_model_path.mkdir(exist_ok=True)
model_name = "togethercomputer/GPT-NeoXT-Chat-Base-20B"
# Only download pytorch checkpoint files
allow_patterns = ["*.json", "*.pt", "*.bin", "*.txt", "*.model"]
# - Leverage the snapshot library to donload the model since the model is stored in repository using LFS
chat_model_download_path = snapshot_download( repo_id=model_name,#A user or an organization name and a repo name cache_dir=local_model_path, #Path to the folder where cached files are stored. allow_patterns=allow_patterns, #only files matching at least one pattern are downloaded.
)

Ιδιότητες εξυπηρέτησης DJL

Μπορείτε να χρησιμοποιήσετε κοντέινερ SageMaker LMI για να φιλοξενήσετε μεγάλα μοντέλα τεχνητής νοημοσύνης που δημιουργούνται με προσαρμοσμένο κώδικα συμπερασμάτων χωρίς να παρέχετε τον δικό σας κωδικό συμπερασμάτων. Αυτό είναι εξαιρετικά χρήσιμο όταν δεν υπάρχει προσαρμοσμένη προεπεξεργασία των δεδομένων εισόδου ή μεταεπεξεργασία των προβλέψεων του μοντέλου. Μπορείτε επίσης να αναπτύξετε ένα μοντέλο χρησιμοποιώντας προσαρμοσμένο κώδικα συμπερασμάτων. Σε αυτήν την ανάρτηση, δείχνουμε πώς να αναπτύξετε μοντέλα OpenChatKit με προσαρμοσμένο κώδικα συμπερασμάτων.

Το SageMaker αναμένει τα τεχνουργήματα του μοντέλου σε μορφή tar. Δημιουργούμε κάθε μοντέλο OpenChatKit με τα ακόλουθα αρχεία: serving.properties και model.py.

Η serving.properties Το αρχείο διαμόρφωσης υποδεικνύει στο DJL Serving ποιες βιβλιοθήκες παραλληλοποίησης μοντέλων και βελτιστοποίησης συμπερασμάτων θέλετε να χρησιμοποιήσετε. Ακολουθεί μια λίστα με τις ρυθμίσεις που χρησιμοποιούμε σε αυτό το αρχείο διαμόρφωσης:

openchatkit/serving.properties
engine = Python
option.tensor_parallel_degree = 4
option.s3url = {{s3url}}

Αυτό περιέχει τις ακόλουθες παραμέτρους:

  • κινητήρας – Ο κινητήρας για χρήση του DJL.
  • option.entryPoint – Το αρχείο ή λειτουργική μονάδα Python σημείου εισόδου. Αυτό θα πρέπει να ευθυγραμμίζεται με τον κινητήρα που χρησιμοποιείται.
  • option.s3url – Ρυθμίστε το στο URI του κάδου S3 που περιέχει το μοντέλο.
  • επιλογή.μοντελισμένο – Εάν θέλετε να κατεβάσετε το μοντέλο από το huggingface.co, μπορείτε να ορίσετε option.modelid στο αναγνωριστικό μοντέλου ενός προεκπαιδευμένου μοντέλου που φιλοξενείται μέσα σε ένα αποθετήριο μοντέλων στο huggingface.co (https://huggingface.co/models). Το κοντέινερ χρησιμοποιεί αυτό το αναγνωριστικό μοντέλου για τη λήψη του αντίστοιχου αποθετηρίου μοντέλων στο huggingface.co.
  • επιλογή.tensor_parallel_degree – Ρυθμίστε τον στον αριθμό των συσκευών GPU στις οποίες το DeepSpeed ​​χρειάζεται να χωρίσει το μοντέλο. Αυτή η παράμετρος ελέγχει επίσης τον αριθμό των εργαζομένων ανά μοντέλο που θα ξεκινήσει όταν εκτελείται η υπηρεσία DJL. Για παράδειγμα, εάν έχουμε μια μηχανή 8 GPU και δημιουργούμε οκτώ διαμερίσματα, τότε θα έχουμε έναν εργαζόμενο ανά μοντέλο για να εξυπηρετεί τα αιτήματα. Είναι απαραίτητο να συντονιστεί ο βαθμός παραλληλισμού και να προσδιοριστεί η βέλτιστη τιμή για μια δεδομένη αρχιτεκτονική μοντέλου και πλατφόρμα υλικού. Αυτή την ικανότητα την ονομάζουμε παραλληλισμός προσαρμοσμένος σε συμπεράσματα.

Αναφέρομαι σε Διαμορφώσεις και ρυθμίσεις για μια εξαντλητική λίστα επιλογών.

Μοντέλα OpenChatKit

Η υλοποίηση του βασικού μοντέλου OpenChatKit έχει τα ακόλουθα τέσσερα αρχεία:

  • model.py – Αυτό το αρχείο υλοποιεί τη λογική χειρισμού για το κύριο μοντέλο OpenChatKit GPT-NeoX. Λαμβάνει το αίτημα εισαγωγής συμπερασμάτων, φορτώνει το μοντέλο, φορτώνει το ευρετήριο της Wikipedia και εξυπηρετεί την απάντηση. Αναφέρομαι σε model.py(δημιουργήθηκε μέρος του σημειωματάριου) για επιπλέον λεπτομέρειες. model.py χρησιμοποιεί τις ακόλουθες βασικές κλάσεις:
    • OpenChatKitService – Αυτό χειρίζεται τη μετάδοση των δεδομένων μεταξύ του μοντέλου GPT-NeoX, της αναζήτησης Faiss και του αντικειμένου συνομιλίας. WikipediaIndex και Conversation Τα αντικείμενα αρχικοποιούνται και οι συνομιλίες εισόδου αποστέλλονται στο ευρετήριο για αναζήτηση σχετικού περιεχομένου από τη Wikipedia. Αυτό δημιουργεί επίσης ένα μοναδικό αναγνωριστικό για κάθε επίκληση, εάν δεν παρέχεται με σκοπό την αποθήκευση των προτροπών στο Amazon DynamoDB.
    • ChatModel – Αυτή η κλάση φορτώνει το μοντέλο και το tokenizer και δημιουργεί την απόκριση. Χειρίζεται την κατάτμηση του μοντέλου σε πολλαπλές GPU χρησιμοποιώντας tensor_parallel_degree, και διαμορφώνει το dtypes και device_map. Οι προτροπές περνούν στο μοντέλο για τη δημιουργία απαντήσεων. Ένα κριτήριο διακοπής StopWordsCriteria έχει ρυθμιστεί ώστε η γενιά να παράγει μόνο την απόκριση του bot σε συμπέρασμα.
    • ModerationModel – Χρησιμοποιούμε δύο μοντέλα μετριοπάθειας στο ModerationModel class: το μοντέλο εισόδου για να υποδείξει στο μοντέλο συνομιλίας ότι η είσοδος είναι ακατάλληλη για να παρακάμψει το αποτέλεσμα συμπερασμάτων και το μοντέλο εξόδου για να παρακάμψει το αποτέλεσμα συμπερασμάτων. Ταξινομούμε την εντολή εισόδου και την απόκριση εξόδου με τις ακόλουθες πιθανές ετικέτες:
      • ανέμελος
      • χρειάζεται προσοχή
      • χρειάζεται παρέμβαση (αυτό έχει επισημανθεί ότι εποπτεύεται από το μοντέλο)
      • πιθανώς χρειάζεται προσοχή
      • μάλλον χρειάζεται προσοχή
  • wikipedia_prepare.py – Αυτό το αρχείο χειρίζεται τη λήψη και την προετοιμασία του ευρετηρίου της Wikipedia. Σε αυτήν την ανάρτηση, χρησιμοποιούμε ένα ευρετήριο της Wikipedia που παρέχεται στα σύνολα δεδομένων Hugging Face. Για να κάνετε αναζήτηση στα έγγραφα της Wikipedia για σχετικό κείμενο, το ευρετήριο πρέπει να ληφθεί από το Hugging Face επειδή δεν είναι συσκευασμένο αλλού. ο wikipedia_prepare.py Το αρχείο είναι υπεύθυνο για το χειρισμό της λήψης κατά την εισαγωγή. Μόνο μία διεργασία στα πολλαπλάσια που εκτελούνται για συμπέρασμα μπορεί να κλωνοποιήσει το αποθετήριο. Τα υπόλοιπα περιμένουν μέχρι να εμφανιστούν τα αρχεία στο τοπικό σύστημα αρχείων.
  • wikipedia.py – Αυτό το αρχείο χρησιμοποιείται για την αναζήτηση στο ευρετήριο της Wikipedia για έγγραφα σχετικά με τα συμφραζόμενα. Το ερώτημα εισαγωγής είναι διακριτικό και οι ενσωματώσεις δημιουργούνται χρησιμοποιώντας mean_pooling. Υπολογίζουμε μετρήσεις απόστασης ομοιότητας συνημιτόνου μεταξύ της ενσωμάτωσης ερωτήματος και του ευρετηρίου της Wikipedia για να ανακτήσουμε προτάσεις της Wikipedia που σχετίζονται με τα συμφραζόμενα. Αναφέρομαι σε wikipedia.py για λεπτομέρειες υλοποίησης.
#function to create sentence embedding using mean_pooling
def mean_pooling(token_embeddings, mask): token_embeddings = token_embeddings.masked_fill(~mask[..., None].bool(), 0.0) sentence_embeddings = token_embeddings.sum(dim=1) / mask.sum(dim=1)[..., None] return sentence_embeddings #function to compute cosine similarity distance between 2 embeddings def cos_sim_2d(x, y): norm_x = x / np.linalg.norm(x, axis=1, keepdims=True) norm_y = y / np.linalg.norm(y, axis=1, keepdims=True) return np.matmul(norm_x, norm_y.T)

  • συνομιλία.py – Αυτό το αρχείο χρησιμοποιείται για την αποθήκευση και την ανάκτηση του νήματος συνομιλίας στο DynamoDB για διαβίβαση στο μοντέλο και στο χρήστη. conversation.py έχει προσαρμοστεί από το αποθετήριο OpenChatKit ανοιχτού κώδικα. Αυτό το αρχείο είναι υπεύθυνο για τον καθορισμό του αντικειμένου που αποθηκεύει τις στροφές συνομιλίας μεταξύ του ανθρώπου και του μοντέλου. Με αυτό, το μοντέλο μπορεί να διατηρήσει μια περίοδο λειτουργίας για τη συνομιλία, επιτρέποντας στον χρήστη να ανατρέξει σε προηγούμενα μηνύματα. Επειδή οι κλήσεις τελικού σημείου του SageMaker είναι ανύπαρκτες, αυτή η συνομιλία πρέπει να αποθηκευτεί σε μια τοποθεσία έξω από τις παρουσίες τελικού σημείου. Κατά την εκκίνηση, η παρουσία δημιουργεί έναν πίνακα DynamoDB εάν δεν υπάρχει. Όλες οι ενημερώσεις στη συνομιλία αποθηκεύονται στη συνέχεια στο DynamoDB με βάση το session_id κλειδί, το οποίο δημιουργείται από το τελικό σημείο. Οποιαδήποτε επίκληση με αναγνωριστικό περιόδου σύνδεσης θα ανακτήσει τη συσχετισμένη συμβολοσειρά συνομιλίας και θα την ενημερώσει όπως απαιτείται.

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

Η αναζήτηση ευρετηρίου χρησιμοποιεί το Facebook Faiss βιβλιοθήκη για την εκτέλεση της αναζήτησης ομοιότητας. Επειδή αυτό δεν περιλαμβάνεται στη βασική εικόνα LMI, το κοντέινερ πρέπει να προσαρμοστεί για την εγκατάσταση αυτής της βιβλιοθήκης. Ο παρακάτω κώδικας ορίζει ένα Dockerfile που εγκαθιστά το Faiss από την πηγή μαζί με άλλες βιβλιοθήκες που απαιτούνται από το τελικό σημείο του bot. Χρησιμοποιούμε το sm-docker βοηθητικό πρόγραμμα δημιουργίας και προώθησης της εικόνας Μητρώο εμπορευματοκιβωτίων Amazon Elastic (Amazon ECR) από Στούντιο Amazon SageMaker. Αναφέρομαι σε Χρησιμοποιώντας το Amazon SageMaker Studio Image Build CLI για να δημιουργήσετε εικόνες κοντέινερ από τους φορητούς υπολογιστές σας στο Studio Για περισσότερες πληροφορίες.

Το κοντέινερ DJL δεν έχει εγκατεστημένο το Conda, επομένως το Faiss πρέπει να κλωνοποιηθεί και να μεταγλωττιστεί από την πηγή. Για να εγκαταστήσετε το Faiss, πρέπει να εγκατασταθούν οι εξαρτήσεις για τη χρήση των API BLAS και της υποστήριξης Python. Αφού εγκατασταθούν αυτά τα πακέτα, το Faiss έχει ρυθμιστεί ώστε να χρησιμοποιεί AVX2 και CUDA πριν μεταγλωττιστεί με εγκατεστημένες τις επεκτάσεις Python.

pandas, fastparquet, boto3, να git-lfs εγκαθίστανται στη συνέχεια επειδή απαιτούνται για τη λήψη και την ανάγνωση των αρχείων ευρετηρίου.

FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.21.0-deepspeed0.8.0-cu117
ARG FAISS_URL=https://github.com/facebookresearch/faiss.git
RUN apt-get update && apt-get install -y git-lfs wget cmake pkg-config build-essential apt-utils
RUN apt search openblas && apt-get install -y libopenblas-dev swig
RUN git clone $FAISS_URL && cd faiss && cmake -B build . -DFAISS_OPT_LEVEL=avx2 -DCMAKE_CUDA_ARCHITECTURES="86" && make -C build -j faiss && make -C build -j swigfaiss && make -C build -j swigfaiss_avx2 && (cd build/faiss/python && python -m pip install ) RUN pip install pandas fastparquet boto3 && git lfs install --skip-repo && apt-get clean all

Δημιουργήστε το μοντέλο

Τώρα που έχουμε την εικόνα Docker στο Amazon ECR, μπορούμε να προχωρήσουμε στη δημιουργία του αντικειμένου μοντέλου SageMaker για τα μοντέλα OpenChatKit. αναπτύσσουμε GPT-NeoXT-Chat-Base-20B μοντέλα ελέγχου εισόδου και εξόδου χρησιμοποιώντας GPT-JT-Moderation-6B. Αναφέρομαι σε δημιουργία_μοντέλου Για περισσότερες πληροφορίες.

from sagemaker.utils import name_from_base chat_model_name = name_from_base(f"gpt-neoxt-chatbase-ds")
print(chat_model_name) create_model_response = sm_client.create_model( ModelName=chat_model_name, ExecutionRoleArn=role, PrimaryContainer={ "Image": chat_inference_image_uri, "ModelDataUrl": s3_code_artifact, },
)
chat_model_arn = create_model_response["ModelArn"] print(f"Created Model: {chat_model_arn}")

Διαμορφώστε το τελικό σημείο

Στη συνέχεια, ορίζουμε τις διαμορφώσεις τελικού σημείου για τα μοντέλα OpenChatKit. Αναπτύσσουμε τα μοντέλα χρησιμοποιώντας τον τύπο παρουσίας ml.g5.12xlarge. Αναφέρομαι σε create_endpoint_config Για περισσότερες πληροφορίες.

chat_endpoint_config_name = f"{chat_model_name}-config"
chat_endpoint_name = f"{chat_model_name}-endpoint" chat_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=chat_endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": chat_model_name, "InstanceType": "ml.g5.12xlarge", "InitialInstanceCount": 1, "ContainerStartupHealthCheckTimeoutInSeconds": 3600, }, ],
)

Αναπτύξτε το τελικό σημείο

Τέλος, δημιουργούμε ένα τελικό σημείο χρησιμοποιώντας το μοντέλο και τη διαμόρφωση τελικού σημείου που ορίσαμε στα προηγούμενα βήματα:

chat_create_endpoint_response = sm_client.create_endpoint(
EndpointName=f"{chat_endpoint_name}", EndpointConfigName=chat_endpoint_config_name
)
print(f"Created Endpoint: {chat_create_endpoint_response['EndpointArn']},")

Εκτελέστε συμπεράσματα από μοντέλα OpenChatKit

Τώρα είναι ώρα να στείλετε αιτήματα συμπερασμάτων στο μοντέλο και να λάβετε τις απαντήσεις. Περνάμε την προτροπή κειμένου εισαγωγής και τις παραμέτρους του μοντέλου όπως π.χ temperature, top_k, να max_new_tokens. Η ποιότητα των αποκρίσεων του chatbot βασίζεται στις παραμέτρους που καθορίζονται, επομένως συνιστάται η συγκριτική αξιολόγηση της απόδοσης του μοντέλου σε σχέση με αυτές τις παραμέτρους για να βρείτε τη βέλτιστη ρύθμιση για την περίπτωση χρήσης σας. Η προτροπή εισόδου αποστέλλεται πρώτα στο μοντέλο ελέγχου εισόδου και η έξοδος αποστέλλεται στο ChatModel για να δημιουργήσετε τις απαντήσεις. Κατά τη διάρκεια αυτού του βήματος, το μοντέλο χρησιμοποιεί το ευρετήριο της Wikipedia για να ανακτήσει ενότητες που σχετίζονται με τα συμφραζόμενα στο μοντέλο ως την προτροπή για λήψη απαντήσεων για συγκεκριμένο τομέα από το μοντέλο. Τέλος, η απόκριση του μοντέλου αποστέλλεται στο μοντέλο ελέγχου εξόδου για έλεγχο ταξινόμησης και, στη συνέχεια, επιστρέφονται οι απαντήσεις. Δείτε τον παρακάτω κώδικα:

def chat(prompt, session_id=None, **kwargs): if session_id: chat_response_model = smr_client.invoke_endpoint( EndpointName=chat_endpoint_name, Body=json.dumps( { "inputs": prompt, "parameters": { "temperature": 0.6, "top_k": 40, "max_new_tokens": 512, "session_id": session_id, "no_retrieval": True, }, } ), ContentType="application/json", ) else: chat_response_model = smr_client.invoke_endpoint( EndpointName=chat_endpoint_name, Body=json.dumps( { "inputs": prompt, "parameters": { "temperature": 0.6, "top_k": 40, "max_new_tokens": 512, }, } ), ContentType="application/json", ) response = chat_response_model["Body"].read().decode("utf8") return response
prompts = "What does a data engineer do?"
chat(prompts)

Ανατρέξτε στα δείγματα αλληλεπιδράσεων συνομιλίας παρακάτω.

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

εκκαθάριση

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

Συμπέρασμα

Σε αυτήν την ανάρτηση, συζητήσαμε τη σημασία των LLM ανοιχτού κώδικα και τον τρόπο ανάπτυξης ενός μοντέλου OpenChatKit στο SageMaker για τη δημιουργία εφαρμογών chatbot επόμενης γενιάς. Συζητήσαμε διάφορα στοιχεία μοντέλων OpenChatKit, μοντέλα εποπτείας και πώς να χρησιμοποιήσετε μια εξωτερική πηγή γνώσης όπως η Wikipedia για την ανάκτηση ροών εργασίας επαυξημένης παραγωγής (RAG). Μπορείτε να βρείτε οδηγίες βήμα προς βήμα στο Σημειωματάριο GitHub. Ενημερώστε μας για τις καταπληκτικές εφαρμογές chatbot που δημιουργείτε. Στην υγειά σας!


Σχετικά με τους Συγγραφείς

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Dhawal Patel είναι Κύριος Αρχιτέκτονας Μηχανικής Μάθησης στο AWS. Έχει συνεργαστεί με οργανισμούς που κυμαίνονται από μεγάλες επιχειρήσεις έως νεοφυείς επιχειρήσεις μεσαίου μεγέθους για προβλήματα που σχετίζονται με τους κατανεμημένους υπολογιστές και την Τεχνητή Νοημοσύνη. Εστιάζεται στη Deep Learning, συμπεριλαμβανομένων των τομέων NLP και Computer Vision. Βοηθά τους πελάτες να επιτύχουν συμπεράσματα μοντέλων υψηλής απόδοσης στο SageMaker.

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Vikram Elango είναι Sr. AIML Specialist Solutions Architect στην AWS, με έδρα τη Βιρτζίνια των ΗΠΑ. Επί του παρόντος, επικεντρώνεται στη δημιουργία τεχνητής νοημοσύνης, τα LLM, την άμεση μηχανική, τη βελτιστοποίηση συμπερασμάτων μεγάλων μοντέλων και την κλιμάκωση της ML σε όλες τις επιχειρήσεις. Η Vikram βοηθά τους πελάτες του χρηματοοικονομικού και ασφαλιστικού κλάδου με ηγετικό σχεδιασμό και σκέψη να δημιουργήσουν και να αναπτύξουν εφαρμογές μηχανικής εκμάθησης σε κλίμακα. Στον ελεύθερο χρόνο του, του αρέσει να ταξιδεύει, να κάνει πεζοπορία, να μαγειρεύει και να κατασκηνώνει με την οικογένειά του.

Δημιουργήστε προσαρμοσμένες εφαρμογές chatbot χρησιμοποιώντας μοντέλα OpenChatkit στο Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Andrew Smith είναι Μηχανικός Υποστήριξης Cloud στην ομάδα SageMaker, Vision & Other στο AWS, με έδρα το Σίδνεϊ της Αυστραλίας. Υποστηρίζει πελάτες που χρησιμοποιούν πολλές υπηρεσίες AI/ML στο AWS με εξειδίκευση στη συνεργασία με το Amazon SageMaker. Εκτός δουλειάς, του αρέσει να περνά χρόνο με φίλους και οικογένεια, καθώς και να μαθαίνει για διαφορετικές τεχνολογίες.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS