Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού της Amazon

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού της Amazon

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

Σε αυτήν την ανάρτηση, δείχνουμε πώς μπορείτε να εκτελέσετε μοντέλα Stable Diffusion και να επιτύχετε υψηλή απόδοση με το χαμηλότερο κόστος σε Amazon Elastic Compute Cloud (Amazon EC2) χρησιμοποιώντας Εμφανίσεις Amazon EC2 Inf2 τροφοδοτείται από AWS Inferentia2. Εξετάζουμε την αρχιτεκτονική ενός μοντέλου Stable Diffusion και περπατάμε στα βήματα της σύνταξης ενός μοντέλου Stable Diffusion χρησιμοποιώντας AWS Neuron και την ανάπτυξή του σε μια παρουσία Inf2. Συζητάμε επίσης τις βελτιστοποιήσεις που κάνει αυτόματα το Neuron SDK για τη βελτίωση της απόδοσης. Μπορείτε να εκτελέσετε και τις δύο εκδόσεις Stable Diffusion 2.1 και 1.5 στο AWS Inferentia2 οικονομικά. Τέλος, δείχνουμε πώς μπορείτε να αναπτύξετε ένα μοντέλο Stable Diffusion σε μια παρουσία Inf2 με Amazon Sage Maker.

Το μέγεθος μοντέλου Stable Diffusion 2.1 στο floating point 32 (FP32) είναι 5 GB και 2.5 GB στο bfoat16 (BF16). Μια μεμονωμένη παρουσία inf2.xlarge έχει έναν επιταχυντή AWS Inferentia2 με 32 GB μνήμης HBM. Το μοντέλο Stable Diffusion 2.1 μπορεί να χωρέσει σε μία μόνο παρουσία inf2.xlarge. Το Stable Diffusion είναι ένα μοντέλο κειμένου σε εικόνα που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε εικόνες διαφορετικών στυλ και περιεχομένου απλώς παρέχοντας μια προτροπή κειμένου ως είσοδο. Για να μάθετε περισσότερα σχετικά με την αρχιτεκτονική του μοντέλου Stable Diffusion, ανατρέξτε στο Δημιουργήστε εικόνες υψηλής ποιότητας με μοντέλα Stable Diffusion και αναπτύξτε τις οικονομικά με το Amazon SageMaker.

Πώς το Neuron SDK βελτιστοποιεί την απόδοση Stable Diffusion

Για να μπορέσουμε να αναπτύξουμε το μοντέλο Stable Diffusion 2.1 σε περιπτώσεις AWS Inferentia2, πρέπει να μεταγλωττίσουμε τα στοιχεία του μοντέλου χρησιμοποιώντας το Neuron SDK. Το Neuron SDK, το οποίο περιλαμβάνει έναν μεταγλωττιστή βαθιάς εκμάθησης, χρόνο εκτέλεσης και εργαλεία, μεταγλωττίζει και βελτιστοποιεί αυτόματα μοντέλα βαθιάς εκμάθησης, ώστε να μπορούν να εκτελούνται αποτελεσματικά σε περιπτώσεις Inf2 και να εξάγουν την πλήρη απόδοση του επιταχυντή AWS Inferentia2. Έχουμε διαθέσιμα παραδείγματα για το μοντέλο Stable Diffusion 2.1 GitHub repo. Αυτό το σημειωματάριο παρουσιάζει ένα παράδειγμα από άκρο σε άκρο του τρόπου μεταγλώττισης ενός μοντέλου Stable Diffusion, αποθήκευσης των μεταγλωττισμένων μοντέλων Neuron και φόρτωσης στο χρόνο εκτέλεσης για συμπέρασμα.

