השתמש בתסריטי אימון משלך ובחר אוטומטית את הדגם הטוב ביותר באמצעות אופטימיזציה של היפרפרמטרים באמזון SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

השתמש בתסריטי אימון משלך ובחר אוטומטית את הדגם הטוב ביותר באמצעות אופטימיזציה של היפרפרמטרים באמזון SageMaker

ההצלחה של כל צינור למידת מכונה (ML) תלויה לא רק באיכות המודל המשמש, אלא גם ביכולת להתאמן ולחזור על המודל הזה. אחת הדרכים המרכזיות לשיפור מודל ML היא על ידי בחירת פרמטרים ניתנים לכוונון טובים יותר, הידועים בשם יתר פרמטרים. זה ידוע כאופטימיזציה של היפרפרמטרים (HPO). עם זאת, ביצוע כוונון זה באופן ידני יכול לעתים קרובות להיות מסורבל בשל גודל מרחב החיפוש, ולעיתים כרוך באלפי איטרציות אימון.

הפוסט הזה מראה איך אמזון SageMaker מאפשר לך לא רק להביא אלגוריתם מודל משלך באמצעות מצב סקריפט, אלא גם להשתמש באלגוריתם HPO המובנה. תלמד כיצד להפיק בקלות את מדד ההערכה הרצוי אמזון CloudWatch, שממנו תוכל לחלץ את המדד הזה כדי להנחות את האלגוריתם האוטומטי של 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 פיקסלים המסומנים של ספרות בכתב יד. מערך הנתונים מחולק ל-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 ואת הקידומת לשימוש עבור אימון ונתוני מודל. זה צריך להיות באותו אזור כמו מופע המחברת, ההדרכה והאירוח. הקוד הבא משתמש ב- דלי ברירת מחדל אם הוא כבר קיים, או יוצר אחד חדש אם לא. אנחנו גם חייבים לכלול את תפקיד IAM ARN כדי לתת הדרכה וגישה לאירוח לנתונים שלך. אנו משתמשים 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, והעלה אותו לאמזון 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. כדי להבטיח שעבודת הדרכה זו הוגדרה כהלכה, עם קוד הדרכה עובד, נוכל להתחיל עבודת הדרכה על ידי התאמתה לנתונים שהעלינו לאמזון S3. SageMaker מבטיח שהנתונים שלנו זמינים במערכת הקבצים המקומית, כך שסקריפט ההדרכה שלנו יכול פשוט לקרוא את הנתונים מהדיסק:
    estimator.fit({"training": inputs})

עם זאת, אנחנו לא יוצרים משרת הכשרה אחת. אנו משתמשים ביכולת כוונון הדגם האוטומטי של SageMaker באמצעות עבודת כוונון היפרפרמטרים. כוונון הדגם הוא אגנוסטי לחלוטין לאלגוריתם המודל בפועל. למידע נוסף על כל ההיפרפרמטרים שתוכל לכוונן, עיין בצע כוונון דגמים אוטומטי עם SageMaker.

עבור כל היפרפרמטר שאנו רוצים לבצע אופטימיזציה, עלינו להגדיר את הדברים הבאים:

  • שם
  • סוג (פרמטרים יכולים להיות מספר שלם, רציף או קטגורי)
  • מגוון ערכים לחקור
  • סוג קנה מידה (ליניארי, לוגריתמי, לוגריתמי הפוך או אוטומטי); זה מאפשר לנו לשלוט כיצד טווח פרמטרים ספציפי ייבדק

עלינו להגדיר גם את המדד עבורו אנו מבצעים אופטימיזציה. זה יכול להיות כל ערך מספרי כל עוד הוא גלוי ביומן האימונים ואתה יכול להעביר ביטוי רגולרי כדי לחלץ אותו.

אם נסתכל על שורה 181 ב-mnist.py, נוכל לראות כיצד אנו מדפיסים ל-logger:

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. גודל האצווה (גודל אצווה) הוא פרמטר קטגורי עם הערכים הבדידים הקודמים.

    לאחר מכן, אנו מציינים את המדד האובייקטיבי שנרצה לכוונן ואת ההגדרה שלו. זה כולל את הביטוי הרגולרי (regex) הדרוש כדי לחלץ את המדד הזה מיומני CloudWatch של עבודת ההדרכה שראינו בעבר. אנו מציינים גם שם תיאורי אובדן בדיקה ממוצע ואת סוג המטרה כ-Minimize, כך שכוונון ההיפרפרמטרים מבקש למזער את מדד המטרה בעת חיפוש אחר הגדרת ההיפרפרמטר הטובה ביותר.

  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,
    )

לפני שנתחיל במלאכת הכוונון, כדאי לשים לב כיצד נקבעים שילובי הפרמטרים. כדי לקבל תוצאות טובות, עליך לבחור את הטווחים הנכונים לבדיקה. כברירת מחדל, נעשה שימוש באסטרטגיית החיפוש הבייסיאנית, המתוארת בהמשך כיצד פועל כוונון היפרפרמטרים.

עם אופטימיזציה בייסיאנית, כוונון היפרפרמטרים מטופל כאל נסיגה בְּעָיָה. כדי לפתור את בעיית הרגרסיה הזו, הוא עושה ניחושים לגבי אילו שילובי היפרפרמטרים יקבלו את התוצאות הטובות ביותר, ומפעיל עבודות אימון לבדיקת ערכים אלו. הוא משתמש ברגרסיה כדי לבחור את הסט הבא של ערכי היפרפרמטר לבדיקה. יש כאן פשרה ברורה של ניצול/חקר שאסטרטגיית החיפוש עושה. זה יכול לבחור ערכי היפרפרמטרים קרובים לשילוב שהביא לעבודת האימון הקודמת הטובה ביותר כדי לשפר בהדרגה את הביצועים. לחלופין, הוא עשוי לבחור ערכים רחוקים יותר, כדי לנסות ולחקור טווח חדש של ערכים שעדיין לא מובן היטב.

עם זאת, תוכל לציין אסטרטגיות חיפוש אחרות. האסטרטגיות הבאות נתמכות ב- 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, עיין ב אמזון SageMaker כוונון דגם אוטומטי. התאם את המודל שלך לאופטימיזציה אוטומטית של היפרפרמטרים ב- SageMaker היום.


על הסופר

השתמש בתסריטי אימון משלך ובחר אוטומטית את הדגם הטוב ביותר באמצעות אופטימיזציה של היפרפרמטרים באמזון SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.סם פרייס הוא יועץ לשירותים מקצועיים המתמחה ב-AI/ML וניתוח נתונים ב- Amazon Web Services. הוא עובד בשיתוף פעולה הדוק עם לקוחות המגזר הציבורי בתחום הבריאות ומדעי החיים כדי לפתור בעיות מאתגרות. כשהוא לא עושה את זה, סאם נהנה לנגן בגיטרה וטניס, ולראות את להקות האינדי האהובות עליו.

בול זמן:

עוד מ למידת מכונות AWS