Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού της Amazon

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού της Amazon

Τον Ιανουάριο του 2024, Amazon Sage Maker κυκλοφόρησε μια νέα έκδοση (0.26.0) των Large Model Inference (LMI) Deep Learning Containers (DLCs). Αυτή η έκδοση προσφέρει υποστήριξη για νέα μοντέλα (συμπεριλαμβανομένου του Mixture of Experts), βελτιώσεις απόδοσης και χρηστικότητας σε backends συμπερασμάτων, καθώς και λεπτομέρειες νέας γενιάς για αυξημένο έλεγχο και επεξήγηση πρόβλεψης (όπως λόγος ολοκλήρωσης παραγωγής και πιθανότητες καταγραφής επιπέδου διακριτικού).

Τα LMI DLC προσφέρουν μια διεπαφή χαμηλού κώδικα που απλοποιεί τη χρήση τεχνικών και υλικού τελευταίας τεχνολογίας βελτιστοποίησης συμπερασμάτων. Το LMI σάς επιτρέπει να εφαρμόσετε παραλληλισμό τανυστών. τις πιο πρόσφατες αποτελεσματικές τεχνικές προσοχής, ομαδοποίησης, κβαντοποίησης και διαχείρισης μνήμης. συμβολική ροή? και πολλά άλλα, απαιτώντας απλώς το αναγνωριστικό μοντέλου και τις προαιρετικές παραμέτρους μοντέλου. Με τα DLC LMI στο SageMaker, μπορείτε να επιταχύνετε το χρόνο-to-value για εσάς γενετική τεχνητή νοημοσύνη (AI) εφαρμογές, αποφόρτωση βαρέων βαρών που σχετίζονται με υποδομές και βελτιστοποίηση μοντέλων μεγάλων γλωσσών (LLM) για το υλικό της επιλογής σας για να επιτύχετε την καλύτερη τιμή-απόδοση στην κατηγορία του.

Σε αυτήν την ανάρτηση, εξερευνούμε τις πιο πρόσφατες δυνατότητες που εισάγονται σε αυτήν την έκδοση, εξετάζουμε σημεία αναφοράς απόδοσης και παρέχουμε έναν λεπτομερή οδηγό για την ανάπτυξη νέων LLM με LMI DLC σε υψηλή απόδοση.

Νέες δυνατότητες με LMI DLC

Σε αυτήν την ενότητα, συζητάμε νέες δυνατότητες σε όλα τα backends LMI και εξετάζουμε κάποιες άλλες που αφορούν συγκεκριμένα το backend. Το LMI υποστηρίζει επί του παρόντος τα ακόλουθα backend:

  • LMI-Distributed Library – Αυτό είναι το πλαίσιο AWS για την εκτέλεση συμπερασμάτων με LLM, εμπνευσμένο από το OSS, για να επιτευχθεί η καλύτερη δυνατή καθυστέρηση και ακρίβεια στο αποτέλεσμα
  • LMI vLLM – Αυτή είναι η υλοποίηση του backend AWS της αποδοτικής μνήμης vLLM βιβλιοθήκη συμπερασμάτων
  • Εργαλειοθήκη LMI TensorRT-LLM – Αυτή είναι η υλοποίηση του backend του AWS NVIDIA TensorRT-LLM, το οποίο δημιουργεί μηχανές ειδικά για GPU για βελτιστοποίηση της απόδοσης σε διαφορετικές GPU
  • LMI DeepSpeed – Αυτή είναι η προσαρμογή του AWS Βαθιά ταχύτητα, το οποίο προσθέτει πραγματική συνεχή παρτίδα, κβαντισμό SmoothQuant και τη δυνατότητα δυναμικής προσαρμογής της μνήμης κατά τη διάρκεια της εξαγωγής συμπερασμάτων
  • LMI NeuronX – Μπορείτε να το χρησιμοποιήσετε για ανάπτυξη AWS Inferentia2 και Aws trainium-Βασισμένες παρουσίες, με αληθινή συνεχή ομαδοποίηση και επιτάχυνση, με βάση το AWS Neuron SDK

Ο παρακάτω πίνακας συνοψίζει τα χαρακτηριστικά που προστέθηκαν πρόσφατα, τόσο κοινά όσο και ειδικά για το backend.

Κοινό σε όλα τα backends

          • Υποστηριζόμενα νέα μοντέλα: Mistral7B, Mixtral, Llama2-70B (NeuronX)
          • Υποστήριξη κλιμάκωσης RoPE για μεγαλύτερα περιβάλλοντα
          • Προστέθηκαν λεπτομέρειες γενιάς: λόγος λήξης παραγωγής και πιθανότητα καταγραφής σε επίπεδο διακριτικού
          • Ενοποίηση παραμέτρων διαμόρφωσης διακομιστή

Συγκεκριμένο backend