Χρησιμοποιούμε StableDiffusionPipeline από το Αγκαλιασμένο Πρόσωπο diffusers βιβλιοθήκη για τη φόρτωση και τη μεταγλώττιση του μοντέλου. Στη συνέχεια, συγκεντρώνουμε όλα τα στοιχεία του μοντέλου για Neuron χρησιμοποιώντας torch_neuronx.trace() και αποθηκεύστε το βελτιστοποιημένο μοντέλο ως TorchScript. Οι διαδικασίες μεταγλώττισης μπορεί να είναι αρκετά εντατικές στη μνήμη, απαιτώντας σημαντική ποσότητα μνήμης RAM. Για να το παρακάμψουμε αυτό, πριν ανιχνεύσουμε κάθε μοντέλο, δημιουργούμε ένα deepcopy του τμήματος του αγωγού που ιχνηλατείται. Μετά από αυτό, διαγράφουμε το αντικείμενο του pipeline από τη μνήμη χρησιμοποιώντας del pipe. Αυτή η τεχνική είναι ιδιαίτερα χρήσιμη κατά τη μεταγλώττιση σε περιπτώσεις με χαμηλή μνήμη RAM.

Επιπλέον, πραγματοποιούμε επίσης βελτιστοποιήσεις στα μοντέλα Stable Diffusion. Το UNet κατέχει την πιο εντατική υπολογιστική πτυχή του συμπεράσματος. Το στοιχείο UNet λειτουργεί σε τανυστές εισόδου που έχουν μέγεθος παρτίδας δύο, δημιουργώντας έναν αντίστοιχο τανυστή εξόδου επίσης με μέγεθος παρτίδας δύο, για την παραγωγή μιας ενιαίας εικόνας. Τα στοιχεία σε αυτές τις παρτίδες είναι εντελώς ανεξάρτητα το ένα από το άλλο. Μπορούμε να εκμεταλλευτούμε αυτή τη συμπεριφορά για να έχουμε βέλτιστο λανθάνοντα χρόνο εκτελώντας μία παρτίδα σε κάθε πυρήνα Neuron. Μεταγλωττίζουμε το UNet για μία παρτίδα (χρησιμοποιώντας τανυστές εισόδου με μία παρτίδα) και στη συνέχεια χρησιμοποιούμε το torch_neuronx.DataParallel API για να φορτώσει αυτό το μοντέλο μεμονωμένης παρτίδας σε κάθε πυρήνα. Η έξοδος αυτού του API είναι μια ενιαία μονάδα δύο παρτίδων: μπορούμε να περάσουμε στο UNet τις εισόδους δύο παρτίδων και επιστρέφεται μια έξοδος δύο παρτίδων, αλλά εσωτερικά, τα δύο μοντέλα μιας παρτίδας εκτελούνται στους δύο πυρήνες Neuron . Αυτή η στρατηγική βελτιστοποιεί τη χρήση των πόρων και μειώνει την καθυστέρηση.

Μεταγλώττιση και ανάπτυξη ενός μοντέλου Stable Diffusion σε μια παρουσία Inf2 EC2

Για να μεταγλωττίσετε και να αναπτύξετε το μοντέλο Stable Diffusion σε μια παρουσία Inf2 EC2, υπογράψτε στο Κονσόλα διαχείρισης AWS και δημιουργήστε μια παρουσία inf2.8xlarge. Σημειώστε ότι μια παρουσία inf2.8xlarge απαιτείται μόνο για τη μεταγλώττιση του μοντέλου, επειδή η μεταγλώττιση απαιτεί υψηλότερη μνήμη κεντρικού υπολογιστή. Το μοντέλο Stable Diffusion μπορεί να φιλοξενηθεί σε μια παρουσία inf2.xlarge. Μπορείτε να βρείτε το πιο πρόσφατο AMI με τις βιβλιοθήκες Neuron χρησιμοποιώντας τα παρακάτω Διεπαφή γραμμής εντολών AWS Εντολή (AWS CLI):

