Βελτιστοποιήστε τις εργασίες εξαγωγής συμπερασμάτων χρησιμοποιώντας δυναμική παρτίδα συμπερασμάτων με το TorchServe στο Amazon SageMaker

Κόμβος πηγής: 1884601

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

Η παρτίδα μπορεί να είναι χρήσιμη σε πολλά σενάρια κατά την ανάπτυξη του μοντέλου στην παραγωγή. Εδώ τα κατηγοριοποιούμε ευρέως σε δύο περιπτώσεις χρήσης:

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

Amazon Sage Maker παρέχει δύο δημοφιλείς επιλογές για τις εργασίες συμπερασμάτων σας. Για εφαρμογές σε πραγματικό χρόνο, το SageMaker Hosting χρησιμοποιεί το TorchServe ως τη βιβλιοθήκη εξυπηρέτησης backend που χειρίζεται τη δυναμική ομαδοποίηση των λαμβανόμενων αιτημάτων. Για εφαρμογές εκτός σύνδεσης, μπορείτε να χρησιμοποιήσετε εργασίες μαζικής μετατροπής του SageMaker. Σε αυτήν την ανάρτηση, παρουσιάζουμε ένα παράδειγμα κάθε επιλογής για να σας βοηθήσουμε να ξεκινήσετε.

Επειδή το TorchServe είναι εγγενές ενσωματωμένο με το SageMaker μέσω του Εργαλειοθήκη συμπερασμάτων SageMaker PyTorch, μπορείτε εύκολα να αναπτύξετε ένα μοντέλο PyTorch στο TorchServe χρησιμοποιώντας το SageMaker Hosting. Μπορεί επίσης να υπάρχουν φορές που πρέπει να προσαρμόσετε περαιτέρω το περιβάλλον σας χρησιμοποιώντας προσαρμοσμένες εικόνες Docker. Σε αυτήν την ανάρτηση, αρχικά δείχνουμε πώς να αναπτύξετε ένα τελικό σημείο σε πραγματικό χρόνο χρησιμοποιώντας την εγγενή εργαλειοθήκη συμπερασμάτων SageMaker PyTorch και διαμορφώνοντας το μέγεθος της παρτίδας για τη βελτιστοποίηση της απόδοσης. Στο δεύτερο παράδειγμα, δείχνουμε πώς να χρησιμοποιήσετε μια προσαρμοσμένη εικόνα Docker για να διαμορφώσετε προηγμένες διαμορφώσεις TorchServe που δεν είναι διαθέσιμες ως μεταβλητή περιβάλλοντος για τη βελτιστοποίηση της εργασίας συμπερασμάτων παρτίδας.

Βέλτιστες πρακτικές για συμπέρασμα παρτίδων

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

Για εφαρμογές σε πραγματικό χρόνο, η καθυστέρηση είναι συχνά ένα κύριο μέλημα. Υπάρχει μια αντιστάθμιση μεταξύ υψηλότερης απόδοσης και αυξημένου μεγέθους παρτίδας και καθυστέρησης. μπορεί να χρειαστεί να προσαρμόσετε όπως απαιτείται για να καλύψετε το SLA λανθάνοντος χρόνου. Όσον αφορά τις βέλτιστες πρακτικές στο cloud, το κόστος ανά συγκεκριμένο αριθμό συμπερασμάτων είναι μια χρήσιμη κατευθυντήρια γραμμή για τη λήψη μιας τεκμηριωμένης απόφασης που ανταποκρίνεται στις ανάγκες της επιχείρησής σας. Ένας παράγοντας που συμβάλλει στη διαχείριση του κόστους είναι η επιλογή του σωστού επιταχυντή. Για περισσότερες πληροφορίες, βλ Επιλέξτε τον καλύτερο επιταχυντή τεχνητής νοημοσύνης και συλλογή μοντέλων για συμπέρασμα όρασης υπολογιστή με το Amazon SageMaker.

TorchServe δυναμική παρτίδα στο SageMaker

TorchServe είναι η εγγενής βιβλιοθήκη PyTorch για την εξυπηρέτηση μοντέλων στην παραγωγή σε κλίμακα. Είναι μια κοινή ανάπτυξη από το Facebook και την AWS. Το TorchServe σάς επιτρέπει να παρακολουθείτε, να προσθέτετε προσαρμοσμένες μετρήσεις, να υποστηρίζετε πολλά μοντέλα, να αυξάνετε και να μειώνετε τον αριθμό των εργαζομένων μέσω ασφαλών API διαχείρισης και να παρέχετε τελικά σημεία συμπερασμάτων και επεξηγήσεων.