LMI-Distributed

vLLM TensorRT-LLM

NeuronX

  • Προστέθηκε ευαισθησία ομαδοποίησης για βελτιστοποιημένες συλλογές GPU
  • Τα γραφήματα CUDA υποστηρίζουν έως και 50% βελτίωση της απόδοσης
  • Νέα μοντέλα που υποστηρίζονται για διαχειριζόμενη συλλογή JIT
  • Υποστήριξη για την εγγενή κβαντοποίηση SmoothQuant του TensorRT-LLM
  • Υποστήριξη προσοχής με ομαδικά ερωτήματα
  • Συνεχείς βελτιώσεις απόδοσης παρτίδων

Υποστηρίζονται νέα μοντέλα

Νέα δημοφιλή μοντέλα υποστηρίζονται σε backends, όπως το Mistral-7B (όλα τα backend), το Mixtral που βασίζεται σε MoE (όλα τα backend εκτός από το Transformers-NeuronX) και το Llama2-70B (Transformers-NeuronX).

Τεχνικές επέκτασης παραθύρου περιβάλλοντος

Η κλιμάκωση περιβάλλοντος που βασίζεται σε περιστροφική ενσωμάτωση θέσης (RoPE) είναι πλέον διαθέσιμη στα backend LMI-Dist, vLLM και TensorRT-LLM. Η κλιμάκωση RoPE επιτρέπει την επέκταση του μήκους ακολουθίας ενός μοντέλου κατά τη διάρκεια της εξαγωγής συμπερασμάτων σε σχεδόν οποιοδήποτε μέγεθος, χωρίς την ανάγκη λεπτομέρειας.

Τα ακόλουθα είναι δύο σημαντικά ζητήματα όταν χρησιμοποιείτε το RoPE:

  • Αμηχανία μοντέλου – Καθώς το μήκος της ακολουθίας αυξάνεται, έτσι μπορεί του μοντέλου αμηχανία. Αυτό το αποτέλεσμα μπορεί να αντισταθμιστεί εν μέρει με τη διεξαγωγή ελάχιστων μικρορύθμισης σε ακολουθίες εισόδου μεγαλύτερες από αυτές που χρησιμοποιήθηκαν στην αρχική εκπαίδευση. Για μια εις βάθος κατανόηση του τρόπου με τον οποίο το RoPE επηρεάζει την ποιότητα του μοντέλου, ανατρέξτε στο Επέκταση του σχοινιού.
  • Απόδοση συμπερασμάτων – Τα μεγαλύτερα μήκη ακολουθίας θα καταναλώσουν τη μνήμη υψηλού εύρους ζώνης του επιταχυντή (HBM). Αυτή η αυξημένη χρήση μνήμης μπορεί να επηρεάσει αρνητικά τον αριθμό των ταυτόχρονων αιτημάτων που μπορεί να χειριστεί ο επιταχυντής σας.

Προστέθηκαν λεπτομέρειες παραγωγής

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

  • τέλος_λόγος – Αυτό δίνει τον λόγο για την ολοκλήρωση της παραγωγής, η οποία μπορεί να είναι η επίτευξη του μέγιστου μήκους παραγωγής, η δημιουργία ενός διακριτικού τέλους πρότασης (EOS) ή η δημιουργία ενός διακριτικού τερματισμού που ορίζεται από τον χρήστη. Επιστρέφεται με το τελευταίο κομμάτι της ακολουθίας ροής.
  • log_probs – Αυτό επιστρέφει την πιθανότητα καταγραφής που έχει εκχωρηθεί από το μοντέλο για κάθε διακριτικό στο κομμάτι της ακολουθίας ροής. Μπορείτε να τα χρησιμοποιήσετε ως χονδρική εκτίμηση της εμπιστοσύνης του μοντέλου υπολογίζοντας την κοινή πιθανότητα μιας ακολουθίας ως το άθροισμα των log_probs των μεμονωμένων διακριτικών, τα οποία μπορούν να είναι χρήσιμα για τη βαθμολόγηση και την κατάταξη των αποτελεσμάτων του μοντέλου. Λάβετε υπόψη ότι οι πιθανότητες διακριτικού LLM είναι γενικά υπερβολικές χωρίς βαθμονόμηση.

Μπορείτε να ενεργοποιήσετε την παραγωγή αποτελεσμάτων παραγωγής προσθέτοντας details=True στο ωφέλιμο φορτίο εισόδου στο LMI, αφήνοντας όλες τις άλλες παραμέτρους αμετάβλητες:

payload = {“inputs”:“your prompt”,
“parameters”:{max_new_tokens”:256,...,“details”:True}
}

Ενοποιημένες παράμετροι διαμόρφωσης