aws ec2 describe-images --region us-east-1 --owners amazon --filters 'Name=name,Values=Deep Learning AMI Neuron PyTorch 1.13.? (Amazon Linux 2) ????????' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &CreationDate))[:1].ImageId' --output text

Για αυτό το παράδειγμα, δημιουργήσαμε μια παρουσία EC2 χρησιμοποιώντας το Deep Learning AMI Neuron PyTorch 1.13 (Ubuntu 20.04). Στη συνέχεια, μπορείτε να δημιουργήσετε ένα περιβάλλον εργαστηρίου JupyterLab συνδέοντας το στιγμιότυπο και εκτελώντας τα ακόλουθα βήματα:

run source /opt/aws_neuron_venv_pytorch/bin/activate
pip install jupyterlab
jupyter-lab

Βρίσκεται ένα σημειωματάριο με όλα τα βήματα για τη μεταγλώττιση και τη φιλοξενία του μοντέλου GitHub.

Ας δούμε τα βήματα μεταγλώττισης για ένα από τα μπλοκ κωδικοποιητή κειμένου. Άλλα μπλοκ που αποτελούν μέρος του αγωγού Stable Diffusion μπορούν να μεταγλωττιστούν με παρόμοιο τρόπο.

Το πρώτο βήμα είναι να φορτώσετε το προεκπαιδευμένο μοντέλο από το Hugging Face. ο StableDiffusionPipeline.from_pretrained Η μέθοδος φορτώνει το προεκπαιδευμένο μοντέλο στο αντικείμενο του pipeline μας, pipe. Στη συνέχεια δημιουργούμε ένα deepcopy του κωδικοποιητή κειμένου από τον αγωγό μας, κλωνοποιώντας τον ουσιαστικά. ο del pipe Στη συνέχεια, η εντολή χρησιμοποιείται για τη διαγραφή του αρχικού αντικειμένου pipeline, ελευθερώνοντας τη μνήμη που καταναλώθηκε από αυτό. Εδώ, ποσοτικοποιούμε το μοντέλο σε βάρη BF16:

model_id = "stabilityai/stable-diffusion-2-1-base"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
text_encoder = copy.deepcopy(pipe.text_encoder)
del pipe

Αυτό το βήμα περιλαμβάνει την αναδίπλωση του κωδικοποιητή κειμένου μας με το NeuronTextEncoder περικάλυμμα. Η έξοδος μιας μονάδας κωδικοποιητή μεταγλωττισμένου κειμένου θα είναι από dict. Το μετατρέπουμε σε α list πληκτρολογήστε χρησιμοποιώντας αυτό το περιτύλιγμα:

text_encoder = NeuronTextEncoder(text_encoder)

Αρχικοποιούμε τον τανυστή PyTorch emb με κάποιες αξίες. ο emb Ο τανυστής χρησιμοποιείται ως παράδειγμα εισόδου για το torch_neuronx.trace λειτουργία. Αυτή η συνάρτηση ανιχνεύει τον κωδικοποιητή κειμένου μας και τον μεταγλωττίζει σε μια μορφή βελτιστοποιημένη για Neuron. Η διαδρομή καταλόγου για το μεταγλωττισμένο μοντέλο δημιουργείται με σύνδεση COMPILER_WORKDIR_ROOT με τον υποκατάλογο text_encoder:

emb = torch.tensor([...])
text_encoder_neuron = torch_neuronx.trace(
        text_encoder.neuron_text_encoder,
        emb,
        compiler_workdir=os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder'),
        )

Ο κωδικοποιητής μεταγλωττισμένου κειμένου αποθηκεύεται χρησιμοποιώντας torch.jit.save. Αποθηκεύεται με το όνομα αρχείου model.pt στο text_encoder κατάλογος του χώρου εργασίας του μεταγλωττιστή μας:

text_encoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder/model.pt')
torch.jit.save(text_encoder_neuron, text_encoder_filename)