Για την υποστήριξη της επεξεργασίας παρτίδων, το TorchServe παρέχει μια δυνατότητα δυναμικής παρτίδας. Συγκεντρώνει τις ληφθείσες αιτήσεις μέσα σε ένα καθορισμένο χρονικό πλαίσιο, τις ομαδοποιεί και στέλνει την παρτίδα για συμπέρασμα. Τα αιτήματα που λαμβάνονται διεκπεραιώνονται μέσω του χειριστές στο TorchServe. Το TorchServe έχει πολλούς προεπιλεγμένους χειριστές και μπορείτε να δημιουργήσετε έναν προσαρμοσμένο χειριστή εάν η περίπτωση χρήσης σας δεν καλύπτεται. Όταν χρησιμοποιείτε έναν προσαρμοσμένο χειριστή, βεβαιωθείτε ότι η λογική συμπερασμάτων παρτίδας έχει εφαρμοστεί στο πρόγραμμα χειρισμού. Ένα παράδειγμα προσαρμοσμένου χειριστή με υποστήριξη συμπερασμάτων παρτίδας είναι διαθέσιμο στο GitHub.

Μπορείτε να διαμορφώσετε τη δυναμική παρτίδα χρησιμοποιώντας δύο ρυθμίσεις, batch_size και max_batch_delay, είτε μέσω μεταβλητών περιβάλλοντος στο SageMaker είτε μέσω του config.properties αρχείο στο TorchServe (εάν χρησιμοποιείτε προσαρμοσμένο κοντέινερ). Το TorchServe χρησιμοποιεί οποιαδήποτε από τις ρυθμίσεις που έρχεται πρώτη, είτε το μέγιστο μέγεθος παρτίδας (batch_size) ή καθορισμένο χρονικό παράθυρο αναμονής για τη λήξη της παρτίδας των αιτημάτων max_batch_delay.

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

Μπορείτε να ορίσετε το μέγεθος παρτίδας για τα μοντέλα PyTorch στο SageMaker μέσω μεταβλητών περιβάλλοντος. Εάν επιλέξετε να χρησιμοποιήσετε ένα προσαρμοσμένο κοντέινερ, μπορείτε να το δεσμεύσετε ρυθμίσεις in config.properties με το μοντέλο σας κατά τη συσκευασία του μοντέλου σας στο TorchServe. Το παρακάτω απόσπασμα κώδικα δείχνει ένα παράδειγμα πώς να ορίσετε το μέγεθος παρτίδας χρησιμοποιώντας μεταβλητές περιβάλλοντος και πώς να αναπτύξετε ένα μοντέλο PyTorch στο SageMaker:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

Στο απόσπασμα κώδικα, model_artifact αναφέρεται σε όλα τα απαιτούμενα αρχεία για τη φόρτωση του εκπαιδευμένου μοντέλου, το οποίο αρχειοθετείται σε ένα αρχείο .tar και προωθείται σε Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3) κάδος. Το inference.py είναι παρόμοιο με τον προσαρμοσμένο χειριστή TorchServe. Έχει πολλές λειτουργίες που μπορείτε να παρακάμψετε για να προσαρμόσετε την προετοιμασία του μοντέλου, την προεπεξεργασία και τη μεταεπεξεργασία των ληφθέντων αιτημάτων και τη λογική συμπερασμάτων.

Ο ακόλουθος σημειωματάριο δείχνει ένα πλήρες παράδειγμα ανάπτυξης ενός μοντέλου BERT Hugging Face.

Εάν χρειάζεστε ένα προσαρμοσμένο κοντέινερ, μπορείτε να δημιουργήσετε μια προσαρμοσμένη εικόνα κοντέινερ και να το σπρώξετε στο Μητρώο εμπορευματοκιβωτίων Amazon Elastic (Amazon ECR) αποθετήριο. Το τεχνούργημα μοντέλου σε αυτήν την περίπτωση μπορεί να είναι ένα αρχείο TorchServe .mar που ομαδοποιεί τα τεχνουργήματα του μοντέλου μαζί με τον χειριστή. Αυτό το δείχνουμε στην επόμενη ενότητα, όπου χρησιμοποιούμε μια εργασία μετασχηματισμού παρτίδας του SageMaker.