Τέλος, οι παράμετροι διαμόρφωσης LMI έχουν επίσης ενοποιηθεί. Για περισσότερες πληροφορίες σχετικά με όλες τις κοινές παραμέτρους διαμόρφωσης ανάπτυξης και για συγκεκριμένες παραμέτρους, βλ Διαμορφώσεις συμπερασμάτων μεγάλων μοντέλων.

LMI-Distributed backend

Στο AWS re:Invent 2023, το LMI-Dist πρόσθεσε νέες, βελτιστοποιημένες συλλογικές λειτουργίες για να επιταχύνει την επικοινωνία μεταξύ των GPU, με αποτέλεσμα χαμηλότερη καθυστέρηση και υψηλότερη απόδοση για μοντέλα που είναι πολύ μεγάλα για μία μόνο GPU. Αυτές οι συλλογικότητες είναι διαθέσιμες αποκλειστικά για το SageMaker, για περιπτώσεις p4d.

Ενώ η προηγούμενη επανάληψη υποστήριζε μόνο διαμοιρασμό και στις 8 GPU, το LMI 0.26.0 εισάγει υποστήριξη για παράλληλο βαθμό τανυστή 4, σε ένα μερικό μοτίβο all-to-all. Αυτό μπορεί να συνδυαστεί με Στοιχεία συμπερασμάτων SageMaker, με το οποίο μπορείτε να διαμορφώσετε λεπτομερώς πόσοι επιταχυντές θα πρέπει να εκχωρηθούν σε κάθε μοντέλο που αναπτύσσεται πίσω από ένα τελικό σημείο. Μαζί, αυτές οι δυνατότητες παρέχουν καλύτερο έλεγχο στη χρήση πόρων της υποκείμενης παρουσίας, επιτρέποντάς σας να αυξήσετε την πολυμίσθωση του μοντέλου φιλοξενώντας διαφορετικά μοντέλα πίσω από ένα τελικό σημείο ή να προσαρμόσετε τη συνολική απόδοση της ανάπτυξής σας ώστε να ταιριάζει με το μοντέλο και τα χαρακτηριστικά επισκεψιμότητας.

Το παρακάτω σχήμα συγκρίνει την άμεση "όλα σε όλους" με τη μερική "όλα σε όλους".

Όλα σε όλες τις επιμέρους συλλογικότητες.

Backend TensorRT-LLM

Το TensorRT-LLM της NVIDIA εισήχθη ως μέρος της προηγούμενης έκδοσης LMI DLC (0.25.0), επιτρέποντας κορυφαίες επιδόσεις GPU και βελτιστοποιήσεις όπως SmoothQuant, FP8 και συνεχή ομαδοποίηση για LLM όταν χρησιμοποιούν GPU NVIDIA.

Το TensorRT-LLM απαιτεί τα μοντέλα να συγκεντρώνονται σε αποδοτικούς κινητήρες πριν από την ανάπτυξη. Το LMI TensorRT-LLM DLC μπορεί να χειριστεί αυτόματα τη σύνταξη μιας λίστας υποστηριζόμενων μοντέλων just-in-time (JIT), πριν από την εκκίνηση του διακομιστή και τη φόρτωση του μοντέλου για συμπεράσματα σε πραγματικό χρόνο. Η έκδοση 0.26.0 του DLC αναπτύσσει τη λίστα των υποστηριζόμενων μοντέλων για τη συλλογή JIT, παρουσιάζοντας τα μοντέλα Baichuan, ChatGLM, GPT2, GPT-J, InternLM, Mistral, Mixtral, Qwen, SantaCoder και StarCoder.

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

Επιπλέον, το LMI εκθέτει τώρα την εγγενή κβαντοποίηση TensorRT-LLM SmootQuant, με παραμέτρους για τον έλεγχο του άλφα και του παράγοντα κλιμάκωσης ανά διακριτικό ή κανάλι. Για περισσότερες πληροφορίες σχετικά με τις σχετικές διαμορφώσεις, ανατρέξτε στο TensorRT-LLM.

vLLM backend

Η ενημερωμένη έκδοση του vLLM που περιλαμβάνεται στο LMI DLC διαθέτει βελτιώσεις απόδοσης έως και 50% που τροφοδοτούνται από τη λειτουργία γραφήματος CUDA αντί για τη λειτουργία ανυπομονησίας. Τα γραφήματα CUDA επιταχύνουν τους φόρτους εργασίας της GPU ξεκινώντας πολλές λειτουργίες GPU με μία κίνηση αντί να τις εκκινούν μεμονωμένα, γεγονός που μειώνει τα γενικά έξοδα. Αυτό είναι ιδιαίτερα αποτελεσματικό για μικρά μοντέλα όταν χρησιμοποιείται παραλληλισμός τανυστών.

