הפעל דגמי אנסמבל ML על Amazon SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הפעל דגמי אנסמבל ML באמזון SageMaker

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

אמזון SageMaker תומך בהרכבים של מופע יחיד עם שרת מסקנות טריטון. יכולת זו מאפשרת לך להפעיל הרכבי דגמים שמתאימים למופע בודד. מאחורי הקלעים, SageMaker ממנפת את Triton Inference Server כדי לנהל את האנסמבל בכל מופע שמאחורי נקודת הקצה כדי למקסם את התפוקה ואת ניצול החומרה עם זמן השהייה נמוך במיוחד (אלפיות שניות חד ספרתיות). עם Triton, אתה יכול גם לבחור מתוך מגוון רחב של מסגרות ML נתמכות (כולל TensorFlow, PyTorch, ONNX, XGBoost ו-NVIDIA TensorRT) ותשתיות עורפיות, כולל GPUs, CPUs, ו Afer Inferentia.

עם יכולת זו ב- SageMaker, אתה יכול לייעל את עומסי העבודה שלך על ידי הימנעות מהשהייה יקרה ברשת וקצירת היתרונות של מחשוב ומיקום נתונים עבור צינורות מסקנות של אנסמבל. בפוסט זה, אנו דנים ביתרונות השימוש ב-Triton Inference Server יחד עם שיקולים האם זו האפשרות הנכונה לעומס העבודה שלך.

סקירת פתרונות

Triton Inference Server נועד לאפשר לצוותים לפרוס, להפעיל ולהתאים דגמי AI מאומנים מכל מסגרת בכל תשתית מבוססת GPU או CPU. בנוסף, הוא עבר אופטימיזציה להציע הסקת ביצועים גבוהים בקנה מידה עם תכונות כמו אצווה דינמית, ריצות במקביל, תצורת מודל אופטימלית, יכולות אנסמבל מודל ותמיכה בקלט סטרימינג.

עומסי עבודה צריכים לקחת בחשבון את היכולות שטריטון מספק כדי להבטיח שניתן לשרת את המודלים שלהם. Triton תומך במספר מסגרות פופולריות מחוץ לקופסה, כולל TensorFlow, PyTorch, ONNX, XGBoost ו-NVIDIA TensorRT. Triton תומך גם ב-backends שונים שנדרשים כדי שהאלגוריתמים יפעלו כראוי. עליך לוודא שהדגמים שלך נתמכים על ידי קצה אחורי אלה, ובמקרה שקצה אחורי לא יאפשר זאת, Triton מאפשר לך ליישם את שלך ולשלב אותו. עליך גם לוודא שגרסת האלגוריתם שלך נתמכת וכן לוודא שחפצי המודל מקובלים על ידי ה-backend המתאים. כדי לבדוק אם האלגוריתם הספציפי שלך נתמך, עיין ב Backend של Triton Inference Server עבור רשימה של חלקים אחוריים הנתמכים באופן מקורי המתוחזקים על ידי NVIDIA.

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

בואו ניקח מודל רשת עצבית של סיווג תמונה ונראה כיצד נוכל להאיץ את עומסי העבודה שלנו. בדוגמה זו, אנו משתמשים ב-NVIDIA DALI backend כדי להאיץ את העיבוד המקדים שלנו בהקשר של האנסמבל שלנו.

צור הרכבי מודלים של טריטון

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

Triton Inference Server משרת מודלים ממאגרי מודלים. הבה נסתכל על פריסת מאגר המודלים עבור מודל אנסמבל המכילה את מודל העיבוד המקדים של DALI, את מודל TensorFlow inception V3 ואת תצורת אנסמבל המודל. כל ספריית משנה מכילה את מידע המאגר עבור הדגמים המתאימים. ה config.pbtxt הקובץ מתאר את תצורת הדגם עבור הדגמים. לכל ספרייה חייבת להיות תיקיית משנה מספרית אחת עבור כל גרסה של המודל והיא מנוהלת על ידי קצה אחורי ספציפי שבו תומכת טריטון.

מאגר דגמי NVIDIA Triton

NVIDIA DALI

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

NVIDIA דאלי

הקוד הבא מציג את תצורת הדגם עבור DALI backend:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

דגם Inception V3