Η σημειωματάριο περιλαμβάνει παρόμοια βήματα για τη μεταγλώττιση άλλων στοιχείων του μοντέλου: UNet, αποκωδικοποιητής VAE και VAE post_quant_conv. Αφού έχετε μεταγλωττίσει όλα τα μοντέλα, μπορείτε να φορτώσετε και να εκτελέσετε το μοντέλο ακολουθώντας αυτά τα βήματα:

  1. Καθορίστε τις διαδρομές για τα μεταγλωττισμένα μοντέλα.
  2. Φορτώστε ένα προεκπαιδευμένο StableDiffusionPipeline μοντέλο, με τη διαμόρφωσή του να έχει καθοριστεί για χρήση του τύπου δεδομένων bfloat16.
  3. Φορτώστε το μοντέλο UNet σε δύο πυρήνες Neuron χρησιμοποιώντας το torch_neuronx.DataParallel API. Αυτό επιτρέπει την εκτέλεση παράλληλων συμπερασμάτων δεδομένων, γεγονός που μπορεί να επιταχύνει σημαντικά την απόδοση του μοντέλου.
  4. Τοποθετήστε τα υπόλοιπα μέρη του μοντέλου (text_encoder, decoder, να post_quant_conv) σε έναν μοναδικό πυρήνα νευρώνα.

Στη συνέχεια, μπορείτε να εκτελέσετε τη διοχέτευση παρέχοντας κείμενο εισαγωγής ως προτροπές. Ακολουθούν μερικές εικόνες που δημιουργούνται από το μοντέλο για τις προτροπές:

  • Πορτρέτο του renaud sechan, στυλό και μελάνι, περίπλοκα γραμμικά σχέδια, από τον Craig Mullins, Ruan Jia, Kentaro Miura, Greg Rutkowski, Loundraw

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

  • Πορτρέτο του παλιού ανθρακωρύχου τον 19ο αιώνα, όμορφη ζωγραφική, με εξαιρετικά λεπτομερή ζωγραφική προσώπου από τον Γκρεγκ Ρουτκόφσκι

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

  • Ένα κάστρο στη μέση ενός δάσους

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Host Stable Diffusion 2.1 σε AWS Inferentia2 και SageMaker

Η φιλοξενία μοντέλων Stable Diffusion με το SageMaker απαιτεί επίσης μεταγλώττιση με το Neuron SDK. Μπορείτε να ολοκληρώσετε τη συλλογή εκ των προτέρων ή κατά τη διάρκεια της εκτέλεσης χρησιμοποιώντας κοντέινερ Large Model Inference (LMI). Η έγκαιρη μεταγλώττιση επιτρέπει ταχύτερους χρόνους φόρτωσης του μοντέλου και είναι η προτιμώμενη επιλογή.

Τα κοντέινερ SageMaker LMI παρέχουν δύο τρόπους για την ανάπτυξη του μοντέλου:

  • Μια επιλογή χωρίς κωδικό όπου απλώς παρέχουμε α serving.properties αρχείο με τις απαιτούμενες διαμορφώσεις
  • Φέρτε το δικό σας σενάριο συμπερασμάτων

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

Διαμορφώστε το μοντέλο με ένα παρεχόμενο σενάριο

Σε αυτήν την ενότητα, δείχνουμε πώς να διαμορφώσετε το κοντέινερ LMI ώστε να φιλοξενεί τα μοντέλα Stable Diffusion. Ο φορητός υπολογιστής SD2.1 διαθέσιμος σε GitHub. Το πρώτο βήμα είναι να δημιουργήσετε το πακέτο διαμόρφωσης μοντέλου σύμφωνα με την ακόλουθη δομή καταλόγου. Στόχος μας είναι να χρησιμοποιήσουμε τις ελάχιστες διαμορφώσεις μοντέλου που απαιτούνται για τη φιλοξενία του μοντέλου. Η δομή του καταλόγου που απαιτείται είναι η εξής:

<config-root-directory> / 
    ├── serving.properties
    │   
    └── model.py [OPTIONAL]

Στη συνέχεια, δημιουργούμε το σερβίρισμα.ιδιοκτησίες αρχείο με τις ακόλουθες παραμέτρους:

%%writefile code_sd/serving.properties
engine=Python
option.entryPoint=djl_python.transformers-neuronx
option.use_stable_diffusion=True
option.model_id=s3url
option.tensor_parallel_degree=2
option.dtype=bf16

Οι παράμετροι καθορίζουν τα εξής:

  • επιλογή.model_id – Τα κοντέινερ LMI χρησιμοποιούν s5cmd για να φορτώσουν το μοντέλο από τη θέση S3 και επομένως πρέπει να καθορίσουμε τη θέση όπου βρίσκονται τα μεταγλωττισμένα βάρη μας.
  • option.entryPoint – Για να χρησιμοποιήσουμε τους ενσωματωμένους χειριστές, καθορίζουμε την κλάση transformers-neuronx. Εάν έχετε ένα προσαρμοσμένο σενάριο συμπερασμάτων, θα πρέπει να το παρέχετε.
  • επιλογή.dtype – Αυτό καθορίζει τη φόρτωση των βαρών σε συγκεκριμένο μέγεθος. Για αυτήν την ανάρτηση, χρησιμοποιούμε το BF16, το οποίο μειώνει περαιτέρω τις απαιτήσεις μνήμης έναντι του FP32 και μειώνει τον λανθάνοντα χρόνο μας λόγω αυτού.
  • επιλογή.tensor_parallel_degree – Αυτή η παράμετρος καθορίζει τον αριθμό των επιταχυντών που χρησιμοποιούμε για αυτό το μοντέλο. Ο επιταχυντής τσιπ AWS Inferentia2 έχει δύο πυρήνες Neuron και έτσι καθορίζοντας μια τιμή 2 σημαίνει ότι χρησιμοποιούμε έναν επιταχυντή (δύο πυρήνες). Αυτό σημαίνει ότι μπορούμε πλέον να δημιουργήσουμε πολλούς εργαζόμενους για να αυξήσουμε την απόδοση του τελικού σημείου.
  • επιλογή.μηχανή – Αυτό έχει οριστεί σε Python για να υποδείξει ότι δεν θα χρησιμοποιήσουμε άλλους μεταγλωττιστές όπως το DeepSpeed ​​ή το Faster Transformer για αυτήν τη φιλοξενία.

Φέρτε το δικό σας σενάριο

Εάν θέλετε να φέρετε το δικό σας προσαρμοσμένο σενάριο συμπερασμάτων, πρέπει να καταργήσετε το option.entryPoint από serving.properties. Το δοχείο LMI σε αυτήν την περίπτωση θα αναζητήσει α model.py αρχείο στην ίδια θέση με το serving.properties και χρησιμοποιήστε το για να εκτελέσετε την εξαγωγή συμπερασμάτων.

Δημιουργήστε το δικό σας σενάριο συμπερασμάτων (model.py)

Η δημιουργία του δικού σας σεναρίου συμπερασμάτων είναι σχετικά απλή χρησιμοποιώντας το κοντέινερ LMI. Το δοχείο απαιτεί τη δική σας model.py αρχείο για να υπάρχει υλοποίηση της ακόλουθης μεθόδου:

def handle(inputs: Input) which returns an object of type Outputs

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

Αντικαταστήστε το cross_attention ενότητα με τη βελτιστοποιημένη έκδοση:

# Replace original cross-attention module with custom cross-attention module for better performance
    CrossAttention.get_attention_scores = get_attention_scores
Load the compiled weights for the following
text_encoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'text_encoder.pt')
decoder_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'vae_decoder.pt')
unet_filename = os.path.join(COMPILER_WORKDIR_ROOT, 'unet.pt')
post_quant_conv_filename =. os.path.join(COMPILER_WORKDIR_ROOT, 'vae_post_quant_conv.pt')

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