Η προστιθέμενη απόδοση έρχεται σε αντιστάθμιση της πρόσθετης κατανάλωσης μνήμης GPU. Η λειτουργία γραφήματος CUDA είναι πλέον προεπιλεγμένη για το backend vLLM, επομένως, εάν περιορίζεστε στην ποσότητα της διαθέσιμης μνήμης GPU, μπορείτε να ορίσετε option.enforce_eager=True για να αναγκάσετε τη λειτουργία ανυπομονησίας του PyTorch.

Transformers-NeuronX backend

Η ενημερωμένη έκδοση του NeuronX που περιλαμβάνεται στο LMI NeuronX DLC υποστηρίζει πλέον μοντέλα που διαθέτουν τον μηχανισμό προσοχής ομαδοποιημένων ερωτημάτων, όπως τα Mistral-7B και LLama2-70B. Η προσοχή ομαδοποιημένου ερωτήματος είναι μια σημαντική βελτιστοποίηση του προεπιλεγμένου μηχανισμού προσοχής του μετασχηματιστή, όπου το μοντέλο εκπαιδεύεται με λιγότερες κεφαλές κλειδιών και τιμών από τις κεφαλές ερωτήματος. Αυτό μειώνει το μέγεθος της κρυφής μνήμης KV στη μνήμη GPU, επιτρέποντας μεγαλύτερη συγχρονικότητα και βελτιώνοντας την απόδοση τιμής.

Το παρακάτω σχήμα απεικονίζει μεθόδους προσοχής πολλαπλών κεφαλιών, ομαδοποιημένων ερωτημάτων και πολλαπλών ερωτημάτων (πηγή).

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

Διατίθενται διαφορετικές στρατηγικές κοινής χρήσης κρυφής μνήμης KV για να ταιριάζουν σε διαφορετικούς τύπους φόρτου εργασίας. Για περισσότερες πληροφορίες σχετικά με τις στρατηγικές κοινής χρήσης, βλ Υποστήριξη ομαδοποιημένης προσοχής (GQA).. Μπορείτε να ενεργοποιήσετε τη στρατηγική που επιθυμείτε (shard-over-heads, για παράδειγμα) με τον ακόλουθο κώδικα:

option.group_query_attention=shard-over-heads

Επιπλέον, η νέα υλοποίηση του NeuronX DLC εισάγει ένα API κρυφής μνήμης για το TransformerNeuronX που επιτρέπει την πρόσβαση στην κρυφή μνήμη KV. Σας επιτρέπει να εισαγάγετε και να αφαιρέσετε σειρές κρυφής μνήμης KV από νέα αιτήματα ενώ εκτελείτε ομαδικά συμπεράσματα. Πριν από την εισαγωγή αυτού του API, η κρυφή μνήμη KV υπολογίστηκε εκ νέου για τυχόν αιτήματα που προστέθηκαν πρόσφατα. Σε σύγκριση με το LMI V7 (0.25.0), έχουμε βελτιώσει την καθυστέρηση κατά περισσότερο από 33% με ταυτόχρονα αιτήματα και υποστηρίζουμε πολύ υψηλότερη απόδοση.

Επιλέγοντας το σωστό backend

Για να αποφασίσετε ποιο backend θα χρησιμοποιήσετε με βάση το επιλεγμένο μοντέλο και εργασία, χρησιμοποιήστε το ακόλουθο διάγραμμα ροής. Για μεμονωμένους οδηγούς χρήστη backend μαζί με υποστηριζόμενα μοντέλα, βλ Οδηγοί χρήστη LMI Backend.

Δέντρο αποφάσεων για να αποφασίσετε ποιο backend θα χρησιμοποιήσετε

Αναπτύξτε το Mixtral με LMI DLC με πρόσθετα χαρακτηριστικά

Ας δούμε πώς μπορείτε να αναπτύξετε το μοντέλο Mixtral-8x7B με κοντέινερ LMI 0.26.0 και να δημιουργήσετε πρόσθετες λεπτομέρειες όπως log_prob και finish_reason ως μέρος της παραγωγής. Συζητούμε επίσης πώς μπορείτε να επωφεληθείτε από αυτά τα πρόσθετα χαρακτηριστικά μέσω μιας περίπτωσης χρήσης δημιουργίας περιεχομένου.

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

Ξεκινάμε εισάγοντας τις βιβλιοθήκες και διαμορφώνοντας το περιβάλλον συνεδρίας:

import boto3
import sagemaker 
import json 
import io 
import numpy as np 
from sagemaker import Model, image_uris, serializers, deserializers 

role = sagemaker.get_execution_role() # execution role for the endpoint 
session = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs 
region = session._region_name # region name of the current SageMaker Studio environment

