שירות אחסון פשוט של אמזון (Amazon S3) הוא שירות אחסון אובייקטים המציע מדרגיות מובילה בתעשייה, זמינות נתונים, אבטחה וביצועים. לעתים קרובות, ללקוחות יש אובייקטים בדלי S3 שזקוקים לעיבוד נוסף כדי להשתמש בהם ביעילות על ידי צריכת יישומים. מהנדסי נתונים חייבים לתמוך בתצוגות הנתונים הספציפיות ליישום אלה עם פשרות בין עותקים נגזרים מתמשכים או שינוי נתונים ברמת הצרכן. אף אחד מהפתרונות אינו אידיאלי מכיוון שהוא מציג מורכבות תפעולית, גורם לאתגרים של עקביות נתונים ומבזבז משאבי מחשוב יקרים יותר.
פשרות אלו חלות באופן נרחב על צינורות רבים של למידת מכונה (ML) המתאמנים על נתונים לא מובנים, כגון אודיו, וידאו וטקסט חופשי, בין מקורות אחרים. בכל דוגמה, עבודת ההדרכה חייבת להוריד נתונים מ-S3 buckets, להכין תצוגה ספציפית לאפליקציה ולאחר מכן להשתמש באלגוריתם AI. פוסט זה מדגים דפוס עיצובי להפחתת עלויות, מורכבות וניהול מרכזי של שלב שני זה. הוא משתמש בבטון דוגמה לעיבוד תמונה, אם כי הגישה חלה באופן נרחב על כל עומס עבודה. היתרונות הכלכליים בולטים ביותר גם כאשר שלב הטרנספורמציה אינו דורש GPU, אך אלגוריתם ה-AI כן.
הפתרון המוצע גם מרכז את קוד טרנספורמציה של נתונים ומאפשר טרנספורמציה בדיוק בזמן (JIT). יתר על כן, הגישה משתמשת בתשתית ללא שרת כדי להפחית תקורה תפעולית והרמה כבדה ללא הבחנה.
סקירת פתרונות
כאשר אלגוריתמי ML מעבדים נתונים לא מובנים כמו תמונות ווידאו, זה דורש משימות נורמליזציה שונות (כגון קנה מידה אפור ושינוי גודל). שלב זה קיים כדי להאיץ את התכנסות המודל, למנוע התאמת יתר ולשפר את דיוק הניבוי. לעתים קרובות אתה מבצע את שלבי העיבוד המקדים האלה במופעים שמריצים מאוחר יותר את אימון הבינה המלאכותית. גישה זו יוצרת חוסר יעילות, מכיוון שלמשאבים הללו יש בדרך כלל מעבדים יקרים יותר (לדוגמה, GPUs) ממה שדורשות המשימות הללו. במקום זאת, הפתרון שלנו מחצין את הפעולות הללו לרוחב כלכלי, שניתן להרחבה אופקית אמזון S3 אובייקט למבדה פונקציות.
לתבנית עיצוב זו שלושה יתרונות קריטיים. ראשית, הוא מרכז את שלבי שינוי הנתונים המשותפים, כגון נורמליזציה של תמונה והסרת שכפול קוד צינור ML. בשלב הבא, פונקציות S3 Object Lambda נמנעות מבעיות עקביות נתונים בנתונים נגזרים באמצעות המרות JIT. שלישית, התשתית ללא שרת מפחיתה את התקורה התפעולית, מגדילה את זמן הגישה ומגבילה את העלויות לזמן הפעלת הקוד שלך לכל אלפית השנייה.
קיים פתרון אלגנטי שבו אתה יכול לרכז את פעולות עיבוד מוקדם והמרת נתונים אלה עם S3 Object Lambda. S3 Object Lambda מאפשר לך להוסיף קוד שמשנה נתונים מאמזון S3 לפני החזרתם לאפליקציה. הקוד פועל בתוך an AWS למבדה function, שירות מחשוב ללא שרת. למבדה יכולה להגדיל באופן מיידי לעשרות אלפי ריצות מקבילות תוך תמיכה בעשרות שפות תכנות ואפילו מכולות בהתאמה אישית. לקבלת מידע נוסף, ראה היכרות עם אמזון S3 אובייקט למבדה - השתמש בקוד שלך לעיבוד נתונים בזמן שאוחזרו מ- S3.
התרשים הבא ממחיש את ארכיטקטורת הפתרונות.
בפתרון זה, יש לך דלי S3 המכיל את התמונות הגולמיות לעיבוד. לאחר מכן, אתה יוצר נקודת גישה S3 עבור התמונות הללו. אם אתה בונה דגמי ML מרובים, אתה יכול ליצור נקודות גישה נפרדות S3 עבור כל דגם. לחלופין, AWS זהות וניהול גישה (אני) מדיניות עבור נקודות גישה תמיכה בשיתוף פונקציות לשימוש חוזר על פני צינורות ML. לאחר מכן אתה מצרף פונקציית Lambda עם ההיגיון העסקי של העיבוד המקדים שלך לנקודת הגישה של S3. לאחר אחזור הנתונים, אתה מתקשר לנקודת הגישה של S3 כדי לבצע טרנספורמציות של נתוני JIT. לבסוף, אתה מעדכן את מודל ה-ML שלך כדי להשתמש בחדש נקודת גישה S3 Object Lambda כדי לאחזר נתונים מאמזון S3.
צור את נקודת הגישה לנורמליזציה
סעיף זה עובר על השלבים ליצירת נקודת הגישה S3 Object Lambda.
נתונים גולמיים מאוחסנים בדלי S3. כדי לספק למשתמש את קבוצת ההרשאות הנכונה לגשת לנתונים אלה, תוך הימנעות ממדיניות דלי מורכבת שעלולה לגרום להשפעה בלתי צפויה ליישום אחר, עליך ליצור נקודות גישה S3. נקודות גישה S3 הן שמות מארחים ייחודיים שבהם אתה יכול להשתמש כדי להגיע לדליים של S3. עם S3 Access Points, אתה יכול ליצור מדיניות בקרת גישה אינדיבידואלית עבור כל נקודת גישה כדי לשלוט בגישה למערכי נתונים משותפים בקלות ובאופן מאובטח.
- צור את נקודת הגישה שלך.
- צור פונקציית Lambda שמבצעת את שינוי הגודל וההמרה של התמונה. ראה את הקוד הבא של Python:
import boto3
import cv2
import numpy as np
import requests
import io def lambda_handler(event, context): print(event) object_get_context = event["getObjectContext"] request_route = object_get_context["outputRoute"] request_token = object_get_context["outputToken"] s3_url = object_get_context["inputS3Url"] # Get object from S3 response = requests.get(s3_url) nparr = np.fromstring(response.content, np.uint8) img = cv2.imdecode(nparr, flags=1) # Transform object new_shape=(256,256) resized = cv2.resize(img, new_shape, interpolation= cv2.INTER_AREA) gray_scaled = cv2.cvtColor(resized,cv2.COLOR_BGR2GRAY) # Transform object is_success, buffer = cv2.imencode(".jpg", gray_scaled) if not is_success: raise ValueError('Unable to imencode()') transformed_object = io.BytesIO(buffer).getvalue() # Write object back to S3 Object Lambda s3 = boto3.client('s3') s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) return {'status_code': 200}
- צור נקודת גישה לאובייקט למבדה באמצעות נקודת הגישה התומכת משלב 1.
פונקציית Lambda משתמשת בנקודת הגישה התומכת כדי להוריד את האובייקטים המקוריים.
- עדכון אמזון SageMaker להשתמש בנקודת הגישה החדשה S3 Object Lambda כדי לאחזר נתונים מאמזון S3. ראה את קוד ה-bash הבא:
aws s3api get-object --bucket arn:aws:s3-object-lambda:us-west-2:12345678901:accesspoint/image-normalizer --key images/test.png
ניתוח חיסכון בעלויות
באופן מסורתי, צינורות ML מעתיקים תמונות וקבצים אחרים מאמזון S3 למופעי SageMaker ואז מבצעים נורמליזציה. עם זאת, לשינוי פעולות אלו במקרי אימון יש חוסר יעילות. ראשית, למבדה מתפקדת בקנה מידה אופקי כדי להתמודד עם ההתפרצות ואז מתכווצת באופן אלסטי בלבד טעינה לכל אלפית השנייה כאשר הקוד פועל. שלבי עיבוד מוקדם רבים אינם דורשים GPUs ואף יכולים להשתמש ב-ARM64. זה יוצר תמריץ להעביר את העיבוד למחשוב חסכוני יותר כגון פונקציות Lambda המופעלות על ידי מעבדי AWS Graviton2.
בעזרת דוגמה מה מחשבון תמחור למבדה, אתה יכול להגדיר את הפונקציה עם 256 מגה-בייט של זיכרון ולהשוות את העלויות הן עבור x86 והן עבור Graviton (ARM64). בחרנו בגודל הזה מכיוון שהוא מספיק למשימות הכנת נתונים של תמונה אחת. לאחר מכן, השתמש ב- מחשבון תמחור SageMaker כדי לחשב הוצאות עבור מופע ml.p2.xlarge. זהו מופע האימון הקטן ביותר הנתמך של SageMaker עם תמיכה ב-GPU. תוצאות אלו מציגות עד 90% חיסכון מחשוב עבור פעולות שאינן משתמשות ב-GPU ויכולות לעבור ל-Lambda. הטבלה הבאה מסכמת את הממצאים הללו.
למדה עם x86 | למדה עם Graviton2 (ARM) | SageMaker ml.p2.xlarge | |
זיכרון (GB) | 0.25 | 0.25 | 61 |
CPU | - | - | 4 |
GPU | - | - | 1 |
עלות/שעה | $0.061 | $0.049 | $0.90 |
סיכום
אתה יכול לבנות יישומים מודרניים כדי לפתוח תובנות לגבי הנתונים שלך. ליישומים השונים הללו יש דרישות תצוגת נתונים ייחודיות, כגון פעולות עיצוב ועיבוד מקדים. טיפול במקרים אחרים של שימוש אלה יכול לגרום לשכפול נתונים, הגדלת עלויות ומורכבות רבה יותר כדי לשמור על עקביות. פוסט זה מציע פתרון לטיפול יעיל במצבים אלה באמצעות פונקציות S3 Object Lambda.
זה לא רק מסיר את הצורך בשכפול, אלא הוא גם יוצר נתיב לשינוי קנה מידה של פעולות אלו על פני מחשוב זול יותר בצורה אופקית! אפילו אופטימיזציה של קוד הטרנספורמציה עבור מופע ml.p2.xlarge עדיין יהיה יקר יותר באופן משמעותי בגלל ה-GPUs בטלים.
לרעיונות נוספים לשימוש ללא שרת ו-ML, ראה מסקנות למידת מכונה בקנה מידה באמצעות AWS ללא שרת ו פריסת מודלים של למידת מכונה עם תבניות ללא שרת.
על הכותבים
נייט בכמאייר הוא ארכיטקט פתרונות בכיר של AWS חוקר בנוודים את ניו יורק, שילוב ענן אחד בכל פעם. הוא מתמחה במעבר ומודרניזציה של עומסי העבודה של לקוחות. חוץ מזה, נייט הוא סטודנט במשרה מלאה ויש לו שני ילדים.
מרווין פרננדס הוא אדריכל פתרונות ב-AWS, המבוסס באזור ניו יורק. יש לו למעלה מ-20 שנות ניסיון בבניית אפליקציות שירותים פיננסיים. כיום הוא עובד עם לקוחות ארגוניים גדולים כדי לפתור בעיות עסקיות מורכבות על ידי יצירת ארכיטקטורות ענן ניתנות להרחבה, גמישות וגמישות.
- "
- 100
- שנים 20
- להאיץ
- גישה
- לרוחב
- פעולות
- פְּנִיָה
- AI
- אַלגוֹרִיתְם
- אלגוריתמים
- אמזון בעברית
- בין
- אחר
- בקשה
- יישומים
- גישה
- ארכיטקטורה
- AREA
- זרוע
- אודיו
- זמינות
- AWS
- להיות
- הטבות
- לִבנוֹת
- בִּניָן
- עסקים
- שיחה
- מקרים
- לגרום
- האתגרים
- עִיר
- ענן
- קוד
- מורכב
- לחשב
- מחשוב
- צרכן
- מכיל
- תוכן
- לִשְׁלוֹט
- המרה
- המרות
- עלויות
- לקוחות
- נתונים
- עיצוב
- אחר
- לא
- בקלות
- כַּלְכָּלִי
- מהנדסים
- מִפְעָל
- אירוע
- דוגמה
- הוצאות
- ניסיון
- בסופו של דבר
- כספי
- שירותים פיננסיים
- ראשון
- הבא
- צורות
- פונקציה
- GPU
- טיפול
- HTTPS
- זהות
- תמונה
- פְּגִיעָה
- לשפר
- בנפרד
- מובילים בתעשייה
- מידע
- תשתית
- תובנות
- השתלבות
- בעיות
- IT
- עבודה
- הילדים
- שפות
- גָדוֹל
- למידה
- רמה
- מכונה
- למידת מכונה
- ניהול
- זכרון
- ML
- מודל
- מודלים
- רוב
- המהלך
- שמות
- ניו יורק
- ניו יורק
- המיוחדות שלנו
- תפעול
- אחר
- תבנית
- ביצועים
- מדיניות
- נבואה
- תמחור
- בעיות
- תהליך
- תכנות
- שפות תכנות
- לספק
- להעלות
- חי
- להפחית
- הפחתה
- לדרוש
- דרישות
- משאבים
- תגובה
- תוצאות
- הפעלה
- ריצה
- בקרת מערכות ותקשורת
- להרחבה
- סולם
- אבטחה
- ללא שרת
- שרות
- שירותים
- סט
- משותף
- משמרת
- פָּשׁוּט
- מידה
- פתרונות
- לפתור
- מתמחה
- אחסון
- סטודנט
- תמיכה
- נתמך
- משימות
- אלפים
- דרך
- זמן
- הדרכה
- לשנות
- טרנספורמציה
- הפיכה
- ייחודי
- לפתוח
- עדכון
- להשתמש
- וִידֵאוֹ
- לצפיה
- בתוך
- עובד
- שנים