Στη συνέχεια, πρέπει να τα φορτώσουμε χρησιμοποιώντας το Neuron SDK και να τα ορίσουμε στα πραγματικά βάρη του μοντέλου. Κατά τη φόρτωση των βελτιστοποιημένων βαρών UNet, σημειώστε ότι καθορίζουμε επίσης τον αριθμό των πυρήνων Neuron στους οποίους χρειαζόμαστε για να τους φορτώσουμε. Εδώ, φορτώνουμε σε έναν μόνο επιταχυντή με δύο πυρήνες:

# Load the compiled UNet onto two neuron cores.
    pipe.unet = NeuronUNet(UNetWrap(pipe.unet))
    logging.info(f"Loading model: unet:created")
    device_ids = [idx for idx in range(tensor_parallel_degree)]
   
    pipe.unet.unetwrap = torch_neuronx.DataParallel(torch.jit.load(unet_filename), device_ids, set_dynamic_batching=False)
   
 
    # Load other compiled models onto a single neuron core.
 
    # - load encoders
    pipe.text_encoder = NeuronTextEncoder(pipe.text_encoder)
    clip_compiled = torch.jit.load(text_encoder_filename)
    pipe.text_encoder.neuron_text_encoder = clip_compiled
    #- load decoders
    pipe.vae.decoder = torch.jit.load(decoder_filename)
    pipe.vae.post_quant_conv = torch.jit.load(post_quant_conv_filename)

Εκτελώντας το συμπέρασμα με μια προτροπή καλείται το αντικείμενο σωλήνα για να δημιουργήσει μια εικόνα.

Δημιουργήστε το τελικό σημείο του SageMaker

Χρησιμοποιούμε Boto3 API για να δημιουργήσουμε ένα τελικό σημείο του SageMaker. Ολοκληρώστε τα παρακάτω βήματα:

  1. Δημιουργήστε το tarball μόνο με το σερβίρισμα και το προαιρετικό model.py αρχεία και ανεβάστε το στο Amazon S3.
  2. Δημιουργήστε το μοντέλο χρησιμοποιώντας το κοντέινερ εικόνας και το μοντέλο tarball που μεταφορτώθηκε νωρίτερα.
  3. Δημιουργήστε τη διαμόρφωση τελικού σημείου χρησιμοποιώντας τις ακόλουθες βασικές παραμέτρους:
    1. Χρησιμοποιήστε ένα ml.inf2.xlarge παράδειγμα.
    2. σετ ContainerStartupHealthCheckTimeoutInSeconds έως 240 για να βεβαιωθείτε ότι ο έλεγχος υγείας ξεκινά μετά την ανάπτυξη του μοντέλου.
    3. σετ VolumeInGB σε μεγαλύτερη τιμή, ώστε να μπορεί να χρησιμοποιηθεί για τη φόρτωση των βαρών μοντέλων που έχουν μέγεθος 32 GB.

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

Αφού δημιουργήσετε το αρχείο model.tar.gz και το ανεβάσετε στο Amazon S3, πρέπει να δημιουργήσουμε ένα μοντέλο SageMaker. Χρησιμοποιούμε το κοντέινερ LMI και το τεχνούργημα μοντέλου από το προηγούμενο βήμα για να δημιουργήσουμε το μοντέλο SageMaker. Το SageMaker μας επιτρέπει να προσαρμόσουμε και να εισάγουμε διάφορες μεταβλητές περιβάλλοντος. Για αυτήν τη ροή εργασίας, μπορούμε να αφήσουμε τα πάντα ως προεπιλογή. Δείτε τον παρακάτω κώδικα:

inference_image_uri = (
    f"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0 djl-serving-inf2"
)

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