Μπορείτε να χρησιμοποιήσετε δοχεία SageMaker LMI για να φιλοξενήσετε μοντέλα χωρίς πρόσθετο κωδικό συμπερασμάτων. Μπορείτε να διαμορφώσετε τον διακομιστή μοντέλου είτε μέσω των μεταβλητών περιβάλλοντος είτε α serving.properties αρχείο. Προαιρετικά, θα μπορούσατε να έχετε ένα model.py αρχείο για οποιαδήποτε προεπεξεργασία ή μεταεπεξεργασία και α requirements.txt αρχείο για τυχόν πρόσθετα πακέτα που απαιτείται να εγκατασταθούν.

Σε αυτή την περίπτωση, χρησιμοποιούμε το serving.properties αρχείο για να διαμορφώσετε τις παραμέτρους και να προσαρμόσετε τη συμπεριφορά του κοντέινερ LMI. Για περισσότερες λεπτομέρειες, ανατρέξτε στο GitHub repo. Το repo εξηγεί λεπτομέρειες για τις διάφορες παραμέτρους διαμόρφωσης που μπορείτε να ορίσετε. Χρειαζόμαστε τις ακόλουθες βασικές παραμέτρους:

  • κινητήρας – Καθορίζει τη μηχανή χρόνου εκτέλεσης για χρήση του DJL. Αυτό οδηγεί τη στρατηγική διαμοιρασμού και φόρτωσης μοντέλου στους επιταχυντές για το μοντέλο.
  • επιλογή.model_id – Καθορίζει το Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3) URI του προεκπαιδευμένου μοντέλου ή το αναγνωριστικό μοντέλου ενός προεκπαιδευμένου μοντέλου που φιλοξενείται μέσα σε ένα αποθετήριο μοντέλων στο Αγκαλιάζοντας το πρόσωπο. Σε αυτήν την περίπτωση, παρέχουμε το αναγνωριστικό μοντέλου για το μοντέλο Mixtral-8x7B.
  • επιλογή.tensor_parallel_degree – Ορίζει τον αριθμό των συσκευών GPU στις οποίες το Accelerate χρειάζεται να χωρίσει το μοντέλο. Αυτή η παράμετρος ελέγχει επίσης τον αριθμό των εργαζομένων ανά μοντέλο που θα ξεκινήσει κατά την εκτέλεση της υπηρεσίας DJL. Ορίσαμε αυτήν την τιμή σε max (μέγιστη GPU στο τρέχον μηχάνημα).
  • option.rolling_batch – Επιτρέπει τη συνεχή παρτίδα για τη βελτιστοποίηση της χρήσης του επιταχυντή και της συνολικής απόδοσης. Για το κοντέινερ TensorRT-LLM, χρησιμοποιούμε auto.
  • option.model_loading_timeout – Ορίζει την τιμή χρονικού ορίου για τη λήψη και τη φόρτωση του μοντέλου για την προβολή συμπερασμάτων.
  • επιλογή.max_rolling_batch – Ορίζει το μέγιστο μέγεθος της συνεχούς παρτίδας, καθορίζοντας πόσες ακολουθίες μπορούν να υποβληθούν σε παράλληλη επεξεργασία ανά πάσα στιγμή.
%%writefile serving.properties 
engine=MPI 
option.model_id=mistralai/Mixtral-8x7B-v0.1 
option.tensor_parallel_degree=max 
option.max_rolling_batch_size=32 
option.rolling_batch=auto 
option.model_loading_timeout = 7200

Συσκευάζουμε το serving.properties αρχείο ρυθμίσεων σε μορφή tar.gz, ώστε να πληροί τις απαιτήσεις φιλοξενίας του SageMaker. Διαμορφώνουμε το κοντέινερ DJL LMI με tensorrtllm ως κινητήρας υποστήριξης. Επιπλέον, καθορίζουμε την πιο πρόσφατη έκδοση του κοντέινερ (0.26.0).

image_uri = image_uris.retrieve(
   framework="djl-tensorrtllm",
   region=sess.boto_session.region_name,
   version="0.26.0"
)

Στη συνέχεια, ανεβάζουμε το τοπικό tarball (που περιέχει το serving.properties αρχείο διαμόρφωσης) σε ένα πρόθεμα S3. Χρησιμοποιούμε το URI εικόνας για το κοντέινερ DJL και τη θέση Amazon S3 στην οποία ανέβηκε το μοντέλο που εξυπηρετούσε τεχνουργήματα tarball, για να δημιουργήσουμε το αντικείμενο μοντέλου SageMaker.

model = Model(image_uri=image_uri, model_data=code_artifact, role=role) 

instance_type = "ml.p4d.24xlarge" 
endpoint_name = sagemaker.utils.name_from_base("mixtral-lmi-model") 

model.deploy(
   initial_instance_count=1,
   instance_type=instance_type,
   endpoint_name=endpoint_name,
   container_startup_health_check_timeout=1800
)