Εργασία μαζικής μεταμόρφωσης του SageMaker

Για περιπτώσεις χρήσης εκτός σύνδεσης όπου τα αιτήματα ομαδοποιούνται από μια πηγή δεδομένων όπως ένα σύνολο δεδομένων, το SageMaker παρέχει εργασίες μετατροπής παρτίδας. Αυτές οι εργασίες σάς επιτρέπουν να διαβάζετε δεδομένα από έναν κάδο S3 και να γράφετε τα αποτελέσματα σε έναν κάδο στόχο S3. Για περισσότερες πληροφορίες, βλ Χρησιμοποιήστε το Batch Transform για να λάβετε συμπεράσματα από μεγάλα σύνολα δεδομένων. Ένα πλήρες παράδειγμα συμπερασμάτων παρτίδας χρησιμοποιώντας εργασίες μετασχηματισμού παρτίδας μπορείτε να βρείτε παρακάτω σημειωματάριο, όπου χρησιμοποιούμε μοντέλο αυτόματης μετάφρασης από τον διαγωνισμό FLORES. Σε αυτό το παράδειγμα, δείχνουμε πώς να χρησιμοποιήσετε ένα προσαρμοσμένο κοντέινερ για να βαθμολογήσετε το μοντέλο μας χρησιμοποιώντας το SageMaker. Η χρήση ενός προσαρμοσμένου κοντέινερ συμπερασμάτων σάς επιτρέπει να προσαρμόσετε περαιτέρω τη διαμόρφωση TorchServe. Σε αυτό το παράδειγμα, θέλουμε να αλλάξουμε και να απενεργοποιήσουμε την αποκωδικοποίηση JSON, κάτι που μπορούμε να κάνουμε μέσω του TorchServe config.properties αρχείο.

Όταν χρησιμοποιείτε έναν προσαρμοσμένο χειριστή για το TorchServe, πρέπει να βεβαιωθούμε ότι ο χειριστής εφαρμόζει τη λογική συμπερασμάτων παρτίδας. Κάθε χειριστής μπορεί να έχει προσαρμοσμένες λειτουργίες για την εκτέλεση προεπεξεργασίας, συμπερασμάτων και μεταεπεξεργασίας. Ένα παράδειγμα προσαρμοσμένου χειριστή με υποστήριξη συμπερασμάτων παρτίδας είναι διαθέσιμο στο GitHub.

Χρησιμοποιούμε το προσαρμοσμένο κοντέινερ για να συνδυάσουμε τα τεχνουργήματα του μοντέλου με τον χειριστή όπως κάνουμε στο TorchServe (φτιάχνοντας ένα αρχείο .mar). Χρειαζόμαστε επίσης ένα σημείο εισόδου στο κοντέινερ Docker που ξεκινά το TorchServe με το μέγεθος παρτίδας και την αποκωδικοποίηση JSON σε config.properties. Αυτό το αποδεικνύουμε στο παράδειγμα σημειωματάριο.

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

  • Τοποθετήστε τα αρχεία εισόδου (όπως ένα σύνολο δεδομένων) σε έναν κάδο S3 και ορίστε τα ως πηγή δεδομένων στις ρυθμίσεις εργασίας.
  • Εκχωρήστε έναν κάδο S3 στον οποίο θα αποθηκεύονται τα αποτελέσματα της εργασίας μετασχηματισμού παρτίδας.
  • σετ Στρατηγική παρτίδας προς την MultiRecord και SplitType προς την Line εάν χρειάζεστε την εργασία μετασχηματισμού παρτίδας για να δημιουργήσετε μίνι παρτίδες από το αρχείο εισόδου. Εάν δεν μπορεί να χωρίσει αυτόματα το σύνολο δεδομένων σε μίνι παρτίδες, μπορείτε να το διαιρέσετε σε μίνι παρτίδες τοποθετώντας κάθε παρτίδα σε ένα ξεχωριστό αρχείο εισόδου, που θα τοποθετηθεί στον κάδο προέλευσης δεδομένων S3.
  • Βεβαιωθείτε ότι το μέγεθος της παρτίδας ταιριάζει στη μνήμη. Το SageMaker συνήθως το χειρίζεται αυτόματα. Ωστόσο, κατά τη χειροκίνητη διαίρεση των παρτίδων, αυτό πρέπει να ρυθμιστεί με βάση τη μνήμη.