model_name = name_from_base(f"inf2-sd")
create_model_response = boto3_sm_client.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    PrimaryContainer={"Image": inference_image_uri, "ModelDataUrl": s3_code_artifact},
)

Δημιουργήστε ένα τελικό σημείο του SageMaker

Σε αυτήν την επίδειξη, χρησιμοποιούμε ένα παράδειγμα ml.inf2.xlarge. Πρέπει να ρυθμίσουμε το VolumeSizeInGB παραμέτρους για την παροχή του απαραίτητου χώρου στο δίσκο για τη φόρτωση του μοντέλου και των βαρών. Αυτή η παράμετρος ισχύει για περιπτώσεις που υποστηρίζουν το Κατάστημα Amazon Elastic Block Εξάρτημα όγκου (Amazon EBS). Μπορούμε να αφήσουμε το χρονικό όριο λήψης μοντέλου και τον έλεγχο υγείας εκκίνησης κοντέινερ σε υψηλότερη τιμή, η οποία θα δώσει επαρκή χρόνο στο κοντέινερ να τραβήξει τα βάρη από το Amazon S3 και να φορτώσει στους επιταχυντές AWS Inferentia2. Για περισσότερες λεπτομέρειες, ανατρέξτε στο ΔημιουργίαEndpointConfig.

endpoint_config_response = boto3_sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "VariantName": "variant1",
            "ModelName": model_name,
            "InstanceType": "ml.inf2.xlarge", # - 
            "InitialInstanceCount": 1,
            "ContainerStartupHealthCheckTimeoutInSeconds": 360, 
            "VolumeSizeInGB": 400
        },
    ],
)

Τέλος, δημιουργούμε ένα τελικό σημείο του SageMaker:

create_endpoint_response = boto3_sm_client.create_endpoint(
    EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)

Επικαλέστε το τελικό σημείο του μοντέλου

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

response_model = boto3_sm_run_client.invoke_endpoint( EndpointName=endpoint_name,
    Body=json.dumps(
        {
            "prompt": "Mountain Landscape", 
            "parameters": {} # 
        }
    ), 
    ContentType="application/json",
)

Συγκριτική αξιολόγηση του μοντέλου Stable Diffusion στο Inf2

Πραγματοποιήσαμε μερικές δοκιμές για τη συγκριτική αξιολόγηση του μοντέλου Stable Diffusion με τύπο δεδομένων BF 16 στο Inf2 και είμαστε σε θέση να εξαγάγουμε αριθμούς καθυστέρησης που ανταγωνίζονται ή υπερβαίνουν ορισμένους από τους άλλους επιταχυντές για τη σταθερή διάχυση. Αυτό, σε συνδυασμό με το χαμηλότερο κόστος των τσιπ AWS Inferentia2, το καθιστά μια εξαιρετικά πολύτιμη πρόταση.

Οι παρακάτω αριθμοί προέρχονται από το μοντέλο Stable Diffusion που έχει αναπτυχθεί σε μια παρουσία inf2.xl. Για περισσότερες πληροφορίες σχετικά με το κόστος, ανατρέξτε στο Παρουσίες Amazon EC2 Inf2.

Μοντέλο Ανάλυση Τύπος δεδομένων Επαναλήψεις P95 Latency (ms) Inf2.xl Κατ' απαίτηση κόστος ανά ώρα Inf2.xl (Κόστος ανά εικόνα)
Σταθερή Διάχυση 1.5 512 × 512 bf16 50 2,427.4 $0.76 $0.0005125
Σταθερή Διάχυση 1.5 768 × 768 bf16 50 8,235.9 $0.76 $0.0017387
Σταθερή Διάχυση 1.5 512 × 512 bf16 30 1,456.5 $0.76 $0.0003075
Σταθερή Διάχυση 1.5 768 × 768 bf16 30 4,941.6 $0.76 $0.0010432
Σταθερή Διάχυση 2.1 512 × 512 bf16 50 1,976.9 $0.76 $0.0004174
Σταθερή Διάχυση 2.1 768 × 768 bf16 50 6,836.3 $0.76 $0.0014432
Σταθερή Διάχυση 2.1 512 × 512 bf16 30 1,186.2 $0.76 $0.0002504
Σταθερή Διάχυση 2.1 768 × 768 bf16 30 4,101.8 $0.76 $0.0008659

