פוסט זה בבלוג נכתב בשיתוף ג'ונתן לי, נלסון לאונג, פול מין וטרוי סקווילאצ'י מאינטל.
In חלק 1 של פוסט זה, דנו כיצד Intel®3DAT שיתפה פעולה עם שירותים מקצועיים של AWS Machine Learning (MLPS) לבניית יישום AI SaaS ניתן להרחבה. 3DAT משתמש בראיה ממוחשבת וב-AI כדי לזהות, לעקוב ולנתח למעלה מ-1,000 נקודות נתונים ביו-מכניקה מווידאו סטנדרטי. זה מאפשר ללקוחות ליצור מוצרים מונעי ביומכניקה עשירים וחזקים, כגון אפליקציות אינטרנט ומובייל עם נתוני ביצועים מפורטים והדמיות תלת מימדיות.
בחלק 2 של פוסט זה, אנו צוללים עמוק יותר לתוך כל שלב של הארכיטקטורה. אנו חוקרים את שירותי ה-AWS המשמשים כדי לעמוד בדרישות התכנון של 3DAT, כולל זרמי נתונים של אמזון קינסי ו שירות קוברנט של אמזון (Amazon EKS), על מנת לפרוס בצורה מדורגת את המודלים הדרושים להערכת פוזות עבור יישום תוכנה כשירות (SaaS) זו.
סקירה כללית של אדריכלות
המטרה העיקרית של צוות MLPS הייתה לייצר את צינורות מודל הערכת הפוזה הדו-ממדית והתלת-ממדית וליצור יישום פונקציונלי וניתן להרחבה. התרשים הבא ממחיש את ארכיטקטורת הפתרון.
הארכיטקטורה השלמה מחולקת לחמישה מרכיבים עיקריים:
- שכבות ממשק יישומי משתמש
- מסד נתונים
- תזמור זרימת עבודה
- הפקת מסקנות להערכת תנוחה ניתנת להרחבה
- ניטור תפעולי
הבה נפרט על כל רכיב, האינטראקציות שלו והרציונל מאחורי בחירות העיצוב.
שכבות ממשק יישומי משתמש
התרשים הבא מציג את שכבות ממשק האפליקציה המספקות גישה ושליטה למשתמש באפליקציה ובמשאביה.
נקודות גישה אלו תומכות במקרים שימוש שונים המבוססים על אישיות לקוחות שונים. לדוגמה, משתמש באפליקציה יכול להגיש עבודה דרך ה-CLI, בעוד שמפתח יכול לבנות אפליקציה באמצעות Python SDK ולהטביע אינטליגנציה של הערכת פוזות באפליקציות שלו. ה-CLI וה-SDK בנויים כרכיבים מודולריים - שתי השכבות הן עוטפות של שכבת ה-API, אשר בנויה באמצעות שער API של אמזון כדי לפתור את קריאות ה-API ו משויך AWS Lambda פונקציות, שדואגות ללוגיקה האחורית הקשורה לכל קריאת API. שכבות אלו היו מרכיב מכריע עבור צוות Intel OTG מכיוון שהם פותחים בסיס רחב של לקוחות שיכולים להשתמש ביעילות ביישום SaaS זה.
שכבת API
לפתרון יש סט ליבה של תשעה ממשקי API, המתאימים לסוגי האובייקטים הפועלים בפלטפורמה זו. לכל API יש קובץ Python שמגדיר את פעולות ה-API שניתן להפעיל. יצירת אובייקטים חדשים מוקצה אוטומטית מזהה אובייקט ברצף. התכונות של אובייקטים אלה מאוחסנות ועוקבות אחר ה- אמזון אורורה ללא שרת מסד נתונים באמצעות מזהה זה. לכן, פעולות ה-API מתחברות לפונקציות המוגדרות בקובץ מרכזי המכיל את הלוגיקה האחורית לשאילתה במסד הנתונים של Aurora. ההיגיון האחורי הזה משתמש ב-Boto3 לקוח Amazon RDS DataService כדי לגשת לאשכול מסד הנתונים.
היוצא מן הכלל האחד הוא /job
API, שיש לו א create_job
שיטה המטפלת בהגשת וידאו ליצירת עבודת עיבוד חדשה. שיטה זו מתחילה את פונקציות שלב AWS לוגיקה של זרימת עבודה להפעלת העבודה. על ידי מעבר ב job_id
, שיטה זו משתמשת ב-Boto3 לקוח שלב פונקציות להתקשר start_execution
שיטה עבור מוגדר stateMachineARN
(שם משאב אמזון).
לשמונה ממשקי ה-API של אובייקטים יש את השיטות ודפוס הגישה הדומה כפי שמסוכמים בטבלה הבאה.
סוג השיטה | שם פונקציה | תיאור |
לקבל | list_[object_name]s |
בוחר את כל האובייקטים מסוג זה ממסד הנתונים ומציג. |
POST | create_[object] |
הוספת רשומת אובייקט חדשה עם כניסות נדרשות למסד הנתונים. |
לקבל | get_[object] |
בוחר תכונות אובייקט על סמך מזהה האובייקט ממסד הנתונים ומציג. |
PUT | update_[object] |
מעדכן רשומת אובייקט קיימת עם התשומות הנדרשות. |
למחוק | delete_[object] |
מוחק רשומת אובייקט קיימת ממסד הנתונים על סמך מזהה אובייקט. |
הפרטים של תשעת ממשקי ה-API הם כדלקמן:
- / user – משתמש הוא זהות של מישהו המורשה להגיש משרות לאפליקציה זו. יצירת משתמש דורשת שם משתמש, דוא"ל משתמש ומזהה קבוצה שהמשתמש שייך אליו.
- /קבוצת_משתמשים – קבוצת משתמשים היא אוסף של משתמשים. כל קבוצת משתמשים ממופה לפרויקט אחד ולסט פרמטרים אחד של צינור. כדי לקבל שכבות שונות (במונחים של משאבים תשתיתיים ופרמטרים של צינור), משתמשים מחולקים לקבוצות משתמשים. כל משתמש יכול להשתייך לקבוצת משתמשים אחת בלבד. היצירה של קבוצת משתמשים דורשת מזהה פרויקט, מזהה ערכת פרמטרים של צינור, שם קבוצת משתמשים ותיאור קבוצת משתמשים. שים לב שקבוצות משתמשים שונות מתפקידי המשתמש שהוגדרו בחשבון AWS. האחרון משמש כדי לספק רמת גישה שונה בהתבסס על תפקידי הגישה שלהם (למשל אדמין).
- /פּרוֹיֶקט - פרויקט משמש לקיבוץ קבוצות שונות של משאבים תשתיתיים יחד. פרויקט משויך ליחיד
project_cluster_url
(אשכול Aurora) להקלטת משתמשים, משרות ומטא נתונים אחרים, אproject_queue_arn
(Kinesis Data Streams ARN), וסביבת זמן ריצה ממוחשבת (נשלטת כעת באמצעות Cortex) המשמשת להרצת הסקת מסקנות על אצוות הפריימים או עיבוד לאחר הסרטונים. כל קבוצת משתמשים משויכת לפרויקט אחד, והמנגנון הזה הוא האופן שבו מופעלים שכבות שונות במונחים של חביון וכוח מחשוב עבור קבוצות שונות של משתמשים. יצירת פרויקט דורשת שם פרויקט, כתובת URL של אשכול פרויקט ותור לפרויקט ARN. - /צנרת – צינור משויך לתצורה בודדת לרצף של מיכלי עיבוד המבצעים עיבוד וידאו באשכול יצירת ההסקות של אמזון EKS המתואם על ידי Cortex (ראה סעיף על יצירת מסקנות עיבוד וידאו לפרטים נוספים). בדרך כלל, זה מורכב משלושה מיכלים: עיבוד מקדים ופענוח, זיהוי אובייקטים והערכת פוזות. לדוגמה, שלב הפענוח וזיהוי האובייקטים זהים עבור צינורות הדו-ממד והתלת-ממד, אך החלפת המיכל האחרון באמצעות HRNet או 2DMPPE גורמת להגדרת הפרמטרים עבור צינורות עיבוד דו-ממדיים לעומת תלת-ממד. אתה יכול ליצור תצורות חדשות כדי להגדיר צינורות אפשריים שניתן להשתמש בהם לעיבוד, וזה דורש כקלט קובץ Python חדש ב-Cortex repo המפרט את רצף הקריאה של נקודות הקצה של המודל שמגדירות את אותו צינור (ראה סעיף על יצירת הסקת מסקנות לעיבוד וידאו ). נקודת הקצה של הצינור היא נקודת הקצה של קורטקס שנקראת לעבד מסגרת בודדת. יצירת צינור דורשת שם צינור, תיאור צינור ונקודת קצה של צינור.
- /Pipeline_parameter_set – ערכת פרמטרים של צינור היא אוסף JSON גמיש של פרמטרים מרובים (זמן ריצה של תצורת צינור) עבור צינור מסוים, והוא נוסף על מנת לספק גמישות להתאמה אישית עתידית כאשר נדרשות זמני ריצה מרובים של תצורת צינור. ניתן לשייך קבוצות משתמשים לקבוצת פרמטרים מסוימת של צינור, ומטרתה לכלול קבוצות שונות של פרמטרים לכל קבוצת משתמשים ולכל צינור. זו הייתה תוספת חשובה צופה פני עתיד עבור Intel OTG לבניית התאמה אישית שתומכת בניידות כאשר לקוחות שונים, במיוחד ISVs, מתחילים להשתמש באפליקציה.
- /pipeline_parameters – אוסף יחיד של פרמטרים של צינור הוא מופע של ערכת פרמטרים של צינור. זה הופך אותו למיפוי 1:הרבה של פרמטר צינור שנקבע לפרמטרי צינור. API זה דורש מזהה צינור לשיוך לקבוצת הפרמטרים של צינור המאפשר יצירת צינור למיפוי 1:1 של פרמטרי צינור לצינור. שאר הקלטים הנדרשים על ידי API זה הם מזהה ערכת פרמטרים של צינור, ערך פרמטרי צינור ושם פרמטרים של צינור.
- /וִידֵאוֹ – אובייקט וידאו משמש להגדרת סרטונים בודדים המרכיבים חבילת .zip שנשלחה במהלך עבודה. קובץ זה מחולק למספר סרטונים לאחר ההגשה. סרטון קשור ל
job_id
עבור העבודה שבה נשלחת חבילת ה-zip, ו שירות אחסון פשוט של אמזון (Amazon S3) נתיבים למיקום הסרטונים המופרדים הגולמיים ותוצאות העיבוד של כל סרטון. אובייקט הווידאו מכיל גם אחוז התקדמות הווידאו, שמתעדכן באופן עקבי במהלך עיבוד של אצוות פריימים בודדות של אותו סרטון, כמו גם דגל סטטוס וידאו עבור הושלם או לא הושלם. היצירה של סרטון דורשת מזהה עבודה, נתיב וידאו, נתיב תוצאות וידאו, אחוז התקדמות הסרטון וסטטוס וידאו. - /frame_batch -
frame_batch
אובייקט הוא מיני אצווה של פריימים שנוצרו על ידי דגימה של סרטון בודד. הפרדת סרטון לקבוצות פריימים בגודל רגיל מספקת מנוף לכוונון זמן ההשהיה ומגבירה את ההקבלה והתפוקה. זוהי היחידה הגרנורית המופעלת דרך זרמי נתונים של Kinesis לצורך הסקת מסקנות. יצירה של אצווה מסגרת דורשת מזהה וידאו, מספר התחלה של אצווה מסגרת, מספר סיום אצווה של מסגרת, נתיב קלט אצווה של מסגרת, נתיב תוצאות אצווה של מסגרת וסטטוס אצווה של מסגרת. - /עבודה - API זה לאינטראקציה משמש להגשת קבצים כדי להתחיל עבודת עיבוד. ל-API הזה יש פונקציה שונה מממשקי API אחרים של אובייקטים, משום שזהו הנתיב הישיר לאינטראקציה עם תיאום זרימת העבודה של תהליכי עיבוד הווידאו של עיבוד הווידאו, ו-Amazon EKS. ממשק API זה דורש מזהה משתמש, מזהה פרויקט, מזהה צינור, מזהה ערכת פרמטרים של צינור, פרמטרי עבודה וסטטוס עבודה. בפרמטרים של העבודה מצוין נתיב קובץ קלט, שהוא המיקום באמזון S3 בו נמצאת חבילת ה-.zip של סרטונים לעיבוד. העלאת הקובץ מטופלת באמצעות ה
upload_handler
שיטה, אשר יוצרת כתובת URL מוגדרת מראש עבור המשתמש כדי למקם קובץ. WORKFLOW_STATEMACHINE_ARN הוא משתנה סביבה המועבר ל-create_job
API כדי לציין היכן נשלחת חבילת וידאו .zip עם נתיב קובץ קלט כדי להתחיל עבודה.
הטבלה הבאה מסכמת את הפונקציות של ה-API.
סוג השיטה | פונקציה | תיאור |
לקבל | list_jobs |
בוחר את כל העבודות ממסד הנתונים ומציג. |
POST | create_ job |
מוסיף רשומת עבודה חדשה עם מזהה משתמש, מזהה פרויקט, מזהה צינור, מזהה ערכת פרמטרים של צינור, נתיב תוצאות עבודה, פרמטרים של עבודה וסטטוס עבודה. |
לקבל | get_ job |
בוחר תכונות עבודה על סמך מזהה עבודה ממסד הנתונים ומציג. |
לקבל | upload_handler |
יוצר כתובת URL מוגדרת מראש של S3 כמיקום להעלאת קובץ ה-zip. דורש שם דלי S3 ומצפה לסוג יישום/קובץ zip. |
שכבת Python SDK
בהתבסס על ממשקי ה-API, הצוות יצר ספריית לקוח Python SDK בתור מעטפת כדי להקל על מפתחים לגשת לשיטות ה-API. הם השתמשו בקוד פתוח שירה, המטפל באריזה של Python וניהול התלות. הם יצרו א client.py
קובץ המכיל פונקציות העוטפות כל אחד מממשקי ה-API באמצעות Python requests
ספרייה לטיפול בבקשות API וחריגים.
כדי שמפתחים ישיקו את Intel 3DAT SDK, עליהם להתקין ולבנות את חבילת Poetry. לאחר מכן, הם יכולים להוסיף ייבוא Python פשוט של intel_3dat_sdk
לכל קוד של Python.
כדי להשתמש בלקוח, אתה יכול ליצור מופע של הלקוח, תוך ציון נקודת הקצה של ה-API:
לאחר מכן תוכל להשתמש בלקוח כדי לקרוא לשיטות בודדות כגון create_pipeline
שיטה (ראה את הקוד הבא), תוך שימוש בארגומנטים הנכונים כגון שם הצינור ותיאור הצינור.
שכבת CLI
באופן דומה, הצוות בנה על ממשק ה-API כדי ליצור ממשק שורת פקודה עבור משתמשים שרוצים לגשת לשיטות ה-API עם ממשק פשוט ללא צורך בכתיבת קוד Python. הם השתמשו בחבילת Python בקוד פתוח נְקִישָׁה (ערכת יצירת ממשק שורת פקודה). היתרונות של מסגרת זו הם קינון שרירותי של פקודות, יצירת דפי עזרה אוטומטית ותמיכה בטעינה עצלנית של פקודות משנה בזמן ריצה. באותו client.py
קובץ כמו ב-SDK, כל שיטה של לקוח SDK נעטפה באמצעות Click והארגומנטים של השיטה הנדרשים הומרו לדגלי שורת הפקודה. לאחר מכן נעשה שימוש בכניסות הדגל בעת קריאה לפקודה SDK.
כדי להפעיל את ה-CLI, אתה יכול להשתמש ב- CLI configure
פקודה. אתה מתבקש להזין את כתובת האתר של נקודת הקצה:
כעת אתה יכול להשתמש ב-CLI כדי לקרוא לפקודות שונות הקשורות לשיטות ה-API, למשל:
מסד נתונים
כמסד נתונים, יישום זה משתמש ב-Aurora Serverless כדי לאחסן מטא נתונים הקשורים לכל אחד מממשקי ה-API עם MYSQL כמנוע מסד הנתונים. הבחירה בשירות מסד הנתונים Aurora Serverless עומדת בעקרון התכנון כדי למזער את התקורה התשתיתית על ידי שימוש בשירותי AWS ללא שרתים במידת האפשר. התרשים הבא ממחיש את הארכיטקטורה הזו.
השמיים מצב מנוע ללא שרת עונה על דפוס השימוש לסירוגין מכיוון שהאפליקציה הזו מתרחבת ללקוחות חדשים ועומסי העבודה עדיין לא בטוחים. בעת הפעלת נקודת קצה של מסד נתונים, אין צורך בגודל מופע DB ספציפי, אלא רק טווח מינימלי ומקסימלי לקיבולת אשכול. Aurora Serverless מטפלת בהקצאה מתאימה של צי נתבים ומחלקה את עומס העבודה בין המשאבים. Aurora Serverless מבצעת שימור גיבוי אוטומטית למשך יום לפחות עד 1 ימים. הצוות עשה אופטימיזציה לבטיחות על ידי הגדרת ברירת המחדל לערך המרבי של 35.
בנוסף, הצוות השתמש ב- ממשק API לטפל בגישה לאשכול Aurora Serverless, שאינו דורש חיבור מתמשך, ובמקום זאת מספק נקודת קצה מאובטחת של HTTP ושילוב עם SDKs AWS. תכונה זו משתמשת מנהל סודות AWS כדי לאחסן את אישורי מסד הנתונים כך שאין צורך להעביר אישורים במפורש. סקריפטים של CREATE TABLE נכתבו בקבצי .sql עבור כל אחת מתשע הטבלאות המתאימות לתשעת ממשקי ה-API. מכיוון שמסד נתונים זה הכיל את כל המטא נתונים ומצב האובייקטים במערכת, שיטות ה-API הופעלו באמצעות פקודות SQL המתאימות (לדוגמה select * from Job
עבור list_jobs
API) והועבר ל- execute_statement
שיטה מלקוח Amazon RDS ב-Data API.
תזמור זרימת עבודה
עמוד השדרה הפונקציונלי של היישום טופל באמצעות Step Functions כדי לתאם את זרימת העבודה, כפי שמוצג בתרשים הבא.
מכונת המצב כללה רצף של ארבע פונקציות למבדה, שמתחילות כאשר משרה מוגשת באמצעות create_job
שיטה מתוך job
ממשק API. מזהה המשתמש, מזהה הפרויקט, מזהה הצינור, מזהה ערכת הפרמטרים של הצינור, נתיב תוצאות העבודה, פרמטרי העבודה וסטטוס העבודה נדרשים ליצירת עבודה. תחילה תוכל להעלות חבילת .zip של קובצי וידאו באמצעות ה upload_handler
שיטה מממשק ה-API ליצירת כתובת URL מוגדרת מראש של S3. במהלך הגשת העבודה, נתיב קובץ הקלט מועבר באמצעות פרמטרי העבודה, כדי לציין את מיקום הקובץ. זה מתחיל את הריצה של מכונת המצב של זרימת העבודה, ומפעיל ארבעה שלבים עיקריים:
- אתחול פונקציית Lambda
- מגיש פונקציית למבדה
- השלמת בדיקת פונקציית Lambda
- פונקציית אספן למבדה
אתחול פונקציית Lambda
הפונקציה העיקרית של ה-Initializer היא להפריד את חבילת ה-zip לקובצי וידאו בודדים ולהכין אותם לשולח. ראשית, מורידים את קובץ ה-zip, ולאחר מכן כל קובץ בודד, כולל קובצי וידאו, נפרק וחולץ. הסרטונים, רצוי בפורמט .mp4, מועלים בחזרה לתוך דלי S3. משתמש ב create_video
שיטה ב video
API, אובייקט וידאו נוצר עם נתיב הווידאו כקלט. זה מוסיף נתונים על כל סרטון למסד הנתונים של אורורה. כל סוגי קבצים אחרים, כגון קובצי JSON, נחשבים למטא נתונים ומועלים באופן דומה, אך לא נוצר אובייקט וידאו. רשימה של שמות הקבצים וקובצי הווידאו שחולצו מועברת לשלב הבא.
מגיש פונקציית למבדה
הפונקציה Submitter לוקחת את קובצי הווידאו שחולצו על ידי Initializer ויוצרת מיני-אצטות של מסגרות וידאו כתמונות. רוב דגמי הראייה הממוחשבת הנוכחית בייצור אומנו על תמונות כך שגם כאשר הווידאו מעובד, הם מופרדים לראשונה למסגרות תמונה לפני מסקנות המודל. הפתרון הנוכחי הזה באמצעות מודל הערכת פוזות מתקדם אינו שונה - אצות הפריימים מהשולח מועברות ל-Kinesis Data Streams כדי להתחיל את שלב יצירת ההסקות.
ראשית, קובץ הווידאו מוריד על ידי פונקציית Lambda. קצב הפריימים ומספר הפריימים מחושבים באמצעות ה- FileVideoStream
מודול מה- imutils.video
ספריית עיבוד. הפריימים נשלפים ומקובצים לפי גודל מיני-אצווה מוגדר, שהוא אחד מהפרמטרים המרכזיים הניתנים לכוונון של צינור זה. באמצעות ספריית החמוצים של Python, הנתונים מסודרים ומועלים לאמזון S3. לאחר מכן, נוצר אובייקט אצווה של מסגרת והזנת המטא-נתונים נוצרת במסד הנתונים של Aurora. פונקציית Lambda זו נבנתה באמצעות Dockerfile עם תלות ב- opencv-python
, numpy
, ו imutils
ספריות.
השלמת בדיקת פונקציית Lambda
פונקציית בדיקת ההשלמה ממשיכה לבצע שאילתות במסד הנתונים של Aurora כדי לראות, עבור כל סרטון בחבילת ה-zip עבור העבודה הנוכחית הזו, כמה אצוות פריימים נמצאות בסטטוס COMPLETED. כאשר כל אצוות הפריימים עבור כל הסרטונים הושלמו, תהליך הבדיקה הושלם.
פונקציית אספן למבדה
הפונקציה Collector לוקחת את הפלטים של ההסקות שבוצעו על כל פריים בשלב הצרכן ומשלבת אותם על פני אצווה של פריימים ועל פני סרטון. הנתונים המשולבים מועלים לאחר מכן לדלי S3. לאחר מכן, הפונקציה מפעילה את Cortex postprocessing API עבור צינור ML מסוים על מנת לבצע חישובים שלאחר עיבוד, ומוסיפה את התוצאות המצטברות על ידי וידאו לדלי הפלט. רבים מהמדדים הללו מחושבים על פני מסגרות, כגון מהירות, תאוצה וזווית המפרק, כך שחישוב זה צריך להתבצע על הנתונים המצטברים. התפוקות העיקריות כוללות נתוני נקודות מפתח בגוף (מצטברים לפורמט CSV), חישובי BMA (כגון האצה) ושכבת-על חזותית של נקודות מפתח שנוספו לכל פריים בקובץ תמונה.
הפקת מסקנות להערכת תנוחה ניתנת להרחבה
מנוע העיבוד שמפעיל את קנה המידה של מסקנות ML מתרחש בשלב זה. זה כרוך בשלושה חלקים עיקריים, שלכל אחד מהם יש מנופי מקבילים משלהם שניתן לכוונן עבור פשרות חביון (ראה את התרשים הבא).
ארכיטקטורה זו מאפשרת ניסויים בבדיקת רווחי חביון, כמו גם גמישות לעתיד כאשר עומסי עבודה עשויים להשתנות עם תמהילים שונים של מקטעי משתמש קצה שניגשים לאפליקציה.
זרמי נתונים של Kinesis
הצוות בחר ב-Kinesis Data Streams מכיוון שהוא משמש בדרך כלל לטיפול בנתונים זורמים, ובמקרה זה הוא מתאים מכיוון שהוא יכול להתמודד עם אצוות פריימים בצורה דומה כדי לספק מדרגיות ומקבילות. בפונקציית Submitter Lambda, נעשה שימוש בלקוח Kinesis Boto3, עם ה- put_record
שיטה המעבירה את המטא-נתונים המשויכים לקבוצת מסגרת בודדת, כגון מזהה אצווה מסגרת, מסגרת התחלה של אצווה מסגרת, מסגרת סיום אצווה של מסגרת, צורת תמונה, קצב פריימים ומזהה וידאו.
הגדרנו תצורות שונות של תור עבודה ותצורות זרם נתונים של Kinesis כדי להגדיר רמות תפוקה המתחברות לרמת העדיפות של קבוצות משתמשים שונות. גישה לרמות שונות של כוח עיבוד מקושרת על ידי העברת תור פרויקט ARN בעת יצירת פרויקט חדש באמצעות project
ממשק API. כל קבוצת משתמשים מקושרת לפרויקט מסוים במהלך יצירת קבוצת המשתמשים. שלוש תצורות זרם ברירת מחדל מוגדרות ב- מודל יישום ללא שרת AWS תבנית תשתית (AWS SAM):
- תֶקֶן -
JobStreamShardCount
- עדיפות -
PriorityJobStreamShardCount
- עדיפות גבוהה -
HighPriorityJobStreamShardCount
הצוות השתמש בכמה מנופים שונים כדי להבדיל את כוח העיבוד של כל זרם או לכוון את זמן ההשהיה של המערכת, כפי שמסוכם בטבלה הבאה.
מנוף | תיאור | ערך ברירת מחדל |
חֶרֶס | רסיס מקורי ב-Kinesis Data Streams; זוהי יחידת הבסיס של התפוקה לבליעה. ברירת המחדל היא 1MB/sek, מה שמשתווה ל-1,000 רשומות נתונים בשנייה. | 2 |
KinesisBatchSize |
המספר המרבי של רשומות ש-Kinesis Data Streams מאחזר באצווה אחת לפני הפעלת פונקציית Lambda לצרכן. | 1 |
KinesisParallelizationFactor |
מספר האצוות לעיבוד מכל רסיס בו-זמנית. | 1 |
מאוורר משופר | לצרכני נתונים שהפעילו מאוורר-אאוט משופר יש תפוקה ייעודית לצרכן (כגון ברירת המחדל של 1MB/sek) במקום שיתוף התפוקה בין צרכנים. | כבוי |
פונקציית למדה לצרכן
מנקודת המבט של Kinesis Data Streams, צרכן נתונים הוא שירות AWS המאחזר נתונים מ-Shard של זרם נתונים כאשר נתונים נוצרים בזרם. יישום זה משתמש בפונקציית Consumer Lambda, המופעלת כאשר הודעות מועברות מתורי זרם הנתונים. כל פונקציית Consumer מעבדת אצווה מסגרת אחת על ידי ביצוע השלבים הבאים. ראשית, מתבצעת קריאה אל ה-API של מעבד Cortex באופן סינכרוני, שהיא נקודת הקצה המארחת את צינור ההסקה של המודל (ראה את הסעיף הבא לגבי אמזון EKS עם Cortex לפרטים נוספים). התוצאות מאוחסנות באמזון S3, ומתבצע עדכון למסד הנתונים על ידי שינוי הסטטוס של אצווה המסגרת המעובדת ל- Complete
. טיפול בשגיאות מובנה לניהול קריאת ה-API של Cortex עם לולאת ניסיון חוזר לטיפול בכל שגיאות 504 מאשכול ה-Cortex, כאשר מספר הניסיונות החוזרים מוגדר ל-5.
אמזון EKS עם Cortex להסקת ML
הצוות השתמש באמזון EKS, שירות Kubernetes מנוהל ב-AWS, כמנוע המחשוב להסקת ML. בוצעה בחירת עיצוב להשתמש ב- Amazon EKS לאירוח נקודות קצה של ML, מה שמעניק את הגמישות של הפעלת Kubernetes במעלה הזרם עם אפשרות של אשכולות המנוהלים באופן מלא ב-AWS באמצעות AWS פרגייט, או חומרה מקומית באמצעות אמזון EKS בכל מקום. זו הייתה חלק קריטי של פונקציונליות הרצויה על ידי Intel OTG, אשר סיפקה את האפשרות לחבר את האפליקציה הזו לחומרה מקומית מיוחדת, למשל.
שלושת המודלים של ML שהיו אבני הבניין לבניית צינורות ההסקה היו מודל Yolo מותאם אישית (לזיהוי אובייקט), מודל HRNet מותאם אישית (עבור הערכת תנוחת 2D), ומודל 3DMPPE (עבור הערכת תנוחת 3D) (ראה הקודם סעיף ML לפרטים נוספים). הם השתמשו בקוד פתוח קלף מוח ספרייה לטיפול בפריסה וניהול של נקודות קצה של צינור מסקנות ML, והשקה ופריסה של אשכולות Amazon EKS. כל אחד מהדגמים הללו נארז בקונטיינרים של Docker - קובצי הדגם אוחסנו באמזון S3 ותמונות המודל אוחסנו ב- מרשם מיכל אלסטי של אמזון (Amazon ECR) - ונפרס כממשקי API של Cortex Realtime. גרסאות של מיכלי הדגם הפועלים על CPU ו-GPU נוצרו כדי לספק גמישות לסוג חומרת המחשוב. בעתיד, אם יהיה צורך להוסיף מודלים נוספים או צינורות מודל, הם יכולים פשוט ליצור ממשקי API נוספים של Cortex Realtime.
לאחר מכן הם בנו צינורות מסקנות על ידי חיבור של ממשקי API של מודל Cortex Realtime לתוך ממשקי API של Cortex Realtime pipeline. ממשק API יחיד של צינורות Realtime כלל קריאה לרצף של ממשקי API של מודל Realtime. פונקציות ה-Consumer Lambda שטופלו א pipeline
API כקופסה שחורה, באמצעות קריאת API בודדת כדי לאחזר את הפלט הסופי של תמונה. נוצרו שני צינורות: צינור 2D וצינור 3D.
הצינור הדו-ממדי משלב שלב של פענוח עיבוד מקדים, זיהוי אובייקטים באמצעות מודל Yolo מותאם אישית לאיתור הספורטאי ולייצר תיבות תוחמות, ולבסוף מודל HRNet מותאם אישית ליצירת נקודות מפתח דו-ממדיות להערכת תנוחה.
צינור התלת-ממד משלב שלב עיבוד מקדים של פענוח, זיהוי אובייקטים באמצעות מודל Yolo מותאם אישית לאיתור הספורטאי ולייצר תיבות תוחמות, ולבסוף מודל 3DMPPE ליצירת נקודות מפתח תלת-ממדיות להערכת תנוחה.
לאחר הפקת מסקנות על אצווה של מסגרות, כל צינור כולל גם נקודת קצה נפרדת לאחר עיבוד Realtime Cortex המייצרת שלוש פלטים עיקריים:
- נתוני מפתח מצטברים מצביעים לקובץ CSV יחיד
- חישובי BMA (כגון תאוצה)
- שכבת-על חזותית של נקודות מפתח שנוספו לכל מסגרת בקובץ תמונה
הפונקציה Collector Lambda שולחת את המטא-נתונים המתאימים המשויכים לסרטון מסוים, כגון מזהי הפריימים ומיקומי ה-S3 של הפלטים של הערכת הפוזה, לנקודת הקצה כדי ליצור את הפלטים שלאחר העיבוד הללו.
Cortex תוכנן לשילוב עם Amazon EKS, ודורש רק קובץ תצורה של אשכול ופקודה פשוטה כדי להפעיל אשכול Kubernetes:
מנוף נוסף לכוונון ביצועים היה תצורת המופע עבור אשכולות המחשוב. נוצרו שלוש שכבות עם שילובים משתנים של מופעי M5 ו-G4dn, מתוכננים כקובצי yaml עם מפרטים כגון שם אשכול, אזור ותצורה ומיקס של מופעים. מופעי M5 מבוססים על עלות נמוכה יותר של CPU ו-G4dn מבוססים על GPU בעלות גבוהה יותר כדי לספק כמה פשרות בין עלות/ביצועים.
ניטור תפעולי
כדי לשמור על תקני רישום תפעוליים, כל פונקציות Lambda כוללות קוד להקלטה והטמעת יומנים באמצעותם צינור אש נתונים של אמזון קינסי. לדוגמה, כל אצווה מסגרת המעובדת מהפונקציה Submitter Lambda נרשמת עם חותמת הזמן, שם הפעולה ותגובת פונקציית Lambda JSON ונשמרת ב-Amazon S3. התרשים הבא ממחיש שלב זה בארכיטקטורה.
פְּרִיסָה
הפריסה מטופלת באמצעות AWS SAM, מסגרת קוד פתוח לבניית יישומים ללא שרתים ב-AWS. AWS SAM מאפשר עיצוב תשתית, כולל פונקציות, ממשקי API, מסדי נתונים ומיפוי מקורות אירועים להיות קודמים ופריסה בקלות בסביבות AWS חדשות. במהלך הפריסה, תחביר SAM של AWS מתורגם ל AWS CloudFormation לטפל באספקת התשתית.
A template.yaml
הקובץ מכיל את מפרטי התשתית יחד עם פרמטרים הניתנים לשינוי, כגון מנופי האחזור של Kinesis Data Streams המפורטים בסעיפים הקודמים. א samconfig.toml
הקובץ מכיל פרמטרים של פריסה כגון שם מחסנית, שם דלי S3 שבו מאוחסנים קבצי יישום כמו קוד פונקציית Lambda ותגי משאבים למעקב אחר עלות. סקריפט מעטפת deploy.sh עם הפקודות הפשוטות הוא כל מה שנדרש כדי לבנות ולפרוס את התבנית כולה:
זרימת עבודה של משתמשים
לסיכום, לאחר פריסת התשתית, תוכל לעקוב אחר זרימת העבודה הזו כדי להתחיל:
- צור לקוח Intel 3DAT באמצעות ספריית הלקוח.
- השתמש ב-API כדי ליצור מופע חדש של צינור התואם לסוג העיבוד הנדרש, כגון אחד עבור הערכת תנוחה תלת-ממדית.
- צור מופע חדש של פרויקט, עובר באשכול ARN ותור Kinesis ARN.
- צור מופע חדש של ערכת פרמטרים של צינור.
- צור מופע חדש של פרמטרי צינור הממפים את ערכת הפרמטרים של הצינור.
- צור קבוצת משתמשים חדשה המשויכת למזהה פרויקט ומזהה ערכת פרמטרים של צינור.
- צור משתמש חדש המשויך לקבוצת המשתמשים.
- העלה קובץ .zip של סרטונים לאמזון S3 באמצעות כתובת URL מוגדרת מראש של S3 שנוצרה על ידי פונקציית ההעלאה ב-API של העבודה.
- להגיש
create_job
קריאת API, עם פרמטרי עבודה המציינים את מיקום קבצי הווידאו. זה מתחיל את עבודת העיבוד.
סיכום
האפליקציה פעילה כעת ומוכנה להיבדק עם ספורטאים ומאמנים כאחד. Intel OTG מתרגשת להנגיש את טכנולוגיית הערכת הפוזה החדשנית באמצעות ראייה ממוחשבת עבור מגוון משתמשים, ממפתחים ועד ספורטאים ועד שותפים של ספקי תוכנה.
צוות AWS נלהב לעזור ללקוחות כמו Intel OTG להאיץ את מסע ה-ML שלהם, משלב הרעיונות והגילוי עם ML Solutions Lab ועד לשלב ההקשחה והפריסה עם AWS ML ProServe. כולנו נצפה מקרוב באולימפיאדת טוקיו 2021 בקיץ הקרוב כדי לחזות את כל ההתקדמות ש-ML יכולה לחשוף בספורט.
להתחיל היום! חקור את מקרה השימוש שלך עם השירותים שהוזכרו בפוסט זה ורבים אחרים באתר קונסולת הניהול של AWS.
על הכותבים
האן מן הוא מנהל בכיר- למידת מכונה ובינה מלאכותית ב-AWS שבסיסה בסן דייגו, קליפורניה. יש לו דוקטורט בהנדסה מאוניברסיטת נורת'ווסטרן ויש לו ניסיון של מספר שנים כיועץ ניהולי בייעוץ ללקוחות בייצור, שירותים פיננסיים ואנרגיה. כיום הוא עובד בלהט עם לקוחות ממגוון תעשיות כדי לפתח וליישם פתרונות למידת מכונה ו-AI ב-AWS. הוא נהנה לעקוב אחרי ה-NBA ולשחק כדורסל בזמנו הפנוי.
אימאן קמיבי הוא מהנדס ML עם שירותים מקצועיים של AWS. הוא עבד עם מגוון רחב של לקוחות AWS כדי לקדם שיטות עבודה מומלצות בהקמת צינורות ML שניתן לחזור עליהם ואמינים.
ג'ונתן לי הוא מנהל טכנולוגיית ביצועי ספורט, קבוצת הטכנולוגיה האולימפית באינטל. הוא למד את היישום של למידת מכונה לבריאות בתור תואר ראשון ב-UCLA ובמהלך עבודתו לתואר שני באוניברסיטת אוקספורד. הקריירה שלו התמקדה באלגוריתם ופיתוח חיישנים לבריאות וביצועים אנושיים. כעת הוא מוביל את פרויקט מעקב אחר ספורטאים בתלת מימד באינטל.
נלסון ליונג הוא אדריכל הפלטפורמה ב- Sports Performance CoE באינטל, שם הוא מגדיר ארכיטקטורה מקצה לקצה למוצרים מתקדמים המשפרים את ביצועי הספורטאים. הוא גם מוביל את ההטמעה, הפריסה והייצור של פתרונות למידת מכונה אלה בקנה מידה עבור שותפי אינטל שונים.
טרוי סקילאצ'י הוא מהנדס DecSecOps באינטל, שם הוא מספק פתרונות תוכנה מקצועיים ללקוחות באמצעות שיטות עבודה מומלצות של DevOps. הוא נהנה לשלב פתרונות AI בפלטפורמות הניתנות להרחבה במגוון תחומים.
פול מין הוא Associate Solutions Architect מתמחה בשירותי האינטרנט של אמזון (AWS), שם הוא עוזר ללקוחות בכל ענפי תעשייה שונים לקדם את המשימה שלהם ולהאיץ את אימוץ הענן שלהם. בעבר באינטל, הוא עבד כמתמחה בהנדסת תוכנה כדי לעזור בפיתוח ה-SDK של ענן מעקב אחר ספורטאים תלת-ממדיים. מחוץ לעבודה, פול נהנה לשחק גולף וניתן לשמוע אותו שר.
- Coinsmart. בורסת הביטקוין והקריפטו הטובה באירופה.
- Platoblockchain. Web3 Metaverse Intelligence. ידע מוגבר. גישה חופשית.
- CryptoHawk. רדאר אלטקוין. ניסיון חינם.
- מקור: https://aws.amazon.com/blogs/machine-learning/the-intel3d-athlete-tracking-3dat-scalable-architecture-deploys-pose-estimation-models-using-amazon-kinesis-data-streams- ו-amazon-eks/
- "
- &
- 000
- 100
- 2021
- 3d
- אודות
- להאיץ
- גישה
- נגיש
- פי
- חֶשְׁבּוֹן
- לרוחב
- פעולה
- פעולות
- תוספת
- נוסף
- מנהל
- אימוץ
- AI
- אַלגוֹרִיתְם
- תעשיות
- אמזון בעברית
- אמזון שירותי אינטרנט
- בין היתר
- API
- ממשקי API
- בקשה
- יישומים
- מתאים
- ארכיטקטורה
- טיעונים
- שהוקצה
- עמית
- ספורטאים
- תכונות
- מכני עם סלילה אוטומטית
- AWS
- גיבוי
- כדורסל
- לפני
- הטבות
- הטוב ביותר
- שיטות עבודה מומלצות
- שחור
- בלוג
- גוּף
- אריזה מקורית
- לִבנוֹת
- בִּניָן
- שיחה
- קיבולת
- אשר
- קריירה
- מקרים
- מֶרכָּזִי
- אלוף
- שינוי
- בחירות
- לקוחות
- ענן
- קוד
- אוסף
- אספן
- משולב
- רְכִיב
- לחשב
- המחשב
- תְצוּרָה
- הקשר
- יועץ
- צרכן
- צרכנים
- מכולה
- מכולות
- מכיל
- ממשיך
- לִשְׁלוֹט
- לתאם
- ליבה
- תוֹאֵם
- לִיצוֹר
- נוצר
- יוצר
- יוצרים
- יצירה
- אישורים
- קריטי
- מכריע
- נוֹכְחִי
- כיום
- מנהג
- לקוח
- לקוחות
- שיא הטכנולוגיה
- נתונים
- מסד נתונים
- מאגרי מידע
- יְוֹם
- מוקדש
- עמוק יותר
- מספק
- לפרוס
- פרס
- פריסה
- פורס
- עיצוב
- מעוצב
- פרט
- מְפוֹרָט
- פרטים
- איתור
- לפתח
- מפתח
- מפתחים
- צעצועי התפתחות
- אחר
- להבחין
- ישיר
- מְנַהֵל
- תגלית
- מציג
- סַוָר
- לא
- תחומים
- מטה
- בְּמַהֲלָך
- בקלות
- אמייל
- נקודת קצה
- אנרגיה
- מנוע
- מהנדס
- הנדסה
- סביבה
- אירוע
- דוגמה
- נרגש
- קיימים
- מצפה
- ניסיון
- לחקור
- מאפיין
- בסופו של דבר
- כספי
- שירותים פיננסיים
- ראשון
- מתאים
- צי
- גמישות
- גמיש
- מרוכז
- לעקוב
- הבא
- כדלקמן
- פוּרמָט
- צופה פני עתיד
- מסגרת
- מסגרת
- פונקציה
- פונקציונלי
- פונקציונלי
- פונקציות
- עתיד
- ליצור
- יצירת
- דור
- נתינה
- מטרה
- טוב
- GPU
- בוגר
- קְבוּצָה
- קבוצה
- לטפל
- טיפול
- חומרה
- בְּרִיאוּת
- נשמע
- לעזור
- עזרה
- עוזר
- כאן
- גבוה יותר
- איך
- HTTPS
- בן אנוש
- זהות
- תמונה
- ליישם
- הפעלה
- חשוב
- לכלול
- כולל
- כולל
- בנפרד
- תעשיות
- תעשייה
- תשתית
- חדשני
- קלט
- מוסיף
- להתקין
- משולב
- השתלבות
- אינטל
- מוֹדִיעִין
- אינטראקציה
- מִמְשָׁק
- IT
- עבודה
- מקומות תעסוקה
- מסע
- מפתח
- מעבדה
- לשגר
- השקה
- מוביל
- למידה
- רמה
- סִפְרִיָה
- קו
- רשימה
- טוען
- מיקום
- מקומות
- מכונה
- למידת מכונה
- עשוי
- לתחזק
- גדול
- עושה
- איש
- לנהל
- הצליח
- ניהול
- ייצור
- מַפָּה
- מיפוי
- מוּזְכָּר
- שיטות
- מדדים
- מינימום
- משימה
- ML
- סלולרי
- אפליקציות ניידות
- מודל
- מודלים
- מודולרי
- יותר
- רוב
- מספר
- שמות
- ה-NBA
- הכרחי
- צרכי
- מספר
- האולימפיאדה
- נפתח
- להפעיל
- אופטימיזציה
- אפשרות
- להזמין
- אחר
- שֶׁלוֹ
- אוקספורד
- חבילה
- חלק
- מסוים
- במיוחד
- שותפים
- חולף
- לוהט
- תבנית
- אחוזים
- ביצועים
- ביצוע
- פרספקטיבה
- לְחַבֵּר
- פלטפורמה
- פלטפורמות
- משחק
- שירה
- נקודות
- אפשרי
- כּוֹחַ
- חזק
- להכין
- קודם
- יְסוֹדִי
- עקרון
- עדיפות
- תהליך
- תהליכים
- תהליך
- מעבד
- לייצר
- הפקה
- מוצרים
- מקצועי
- פּרוֹיֶקט
- לספק
- מספק
- מטרה
- רכס
- חי
- זמן אמת
- להכיר
- שיא
- רשום
- בדבר
- אָמִין
- בקשות
- לדרוש
- נדרש
- דרישות
- דורש
- משאב
- משאבים
- תגובה
- תוצאות
- הפעלה
- ריצה
- בְּטִיחוּת
- סן
- בקרת מערכות ותקשורת
- להרחבה
- סולם
- דרוג
- Sdk
- לבטח
- מגזרים
- ללא שרת
- שרות
- שירותים
- סט
- הצבה
- צוּרָה
- שיתוף
- פָּגָז
- הראה
- דומה
- באופן דומה
- פָּשׁוּט
- מידה
- So
- תוכנה
- תוכנה כשירות
- הנדסת תוכנה
- פִּתָרוֹן
- פתרונות
- כמה
- מישהו
- מיוחד
- מפרטים
- מְהִירוּת
- ספורט
- לערום
- התמחות
- תֶקֶן
- תקנים
- התחלה
- החל
- התחלות
- מדינה
- מדינה-of-the-art
- מצב
- אחסון
- חנות
- זרם
- נהירה
- הוגש
- כתוצאה מכך
- קיץ
- תמיכה
- תומך
- מערכת
- נטילת
- נבחרת
- טכנולוגיה
- בדיקות
- לכן
- דרך
- עניבה
- זמן
- היום
- יַחַד
- טוקיו
- לעקוב
- מעקב
- סוגים
- בדרך כלל
- UCLA
- אוניברסיטה
- אוניברסיטת אוקספורד
- לפתוח
- עדכון
- להשתמש
- משתמשים
- ניצול
- ערך
- מגוון
- שונים
- אנכיות
- וִידֵאוֹ
- וידאו
- חזון
- אינטרנט
- שירותי אינטרנט
- מי
- לְלֹא
- תיק עבודות
- עבד
- עובד
- שנים