Ως μέρος του LMI 0.26.0, μπορείτε τώρα να χρησιμοποιήσετε δύο πρόσθετες λεπτομερείς λεπτομέρειες σχετικά με το παραγόμενο αποτέλεσμα:

  • log_probs – Αυτή είναι η πιθανότητα καταγραφής που εκχωρείται από το μοντέλο για κάθε διακριτικό στο κομμάτι της ακολουθίας ροής. Μπορείτε να τα χρησιμοποιήσετε ως μια χονδρική εκτίμηση της εμπιστοσύνης του μοντέλου υπολογίζοντας την κοινή πιθανότητα μιας ακολουθίας ως το άθροισμα των πιθανοτήτων καταγραφής των μεμονωμένων διακριτικών, κάτι που μπορεί να είναι χρήσιμο για τη βαθμολόγηση και την κατάταξη των εξόδων του μοντέλου. Λάβετε υπόψη ότι οι πιθανότητες διακριτικού LLM είναι γενικά υπερβολικές χωρίς βαθμονόμηση.
  • τέλος_λόγος – Αυτός είναι ο λόγος για την ολοκλήρωση της παραγωγής, η οποία μπορεί να είναι η επίτευξη του μέγιστου μήκους παραγωγής, η δημιουργία ενός διακριτικού EOS ή η δημιουργία ενός διακριτικού τερματισμού που ορίζεται από τον χρήστη. Αυτό επιστρέφεται με το τελευταίο κομμάτι ακολουθίας ροής.

Μπορείτε να τα ενεργοποιήσετε περνώντας "details"=True ως μέρος της συμβολής σας στο μοντέλο.

Ας δούμε πώς μπορείτε να δημιουργήσετε αυτές τις λεπτομέρειες. Χρησιμοποιούμε ένα παράδειγμα δημιουργίας περιεχομένου για να κατανοήσουμε την εφαρμογή τους.

Ορίζουμε α LineIterator βοηθητική κλάση, η οποία έχει λειτουργίες για να ανακτά νωχελικά byte από μια ροή απόκρισης, να τα αποθηκεύει στην προσωρινή μνήμη και να αναλύει το buffer σε γραμμές. Η ιδέα είναι να εξυπηρετούνται bytes από το buffer ενώ λαμβάνονται περισσότερα byte από τη ροή ασύγχρονα.

class LineIterator:
    def __init__(self, stream):
        # Iterator to get bytes from stream 
        self.byte_iterator = iter(stream)  
        # Buffer stream bytes until we get a full line
        self.buffer = io.BytesIO()  
        # Track current reading position within buffer
        self.read_pos = 0

   def __iter__(self):
        # Make class iterable 
        return self

    def __next__(self):
        while True:
           # Seek read position within buffer
           self.buffer.seek(self.read_pos)  
           # Try reading a line from current position
           line = self.buffer.readline()
           # If we have a full line
           if line and line[-1] == ord('n'):
               # Increment reading position past this line
               self.read_pos += len(line)  
               # Return the line read without newline char
               return line[:-1] 
           # Fetch next chunk from stream  
           try:
               chunk = next(self.byte_iterator)
           # Handle end of stream 
           except StopIteration:
               # Check if we have any bytes still unread
               if self.read_pos < self.buffer.getbuffer().nbytes:
                   continue
               # If not, raise StopIteration
               raise
           # Add fetched bytes to end of buffer
           self.buffer.seek(0, io.SEEK_END)  
           self.buffer.write(chunk['PayloadPart']['Bytes'])

Δημιουργήστε και χρησιμοποιήστε την πιθανότητα συμβολικού ως πρόσθετη λεπτομέρεια

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

Καλούμε το τελικό σημείο του μοντέλου με την προτροπή μας και καταγράφουμε την απόκριση που δημιουργείται. Ρυθμίσαμε "details": True ως παράμετρος χρόνου εκτέλεσης στην είσοδο του μοντέλου. Επειδή η πιθανότητα καταγραφής δημιουργείται για κάθε διακριτικό εξόδου, προσαρτούμε τις μεμονωμένες πιθανότητες καταγραφής σε μια λίστα. Καταγράφουμε επίσης το πλήρες κείμενο που δημιουργείται από την απάντηση.

sm_client = boto3.client("sagemaker-runtime")

# Set details: True as a runtime parameter within the input.
body = {"inputs": prompt, "parameters": {"max_new_tokens":512, "details": True}}
resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(body), ContentType="application/json")
event_stream = resp['Body']

overall_log_prob = []

for line in LineIterator(event_stream):
    resp = json.loads(line)
    if resp['token'].get('text') != None:
        token_log_prob = resp['token']['log_prob']
        overall_log_prob.append(token_log_prob)
    elif resp['generated_text'] != None:
        generated_text= resp['generated_text']

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

print(generated_text) 
overall_score=np.exp(np.mean(overall_log_prob)) 
print(f"nnOverall confidence score in the generated text: {overall_score}")

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

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

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