Ο παρακάτω κώδικας είναι ένα παράδειγμα για μια εργασία μετασχηματισμού παρτίδας:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

Όταν χρησιμοποιούμε τις προηγούμενες ρυθμίσεις και εκκινούμε την εργασία μετασχηματισμού, διαβάζει τα αρχεία εισόδου από τον κάδο προέλευσης S3 σε παρτίδες και τα στέλνει για συμπέρασμα. Τα αποτελέσματα εγγράφονται στον κάδο S3 που καθορίζεται στις εξόδους.

Το ακόλουθο απόσπασμα κώδικα δείχνει πώς να δημιουργήσετε και να ξεκινήσετε μια εργασία χρησιμοποιώντας τις προηγούμενες ρυθμίσεις:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

Συμπέρασμα

Σε αυτήν την ανάρτηση, εξετάσαμε τις δύο λειτουργίες που προσφέρει το SageMaker για online και offline συμπέρασμα. Η πρώτη χρησιμοποιεί δυναμική παρτίδα που παρέχεται στο TorchServe για να ομαδοποιήσει τα αιτήματα από πολλούς πελάτες. Το τελευταίο χρησιμοποιεί μια εργασία μετασχηματισμού SageMaker για να συγκεντρώσει τα αιτήματα από τα αρχεία εισόδου σε έναν κάδο S3 και να εκτελέσει το συμπέρασμα.

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

Καθώς το TorchServe συνεχίζει να εξελίσσεται για να ανταποκρίνεται στις ανάγκες της κοινότητας του PyTorch, νέες δυνατότητες ενσωματώνονται στο SageMaker για να παρέχουν αποτελεσματικούς τρόπους εξυπηρέτησης μοντέλων στην παραγωγή. Για περισσότερες πληροφορίες, ρίξτε μια ματιά στο TorchServe GitHub repo και την Παραδείγματα SageMaker.


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

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

Νικίλ Κουλκάρνι είναι προγραμματιστής λογισμικού με το AWS Machine Learning, που εστιάζει στο να κάνει τους φόρτους εργασίας μηχανικής εκμάθησης πιο αποδοτικούς στο cloud και είναι συνδημιουργός των AWS Deep Learning Containers για εκπαίδευση και εξαγωγή συμπερασμάτων. Είναι παθιασμένος με τα κατανεμημένα συστήματα Deep Learning. Εκτός δουλειάς, του αρέσει να διαβάζει βιβλία, να ασχολείται με την κιθάρα και να φτιάχνει πίτσα.

Hamid Shojanazeri είναι Μηχανικός Συνεργάτης στην Pytorch που εργάζεται στη βελτιστοποίηση και εξυπηρέτηση μοντέλων υψηλής απόδοσης OSS. Ο Hamid είναι κάτοχος διδακτορικού στο Computer vision και εργάστηκε ως ερευνητής σε εργαστήρια πολυμέσων στην Αυστραλία, τη Μαλαισία και επικεφαλής του NLP στο Opus.ai. Του αρέσει να βρίσκει απλούστερες λύσεις σε δύσκολα προβλήματα και είναι λάτρης της τέχνης στον ελεύθερο χρόνο του.

Geeta Chauhan ηγείται της AI Partner Engineering στο Meta AI με τεχνογνωσία στην κατασκευή ανθεκτικών, αντι-εύθραυστων, μεγάλης κλίμακας κατανεμημένων πλατφορμών για startups και Fortune 500s. Η ομάδα της συνεργάζεται με στρατηγικούς συνεργάτες, ηγέτες μηχανικής μάθησης σε ολόκληρο τον κλάδο και όλους τους μεγάλους παρόχους υπηρεσιών cloud για τη δημιουργία και την κυκλοφορία νέων υπηρεσιών και εμπειριών προϊόντων τεχνητής νοημοσύνης. και μεταφέροντας τα μοντέλα της PyTorch από την έρευνα στην παραγωγή.. Είναι νικήτρια του Women in IT – Silicon Valley – CTO of the year 2019, διακεκριμένη ομιλήτρια ACM και ηγέτιδα σκέψης σε θέματα που κυμαίνονται από Ηθική στην τεχνητή νοημοσύνη, Deep Learning, Blockchain, IoT. Είναι παθιασμένη με την προώθηση της χρήσης του AI for Good.

Πηγή: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

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

Περισσότερα από Ιστολόγιο μηχανικής εκμάθησης AWS