עבור פוסט זה, אנו מראים כיצד נעשה שימוש ב-DALI באנסמבל מודל עם Inception V3. הדגם המאומן מראש של Inception V3 TensorFlow נשמר בפורמט GraphDef כקובץ יחיד בשם model.graphdef. ה config.pbtxt הקובץ מכיל מידע על שם הדגם, הפלטפורמה, max_batch_size, וחוזי קלט ופלט. אנו ממליצים להגדיר את max_batch_size תצורה נמוכה מגודל האצווה של דגם V3. לקובץ התוויות יש תוויות מחלקות עבור 1,000 מחלקות שונות. אנו מעתיקים את תוויות מודל סיווג ההתחלה ל- inception_graphdef ספרייה במאגר המודלים. קובץ התוויות מכיל 1,000 תוויות מחלקות של אימג'נט מערך נתונים של סיווג.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

אנסמבל טריטון

הקוד הבא מציג תצורת מודל של מודל אנסמבל עבור עיבוד מקדים DALI וסיווג תמונה:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

צור נקודת קצה של SageMaker

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

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

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

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

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

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

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

אנו משתמשים בתצורת נקודת קצה זו כדי ליצור נקודת קצה חדשה של SageMaker ומחכים לסיום הפריסה. הסטטוס משתנה ל-InService כאשר הפריסה מצליחה.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

מטען מסקנות

תמונת מטען הקלט עוברת דרך צינור DALI העיבוד המקדים ומשמשת במתזמן האנסמבל המסופק על ידי Triton Inference Server. אנו בונים את המטען שיועבר לנקודת הסיום:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

מסקנות אנסמבל

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

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

עם binary+json בפורמט, עלינו לציין את אורך המטא-נתונים של הבקשה בכותרת כדי לאפשר לטריטון לנתח נכון את המטען הבינארי. זה נעשה באמצעות כותרת Content-Type מותאמת אישית application/vnd.sagemaker-triton.binary+json;json-header-size={}.

זה שונה משימוש ב- Inference-Header-Content-Length header בשרת Triton עצמאי מכיוון שכותרות מותאמות אישית אינן מותרות ב- SageMaker.

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

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

סיכום

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

לדוגמאות נוספות על הרכבי טריטון ב- SageMaker, עיין ב- GitHub ריפו. נסה את זה!


על הכותבים

הפעל דגמי אנסמבל ML על Amazon SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.פארק ג'יימס הוא אדריכל פתרונות בשירותי האינטרנט של אמזון. הוא עובד עם Amazon.com כדי לתכנן, לבנות ולפרוס פתרונות טכנולוגיים ב-AWS, ויש לו עניין מיוחד בבינה מלאכותית ולמידת מכונה. בזמנו הפנוי, הוא נהנה לחפש תרבויות חדשות, חוויות חדשות ולהישאר מעודכן בטרנדים הטכנולוגיים העדכניים ביותר.

הפעל דגמי אנסמבל ML על Amazon SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.ויקראם אלנגו הוא ארכיטקט פתרונות מומחה בינה מלאכותית/ML בכיר בשירותי האינטרנט של אמזון, שבסיסה בווירג'יניה, ארה"ב. Vikram עוזרת ללקוחות הפיננסיים והביטוחים עם תכנון ומנהיגות מחשבתית לבנות ולפרוס יישומי למידת מכונה בקנה מידה. כרגע הוא מתמקד בעיבוד שפה טבעית, בינה מלאכותית אחראית, אופטימיזציה של מסקנות ושינוי קנה מידה של ML ברחבי הארגון. בזמנו הפנוי, הוא נהנה לטייל, לטייל, לבשל ולקמפינג עם משפחתו.

הפעל דגמי אנסמבל ML על Amazon SageMaker PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.סאוראב טריקאנדה הוא מנהל מוצר בכיר עבור Amazon SageMaker Inference. הוא נלהב לעבוד עם לקוחות ומוטיבציה היא המטרה של דמוקרטיזציה של למידת מכונה. הוא מתמקד באתגרי ליבה הקשורים לפריסת יישומי ML מורכבים, מודלים של ML מרובי דיירים, אופטימיזציות עלויות והפיכת פריסת מודלים של למידה עמוקה לנגישה יותר. בזמנו הפנוי, סאוראב נהנה לטייל, ללמוד על טכנולוגיות חדשניות, לעקוב אחר TechCrunch ולבלות עם משפחתו.

בול זמן:

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