Δημιουργήστε και χρησιμοποιήστε τον λόγο φινιρίσματος ως πρόσθετη λεπτομέρεια

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

Για να το πετύχουμε αυτό, χρησιμοποιούμε το finish_reason χαρακτηριστικό που δημιουργείται στην έξοδο, παρακολουθήστε την τιμή του και συνεχίστε να δημιουργείτε μέχρι να δημιουργηθεί ολόκληρη η έξοδος.

Ορίζουμε μια συνάρτηση συμπερασμάτων που λαμβάνει μια είσοδο ωφέλιμου φορτίου και καλεί το τελικό σημείο του SageMaker, αναπαράγει μια απόκριση και επεξεργάζεται την απόκριση για εξαγωγή κειμένου που δημιουργείται. Το ωφέλιμο φορτίο περιέχει το κείμενο προτροπής ως εισόδους και παραμέτρους όπως μέγιστους δείκτες και λεπτομέρειες. Η απόκριση διαβάζεται σε ροή και υποβάλλεται σε επεξεργασία γραμμή προς γραμμή για να εξαχθούν τα διακριτικά κειμένου που δημιουργούνται σε μια λίστα. Εξάγουμε λεπτομέρειες όπως finish_reason. Καλούμε τη συνάρτηση συμπερασμάτων σε έναν βρόχο (αλυσιδωτά αιτήματα) ενώ προσθέτουμε περισσότερο περιβάλλον κάθε φορά και παρακολουθούμε τον αριθμό των διακριτικών που δημιουργούνται και τον αριθμό των αιτημάτων που αποστέλλονται μέχρι να τελειώσει το μοντέλο.

def inference(payload):
    # Call SageMaker endpoint and get response stream
    resp = sm_client.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=json.dumps(payload), ContentType="application/json")
    event_stream = resp['Body']
    text_output = []
    for line in LineIterator(event_stream):
        resp = json.loads(line) 
        # Extract text tokens if present
        if resp['token'].get('text') != None:
            token = resp['token']['text']
            text_output.append(token)  
            print(token, end='')
        # Get finish reason if details present
        if resp.get('details') != None:
            finish_reason = resp['details']['finish_reason']
            # Return extracted output, finish reason and token length
            return payload['inputs'] + ''.join(text_output), finish_reason, len(text_output)

# set details: True as a runtime parameter within the input.
payload = {"inputs": prompt,  "parameters": {"max_new_tokens":256, "details": True}} 

finish_reason = "length"
# Print initial output 
print(f"Output: {payload['inputs']}", end='')  
total_tokens = 0
total_requests = 0
while finish_reason == 'length':
    # Call inference and get extracts
    output_text, finish_reason, out_token_len = inference(payload)
    # Update payload for next request
    payload['inputs'] = output_text 
    total_tokens += out_token_len
    total_requests += 1
# Print metrics
print(f"nntotal tokens generated: {total_tokens} ntotal requests sent: {total_requests}")

Όπως μπορούμε να δούμε, παρόλο που η max_new_token Η παράμετρος έχει οριστεί στο 256, χρησιμοποιούμε το χαρακτηριστικό finish_reason detail ως μέρος της εξόδου για την αλυσίδα πολλαπλών αιτημάτων στο τελικό σημείο, μέχρι να δημιουργηθεί ολόκληρη η έξοδος.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

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

Συμπέρασμα

Σε αυτήν την ανάρτηση, διαβάσαμε την έκδοση v0.26.0 του κοντέινερ AWS LMI. Επισημάναμε βασικές βελτιώσεις απόδοσης, υποστήριξη νέων μοντέλων και νέες δυνατότητες χρηστικότητας. Με αυτές τις δυνατότητες, μπορείτε να εξισορροπήσετε καλύτερα τα χαρακτηριστικά κόστους και απόδοσης, παρέχοντας παράλληλα καλύτερη εμπειρία στους τελικούς σας χρήστες.

