Χρησιμοποιήστε τα δικά σας σενάρια εκπαίδευσης και επιλέξτε αυτόματα το καλύτερο μοντέλο χρησιμοποιώντας βελτιστοποίηση υπερπαραμέτρων στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Χρησιμοποιήστε τα δικά σας σενάρια εκπαίδευσης και επιλέξτε αυτόματα το καλύτερο μοντέλο χρησιμοποιώντας βελτιστοποίηση υπερπαραμέτρων στο Amazon SageMaker

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

Αυτή η ανάρτηση δείχνει πώς Amazon Sage Maker σας δίνει τη δυνατότητα όχι μόνο να φέρετε τον δικό σας αλγόριθμο μοντέλου χρησιμοποιώντας τη λειτουργία σεναρίου, αλλά και να χρησιμοποιήσετε τον ενσωματωμένο αλγόριθμο HPO. Θα μάθετε πώς να εξάγετε εύκολα τη μέτρηση αξιολόγησης της επιλογής σας amazoncloudwatch, από το οποίο μπορείτε να εξαγάγετε αυτήν τη μέτρηση για να καθοδηγήσετε τον αυτόματο αλγόριθμο HPO. Στη συνέχεια, μπορείτε να δημιουργήσετε μια εργασία συντονισμού HPO που ενορχηστρώνει πολλές εργασίες εκπαίδευσης και σχετικούς υπολογιστικούς πόρους. Με την ολοκλήρωση, μπορείτε να δείτε την καλύτερη εργασία κατάρτισης σύμφωνα με τη μέτρηση αξιολόγησης.

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

Ακολουθούμε τα παρακάτω βήματα:

  1. Χρησιμοποιήστε τη λειτουργία σεναρίου SageMaker για να φέρετε το δικό μας μοντέλο πάνω από ένα κοντέινερ που διαχειρίζεται το AWS.
  2. Αναδιαμορφώστε το σενάριο εκπαίδευσης για να εκτυπώσετε τη μέτρηση αξιολόγησής μας.
  3. Βρείτε τη μέτρηση στα αρχεία καταγραφής CloudWatch.
  4. Εξαγάγετε τη μέτρηση από το CloudWatch.
  5. Χρησιμοποιήστε το HPO για να επιλέξετε το καλύτερο μοντέλο συντονίζοντας αυτήν τη μέτρηση αξιολόγησης.
  6. Παρακολουθήστε το HPO και βρείτε την καλύτερη εργασία κατάρτισης.

Προϋποθέσεις

Για αυτήν την καθοδήγηση, θα πρέπει να έχετε τις ακόλουθες προϋποθέσεις:

Χρησιμοποιήστε προσαρμοσμένους αλγόριθμους σε ένα κοντέινερ που διαχειρίζεται το AWS

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