Συμπέρασμα

Σε αυτήν την ανάρτηση, ασχολούμαστε βαθιά με τη συλλογή, τη βελτιστοποίηση και την ανάπτυξη του μοντέλου Stable Diffusion 2.1 χρησιμοποιώντας στιγμιότυπα Inf2. Επιδείξαμε επίσης την ανάπτυξη μοντέλων Stable Diffusion χρησιμοποιώντας το SageMaker. Οι περιπτώσεις Inf2 προσφέρουν επίσης εξαιρετική απόδοση τιμής για το Stable Diffusion 1.5. Για να μάθετε περισσότερα σχετικά με το γιατί οι παρουσίες Inf2 είναι ιδανικές για γενετικά μοντέλα τεχνητής νοημοσύνης και μεγάλα γλωσσικά μοντέλα, ανατρέξτε στο Οι παρουσίες Amazon EC2 Inf2 για χαμηλού κόστους και υψηλής απόδοσης Generative AI Inference είναι πλέον γενικά διαθέσιμες. Για λεπτομέρειες απόδοσης, ανατρέξτε στο Απόδοση Inf2. Δείτε επιπλέον παραδείγματα στο GitHub repo.

Ιδιαίτερες ευχαριστίες στους Matthew Mcclain, Beni Hegedus, Kamran Khan, Shruti Koparkar και Qing Lan για την κριτική και την παροχή πολύτιμων εισροών.


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

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Vivek Gangasani είναι ανώτερος αρχιτέκτονας λύσεων μηχανικής μάθησης στο Amazon Web Services. Συνεργάζεται με startups μηχανικής εκμάθησης για τη δημιουργία και την ανάπτυξη εφαρμογών AI/ML στο AWS. Επί του παρόντος επικεντρώνεται στην παροχή λύσεων για MLOps, ML συμπερασμάτων και ML χαμηλού κώδικα. Έχει εργαστεί σε έργα σε διαφορετικούς τομείς, συμπεριλαμβανομένης της επεξεργασίας φυσικής γλώσσας και της όρασης υπολογιστή.

Μεγιστοποιήστε την απόδοση σταθερής διάχυσης και μειώστε το κόστος συμπερασμάτων με το AWS Inferentia2 | Υπηρεσίες Ιστού Amazon PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.KC Tung είναι Senior Solution Architect στα AWS Annapurna Labs. Ειδικεύεται στην εκπαίδευση και ανάπτυξη μοντέλων μεγάλης βαθιάς μάθησης σε κλίμακα στο cloud. Έχει Ph.D. στη μοριακή βιοφυσική από το University of Texas Southwestern Medical Center στο Ντάλας. Έχει μιλήσει σε AWS Summits και AWS Reinvent. Σήμερα βοηθά τους πελάτες να εκπαιδεύσουν και να αναπτύξουν μεγάλα μοντέλα PyTorch και TensorFlow στο AWS cloud. Είναι συγγραφέας δύο βιβλίων: Μάθετε το TensorFlow Enterprise και Αναφορά TensorFlow 2 Pocket.

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

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

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

Χρησιμοποιήστε τη μηχανική εκμάθηση χωρίς κώδικα για να αντλήσετε γνώσεις από κριτικές προϊόντων χρησιμοποιώντας μοντέλα ανάλυσης συναισθήματος και ανάλυσης κειμένου Amazon SageMaker Canvas | Υπηρεσίες Ιστού της Amazon

Κόμβος πηγής: 1899999
Σφραγίδα ώρας: 9 Οκτωβρίου 2023