בצע אופטימיזציה של עבודות ההסקה שלך באמצעות הסקת הסקת אצווה דינמית עם TorchServe ב- Amazon SageMaker

צומת המקור: 1884601

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

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

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

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

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

שיטות עבודה מומלצות להסקת אצווה

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

עבור יישומים בזמן אמת, חביון הוא לעתים קרובות הדאגה העיקרית. יש פשרה בין תפוקה גבוהה יותר לבין גודל אצווה מוגדל והשהייה; ייתכן שתצטרך להתאים לפי הצורך כדי לעמוד ב-SLA של זמן האחזור שלך. מבחינת שיטות עבודה מומלצות בענן, העלות למספר מסוים של מסקנות היא קו מנחה מועיל בקבלת החלטה מושכלת העונה על הצרכים העסקיים שלך. גורם אחד התורם בניהול העלות הוא בחירת המאיץ הנכון. למידע נוסף, ראה בחר את מאיץ הבינה המלאכותית ואת אוסף הדגמים הטובים ביותר להסקת ראייה ממוחשבת עם Amazon SageMaker.

TorchServe אצווה דינמית ב- SageMaker

לפידרבס היא ספריית PyTorch המקורית להגשת דגמים בייצור בקנה מידה. זה פיתוח משותף של פייסבוק ו-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 S3). ה-inference.py דומה למטפל המותאם אישית של TorchServe; יש לו מספר פונקציות שאתה יכול לעקוף כדי להתאים את האתחול המודל, עיבוד מקדים ואחרי עיבוד של בקשות שהתקבלו, והיגיון מסקנות.

הבא מחברה מציג דוגמה מלאה לפריסת דגם Hugging Face BERT.

אם אתה צריך מיכל מותאם אישית, אתה יכול לבנות תמונת מיכל מותאמת אישית ולדחוף אותה ל- מרשם מיכל אלסטי של אמזון מאגר (Amazon ECR). חפץ הדגם במקרה זה יכול להיות קובץ TorchServe .mar המאגד את חפצי הדגם יחד עם המטפל. אנו מדגימים זאת בסעיף הבא, שבו אנו משתמשים בעבודת שינוי אצווה של SageMaker.

עבודת שינוי אצווה של SageMaker

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

הראינו גם כיצד להגיש דגמים ב- SageMaker באמצעות תמונות מקוריות של ערכת הסקת הכלים של SageMaker PyTorch, וכיצד להשתמש בקונטיינרים מותאמים אישית עבור מקרי שימוש הדורשים הגדרות תצורה מתקדמות של TorchServe.

בעוד TorchServe ממשיך להתפתח כדי לתת מענה לצרכים של קהילת PyTorch, תכונות חדשות משולבות ב- SageMaker כדי לספק דרכים ביצועיות לשרת דגמים בייצור. למידע נוסף, בדוק את ריפו של TorchServe GitHub ו דוגמאות של SageMaker.


על הכותבים

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

ניקיל קולקרני היא מפתחת תוכנה עם AWS Machine Learning, המתמקדת בהפיכת עומסי עבודה של למידת מכונה לביצועים יותר בענן, והיא שותפה ליצירה של AWS Deep Learning Containers להדרכה והסקה. הוא נלהב ממערכות למידה עמוקות מבוזרות. מחוץ לעבודה הוא נהנה לקרוא ספרים, להתעסק בגיטרה ולהכין פיצה.

חמיד שוג'נאזרי הוא מהנדס שותפים ב-Pytorch שעובד על אופטימיזציה והגשה של מודלים עם ביצועים גבוהים של OSS. חמיד הוא בעל תואר P.h.D בראייה ממוחשבת ועבד כחוקר במעבדות מולטימדיה באוסטרליה, מלזיה והוביל NLP ב-Opus.ai. הוא אוהב למצוא פתרונות פשוטים יותר לבעיות קשות וחובב אמנות בזמנו הפנוי.

גיטה צ'אוהאן מוביל הנדסת שותפים בינה מלאכותית ב-Meta AI עם מומחיות בבניית פלטפורמות מבוזרות עמידות, אנטי שביר, בקנה מידה גדול עבור סטארט-אפים ו-Fortune 500s. הצוות שלה עובד עם שותפים אסטרטגיים, מובילי למידת מכונה ברחבי התעשייה וכל ספקי שירותי הענן הגדולים לבנייה והשקה של שירותים וחוויות מוצר AI חדשים; ולוקחת מודלים של PyTorch ממחקר לייצור.. היא זוכת נשים ב-IT – עמק הסיליקון – CTO של שנת 2019, דוברת מובהקת של ACM ומובילת מחשבה בנושאים החל מאתיקה ב-AI, למידה עמוקה, בלוקצ'יין, 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