Χρησιμοποιούμε το Δεδομένα MNIST για αυτό το παράδειγμα. Το MNIST είναι ένα ευρέως χρησιμοποιούμενο σύνολο δεδομένων για χειρόγραφη ταξινόμηση ψηφίων, που αποτελείται από 70,000 επισημασμένες εικόνες σε κλίμακα του γκρι 28×28 pixel χειρόγραφων ψηφίων. Το σύνολο δεδομένων χωρίζεται σε 60,000 εικόνες εκπαίδευσης και 10,000 δοκιμαστικές εικόνες, που περιέχουν 10 κατηγορίες (μία για κάθε ψηφίο).

  1. Ανοίξτε την παρουσία του φορητού υπολογιστή σας και εκτελέστε την ακόλουθη εντολή για λήψη του mnist.py αρχείο:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Προτού λάβουμε και αποθηκεύσουμε τα δεδομένα, ας δημιουργήσουμε μια περίοδο λειτουργίας SageMaker. Θα πρέπει επίσης να καθορίσουμε τον κάδο και το πρόθεμα S3 που θα χρησιμοποιηθούν για εκπαίδευση και δεδομένα μοντέλου. Αυτό θα πρέπει να βρίσκεται στην ίδια περιοχή με την παρουσία του σημειωματάριου, την εκπαίδευση και τη φιλοξενία. Ο παρακάτω κώδικας χρησιμοποιεί το προεπιλεγμένος κάδος εάν υπάρχει ήδη, ή δημιουργεί ένα νέο εάν δεν υπάρχει. Πρέπει επίσης να συμπεριλάβουμε τον ρόλο ARN του IAM για να παρέχουμε πρόσβαση σε εκπαίδευση και φιλοξενία στα δεδομένα σας. Χρησιμοποιούμε get_execution_role() για να λάβετε τον ρόλο IAM που δημιουργήσατε για την περίπτωση του σημειωματάριου σας.

  2. Δημιουργήστε μια συνεδρία με τον ακόλουθο κώδικα:
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. Τώρα ας λάβουμε τα δεδομένα, ας τα αποθηκεύσουμε στον τοπικό μας φάκελο /dataκαι ανεβάστε το στο Amazon S3:
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    Μπορούμε τώρα να δημιουργήσουμε έναν εκτιμητή για να ρυθμίσουμε την εργασία εκπαίδευσης του PyTorch. Δεν εστιάζουμε στον πραγματικό κώδικα εκπαίδευσης εδώ (mnist.py) με μεγάλη λεπτομέρεια. Ας δούμε πώς μπορούμε εύκολα να επικαλεστούμε αυτό το σενάριο εκπαίδευσης για να αρχικοποιήσουμε μια εργασία εκπαίδευσης.

  4. Στον παρακάτω κώδικα, περιλαμβάνουμε ένα σενάριο σημείου εισόδου που ονομάζεται mnist.py που περιέχει τον προσαρμοσμένο εκπαιδευτικό μας κώδικα:
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. Για να διασφαλίσουμε ότι αυτή η εργασία εκπαίδευσης έχει διαμορφωθεί σωστά, με τον κώδικα εκπαίδευσης που λειτουργεί, μπορούμε να ξεκινήσουμε μια εργασία εκπαίδευσης προσαρμόζοντάς την στα δεδομένα που ανεβάσαμε στο Amazon S3. Το SageMaker διασφαλίζει ότι τα δεδομένα μας είναι διαθέσιμα στο τοπικό σύστημα αρχείων, ώστε το σενάριο εκπαίδευσης να μπορεί απλώς να διαβάζει τα δεδομένα από το δίσκο:
    estimator.fit({"training": inputs})

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

Για κάθε υπερπαράμετρο που θέλουμε να βελτιστοποιήσουμε, πρέπει να ορίσουμε τα εξής:

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

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

Αν κοιτάξουμε τη γραμμή 181 στο mnist.py, μπορούμε να δούμε πώς εκτυπώνουμε στο καταγραφικό:

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

Στην πραγματικότητα, μπορούμε να δούμε αυτό το αποτέλεσμα στα αρχεία καταγραφής της εργασίας εκπαίδευσης που μόλις εκτελέσαμε. Ανοίγοντας την ομάδα καταγραφής /aws/sagemaker/TrainingJobs στην κονσόλα CloudWatch, θα πρέπει να έχουμε ένα συμβάν καταγραφής που αρχίζει με pytorch-training- ακολουθούμενη από χρονική σήμανση και όνομα που δημιουργήθηκε.

Το παρακάτω στιγμιότυπο οθόνης επισημαίνει το αρχείο καταγραφής που αναζητούμε.

Ας αρχίσουμε τώρα να χτίζουμε την εργασία συντονισμού υπερπαραμέτρων.

  1. Όπως αναφέρθηκε, πρέπει πρώτα να ορίσουμε κάποιες πληροφορίες για τις υπερπαραμέτρους, κάτω από το αντικείμενο ως εξής:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Εδώ ορίσαμε τις δύο υπερπαραμέτρους μας. Ο ρυθμός εκμάθησης (lr) είναι μια συνεχής παράμετρος (άρα συνεχής τιμή) στην περιοχή 0.001 και 0.1. Το μέγεθος παρτίδας (batch-size) είναι μια κατηγορική παράμετρος με τις προηγούμενες διακριτές τιμές.

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

  2. Καθορίστε τη μέτρηση με τον ακόλουθο κώδικα:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Τώρα είμαστε έτοιμοι να δημιουργήσουμε το δικό μας HyperparameterTuner αντικείμενο. Εκτός από το αντικειμενικό μετρικό όνομα, τον τύπο και τον ορισμό, περνάμε στο hyperparameter_ranges αντικείμενο και τον εκτιμητή που δημιουργήσαμε προηγουμένως. Καθορίζουμε επίσης τον αριθμό των εργασιών που θέλουμε να εκτελέσουμε συνολικά, μαζί με τον αριθμό που θα πρέπει να εκτελούνται παράλληλα. Επιλέξαμε τον μέγιστο αριθμό εργασιών ως 9, αλλά συνήθως θα επιλέγατε έναν πολύ μεγαλύτερο αριθμό (όπως 50) για βέλτιστη απόδοση.

  3. Δημιουργήστε το HyperparameterTuner αντικείμενο με τον ακόλουθο κωδικό:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

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

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