Για να μάθετε περισσότερα σχετικά με τις δυνατότητες LMI DLC, ανατρέξτε στο Παραλληλισμός μοντέλου και συμπέρασμα μεγάλου μοντέλου. Είμαστε ενθουσιασμένοι που βλέπουμε πώς χρησιμοποιείτε αυτές τις νέες δυνατότητες από το SageMaker.


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

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Τζοάο Μούρα είναι Senior AI/ML Specialist Solutions Architect στο AWS. Η João βοηθά τους πελάτες της AWS – από μικρές νεοφυείς επιχειρήσεις έως μεγάλες επιχειρήσεις – να εκπαιδεύουν και να αναπτύσσουν μεγάλα μοντέλα αποτελεσματικά και να δημιουργούν ευρύτερα πλατφόρμες ML στο AWS.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Rahul Sharma είναι Senior Solutions Architect στην AWS, βοηθώντας τους πελάτες της AWS να σχεδιάσουν και να δημιουργήσουν λύσεις AI/ML. Πριν από την ένταξή του στην AWS, ο Rahul έχει περάσει αρκετά χρόνια στον χρηματοοικονομικό και ασφαλιστικό τομέα, βοηθώντας τους πελάτες να δημιουργήσουν δεδομένα και αναλυτικές πλατφόρμες.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Τσινγκ Λαν είναι Μηχανικός Ανάπτυξης Λογισμικού στην AWS. Έχει εργαστεί σε πολλά προκλητικά προϊόντα στο Amazon, συμπεριλαμβανομένων λύσεων συμπερασμάτων ML υψηλής απόδοσης και συστήματος καταγραφής υψηλής απόδοσης. Η ομάδα του Qing κυκλοφόρησε με επιτυχία το πρώτο μοντέλο δισεκατομμυρίων παραμέτρων στο Amazon Advertising με πολύ χαμηλό λανθάνοντα χρόνο που απαιτείται. Ο Qing έχει εις βάθος γνώση σχετικά με τη βελτιστοποίηση της υποδομής και την επιτάχυνση Deep Learning.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Jian Sheng είναι Μηχανικός Ανάπτυξης Λογισμικού στην Amazon Web Services που έχει εργαστεί σε πολλές βασικές πτυχές των συστημάτων μηχανικής μάθησης. Υπήρξε βασικός συντελεστής της υπηρεσίας SageMaker Neo, εστιάζοντας στη συλλογή βαθιάς μάθησης και στη βελτιστοποίηση χρόνου εκτέλεσης πλαισίου. Πρόσφατα, κατεύθυνε τις προσπάθειές του και συνέβαλε στη βελτιστοποίηση του συστήματος μηχανικής μάθησης για εξαγωγή συμπερασμάτων μεγάλων μοντέλων.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Τάιλερ Όστερμπεργκ είναι Μηχανικός Ανάπτυξης Λογισμικού στην AWS. Ειδικεύεται στη δημιουργία εμπειριών συμπερασμάτων μηχανικής μάθησης υψηλής απόδοσης στο SageMaker. Πρόσφατα, επικεντρώθηκε στη βελτιστοποίηση της απόδοσης των Inferentia Deep Learning Containers στην πλατφόρμα SageMaker. Η Tyler διαπρέπει στην εφαρμογή λύσεων φιλοξενίας με απόδοση για μεγάλα γλωσσικά μοντέλα και στη βελτίωση της εμπειρίας των χρηστών χρησιμοποιώντας τεχνολογία αιχμής.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Ρούπιντερ Γκρέουαλ είναι Senior AI/ML Specialist Solutions Architect με AWS. Επί του παρόντος εστιάζει στην εξυπηρέτηση μοντέλων και MLOps στο Amazon SageMaker. Πριν από αυτόν τον ρόλο, εργάστηκε ως Μηχανικός Μηχανικής Εκμάθησης Κατασκευών και φιλοξενίας μοντέλων. Εκτός δουλειάς, του αρέσει να παίζει τένις και να κάνει ποδήλατο σε ορεινά μονοπάτια.

Dhawal PatelDhawal Patel είναι Κύριος Αρχιτέκτονας Μηχανικής Μάθησης στο AWS. Έχει συνεργαστεί με οργανισμούς που κυμαίνονται από μεγάλες επιχειρήσεις έως νεοφυείς επιχειρήσεις μεσαίου μεγέθους για προβλήματα που σχετίζονται με τους κατανεμημένους υπολογιστές και την Τεχνητή Νοημοσύνη. Εστιάζεται στη Deep Learning, συμπεριλαμβανομένων των τομέων NLP και Computer Vision. Βοηθά τους πελάτες να επιτύχουν συμπεράσματα μοντέλων υψηλής απόδοσης στο SageMaker.

Ενισχύστε την απόδοση συμπερασμάτων για μοντέλα Mixtral και Llama 2 με νέα δοχεία Amazon SageMaker | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Raghu Ramesha είναι Senior ML Solutions Architect με την ομάδα του Amazon SageMaker Service. Επικεντρώνεται στο να βοηθά τους πελάτες να δημιουργήσουν, να αναπτύξουν και να μεταφέρουν φόρτους εργασίας παραγωγής ML στο SageMaker σε κλίμακα. Ειδικεύεται σε τομείς μηχανικής μάθησης, τεχνητής νοημοσύνης και όρασης υπολογιστών και είναι κάτοχος μεταπτυχιακού τίτλου στην Επιστήμη Υπολογιστών από το UT Dallas. Στον ελεύθερο χρόνο του, του αρέσουν τα ταξίδια και η φωτογραφία.

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

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