Ωστόσο, μπορείτε να καθορίσετε άλλες στρατηγικές αναζήτησης. Οι ακόλουθες στρατηγικές υποστηρίζονται στο SageMaker:

  • Αναζήτηση πλέγματος – Δοκιμάζει κάθε δυνατό συνδυασμό μεταξύ του εύρους των υπερπαραμέτρων που καθορίζεται.
  • Τυχαία αναζήτηση – Δοκιμάζει τυχαίους συνδυασμούς μεταξύ του εύρους τιμών που καθορίζονται. Δεν εξαρτάται από τα αποτελέσματα προηγούμενων εργασιών εκπαίδευσης, επομένως μπορείτε να εκτελέσετε τον μέγιστο αριθμό ταυτόχρονων εργασιών εκπαίδευσης χωρίς να επηρεάσετε την απόδοση του συντονισμού.
  • Αναζήτηση υπερζώνης – Χρησιμοποιεί τόσο τα ενδιάμεσα όσο και τα τελικά αποτελέσματα των εργασιών εκπαίδευσης για την ανακατανομή των εποχών σε καλά χρησιμοποιούμενες διαμορφώσεις υπερπαραμέτρων και σταματά αυτόματα εκείνες που έχουν χαμηλή απόδοση.

Μπορείτε επίσης να εξερευνήσετε φέρνοντας τον δικό σας αλγόριθμο, όπως εξηγείται στο Φέρτε τον δικό σας αλγόριθμο βελτιστοποίησης υπερπαραμέτρων στο Amazon SageMaker.

  1. Στη συνέχεια ξεκινάμε την εκπαίδευση στο ίδιο το αντικείμενο του δέκτη (όχι στον εκτιμητή), καλώντας .fit() και περνώντας στη διαδρομή S3 στο σύνολο δεδομένων τρένου και δοκιμής:
    tuner.fit({"training": inputs})

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

Στη συνέχεια, είναι εύκολο να δείτε όλες τις επιμέρους εργασίες εκπαίδευσης που έχουν ολοκληρωθεί ή βρίσκονται σε εξέλιξη, μαζί με τη σχετική αντικειμενική μετρική τιμή τους. Στο παρακάτω στιγμιότυπο οθόνης, μπορούμε να δούμε ότι η πρώτη παρτίδα εργασιών εκπαίδευσης έχει ολοκληρωθεί, η οποία περιέχει τρεις συνολικά σύμφωνα με τις καθορισμένες μας max_parallel_jobs τιμή 3. Με την ολοκλήρωση, μπορούμε να βρούμε την καλύτερη εργασία κατάρτισης—αυτή που ελαχιστοποιεί τη μέση απώλεια δοκιμής—στο Καλύτερη δουλειά κατάρτισης Tab.

Στιγμιότυπο οθόνης της λίστας εργασιών κατάρτισης

εκκαθάριση

Για να αποφύγετε μελλοντικές χρεώσεις, διαγράψτε τους πόρους που αρχικοποιήσατε. Αυτά είναι ο κάδος S3, ο ρόλος IAM και η παρουσία του φορητού υπολογιστή SageMaker.

Συμπέρασμα

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

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


Σχετικά με τον Συγγραφέα

Χρησιμοποιήστε τα δικά σας σενάρια εκπαίδευσης και επιλέξτε αυτόματα το καλύτερο μοντέλο χρησιμοποιώντας βελτιστοποίηση υπερπαραμέτρων στο Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Σαμ Πράις είναι Σύμβουλος Επαγγελματιών Υπηρεσιών που ειδικεύεται στην AI/ML και στην ανάλυση δεδομένων στο Amazon Web Services. Συνεργάζεται στενά με πελάτες του δημόσιου τομέα στην υγειονομική περίθαλψη και τις βιοεπιστήμες για την επίλυση προκλητικών προβλημάτων. Όταν δεν το κάνει αυτό, ο Σαμ απολαμβάνει να παίζει κιθάρα και τένις και να βλέπει τα αγαπημένα του indie συγκροτήματα.

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

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