סביבת זמן הריצה האופטימלית של TensorFlow מבצעת אופטימיזציה של מודלים כדי להסיק מסקנות מהר יותר ובעלות נמוכה יותר בהשוואה לקונטיינרים מוכנים מראש של TensorFlow Serving שמבוססים על קוד פתוח. סביבת זמן הריצה האופטימלית של TensorFlow עושה זאת באמצעות טכנולוגיות קנייניות וטכנולוגיות קוד פתוח של Google.
ככל שמודל למידת מכונה (ML) גדול יותר, כך עלות ההפעלה שלו גבוהה יותר. בעזרת זמן הריצה האופטימלי של TensorFlow, עלות ההפעלה של מודל ה-ML ומהירות ההסקה יכולות להיות נמוכות יותר בהשוואה לשימוש בזמן ריצה של TensorFlow שמבוסס על קוד פתוח. כדי ליהנות מזמן הריצה האופטימלי של TensorFlow כשמשתמשים ב-Gemini Enterprise Agent Platform, לא צריך לשנות את הקוד. במקום זאת, בוחרים תמונת קונטיינר להפעלה שמשתמשת בו.
זמן הריצה המותאם של TensorFlow תואם לאחור למאגרי TensorFlow Serving מוכנים מראש. אם אתם מריצים מודלים של TensorFlow עם קונטיינר מוכן מראש, אתם יכולים לעבור לקונטיינר של זמן ריצה אופטימלי של TensorFlow במאמץ מינימלי.
הביצועים של המודל משתפרים כשמשתמשים ב-TensorFlow runtime שעבר אופטימיזציה, אבל צריך לצפות להשפעה שונה על הביצועים בסוגים שונים של מודלים.
סקירה כללית על זמן ריצה של TensorFlow שעבר אופטימיזציה
זמן הריצה של TensorFlow שעבר אופטימיזציה משתמש באופטימיזציות של מודלים ובטכנולוגיות קנייניות חדשות של Google כדי לשפר את המהירות ולהפחית את העלות של הסקה בהשוואה לקונטיינרים מוכנים מראש של TensorFlow Serving שמבוססים על קוד פתוח.
האופטימיזציה מתבצעת כשפלטפורמת הסוכנים של Gemini Enterprise מעלה מודל, לפני שהיא מפעילה אותו. אחרי שמפעילים מודל בנקודת קצה, יומן האופטימיזציה מתווסף ליומן ההסקה. אפשר להשתמש ביומנים האלה כדי לפתור בעיות שעלולות להתרחש במהלך האופטימיזציה.
בנושאים הבאים מתוארים שיפורים באופטימיזציה של זמן הריצה של TensorFlow שעבר אופטימיזציה.
אופטימיזציות של המודל
האופטימיזציות הבאות של המודלים כלולות ב-TensorFlow runtime שעבר אופטימיזציה.
קומפילציה מראש של Model XLA
כשמודל TensorFlow פועל, כל הפעולות פועלות בנפרד. יש תקורה קטנה בהרצת פעולות בודדות. זמן הריצה האופטימלי של TensorFlow יכול להסיר חלק מהתקורה הזו באמצעות XLA כדי לבצע קומפילציה מראש של כל הגרף של TensorFlow או חלק ממנו לתוך ליבות גדולות יותר.
הקומפילציה מראש של מודל XLA היא אופציונלית ומושבתת כברירת מחדל. במאמר הפעלת קומפילציה מראש של מודל XLA מוסבר איך להפעיל את הקומפילציה מראש של מודל XLA במהלך פריסה.
אופטימיזציות של דחיסת מודלים
סביבת זמן הריצה המותאמת של TensorFlow יכולה להריץ חלק מהמודלים מהר יותר עם השפעה קטנה על הדיוק של המודל, וכך לאפשר אופטימיזציה של דחיסת המודל. כשמפעילים אופטימיזציה של דחיסת מודלים, זמן הריצה האופטימלי של TensorFlow משתמש בטכניקות כמו קוונטיזציה וגיזום משקלים כדי להריץ מודלים מהר יותר.
תכונת האופטימיזציה של דחיסת המודל מושבתת כברירת מחדל. כדי ללמוד איך להפעיל אופטימיזציה של דחיסת המודל במהלך פריסה, אפשר לעיין במאמר הפעלת אופטימיזציה של דחיסת המודל.
שיפור הביצועים של מודלים טבלאיים ב-GPU
מודלים טבלאיים של TensorFlow מופעלים בדרך כלל במעבדי CPU כי הם לא יכולים להשתמש במאיצים בצורה יעילה. סביבת זמן הריצה המותאמת של TensorFlow פותרת את הבעיה הזו על ידי הפעלת חלקים במודל שדורשים הרבה משאבי מחשוב במעבדי GPU. שאר המודל מופעל במעבדי CPU, תוך צמצום התקשורת בין המארח למאיץ. הפעלת החלקים במודל שדורשים הרבה משאבי מחשוב במעבדי GPU והשאר במעבדי CPU מאפשרת להפעיל מודלים טבלאיים מהר יותר ובעלות נמוכה יותר.
זמן הריצה של TensorFlow שעבר אופטימיזציה מבצע אופטימיזציה להצגת סוגי המודלים הטבלאיים הבאים.
אופטימיזציה אוטומטית של מודלים ל-Cloud TPU
הקונטיינרים המובנים של TensorFlow runtime שעברו אופטימיזציה ותומכים ב-Cloud TPU יכולים לבצע חלוקה לאזורים ואופטימיזציה של המודלים באופן אוטומטי כדי להריץ אותם ב-TPU. מידע נוסף זמין במאמר פריסה ב-Cloud TPU.
שימוש בסביבת זמן הריצה של TensorFlow (TFRT)
סביבת זמן הריצה של TensorFlow שעברה אופטימיזציה יכולה להשתמש בסביבת זמן הריצה של TensorFlow (TFRT). סביבת ה-TFRT משתמשת ביעילות במעבדי מארח מרובי-הליכי משנה, תומכת במודלים של תכנות אסינכרוני ועברה אופטימיזציה ליעילות ברמה נמוכה.
ה-CPU של TFRT מופעל בכל תמונות הקונטיינר של זמן הריצה של TensorFlow שעברו אופטימיזציה, למעט גרסה 2.8. כדי להשבית את ה-CPU של TFRT, מגדירים את הדגל use_tfrt לערך false.
ה-GPU של TFRT זמין בקובצי אימג' של קונטיינרים של TensorFlow runtime GPU שעברו אופטימיזציה ליליות, ובגרסאות יציבות של קובצי אימג' של קונטיינרים של TensorFlow runtime GPU מגרסה 2.13 ואילך. כדי להפעיל את ה-GPU של TFRT, צריך להגדיר את הדגלים use_tfrt ו-allow_precompilation לערך true. ה-TFRT בקובץ אימג' של קונטיינר GPU מצמצם את תקורה של העברת נתונים בין ה-CPU המארח לבין ה-GPU. אחרי שמפעילים את ה-TFRT, הוא פועל יחד עם קומפילציה של XLA. בגלל שהקומפילציה המוקדמת של XLA מופעלת, יכול להיות שתיתקלו בתופעות לוואי כמו עלייה בחביון בבקשה הראשונה. מידע נוסף זמין במאמר בנושא הפעלה של קומפילציה מוקדמת של XLA של מודל.
שימוש בסביבת זמן הריצה של Google
TensorFlow runtime שעבר אופטימיזציה מבוסס על מחסנית פנימית של Google, ולכן הוא יכול לפעול בסביבת זמן ריצה קניינית של Google.
קובצי אימג' של קונטיינרים עם זמן ריצה אופטימלי של TensorFlow
Gemini Enterprise Agent Platform מספק שני סוגים של קובצי אימג' בקונטיינר של TensorFlow runtime שעברו אופטימיזציה: stable ו-nightly.
תמונות קונטיינר יציבות
קונטיינרים יציבים של זמן ריצה אופטימלי של TensorFlow קשורים לגרסה ספציפית של TensorFlow, בדיוק כמו קונטיינרים מוכנים מראש של TensorFlow Serving שמבוססים על קוד פתוח. מאגרי זמן ריצה של TensorFlow שעברו אופטימיזציה ומקושרים לגרסה ספציפית נשמרים למשך אותו פרק זמן כמו גרסת ה-build של הקוד הפתוח שמקושרת לאותה גרסה. הגרסאות של TensorFlow runtime שעברו אופטימיזציה זהות לגרסאות של TensorFlow בקוד פתוח, אבל עם הסקה מהירה יותר.
הגרסאות תואמות לדורות קודמים. כלומר, אתם יכולים להריץ מודלים שאומנו בגרסאות ישנות יותר של TensorFlow באמצעות קונטיינר עדכני יותר. הביצועים של מאגרי תגים מהזמן האחרון טובים יותר מאלה של מאגרי תגים ישנים. במקרים נדירים, יכול להיות שמודל שאומן בגרסה ישנה יותר של TensorFlow לא יפעל עם קונטיינר עדכני יותר.
קובצי אימג' של קונטיינרים שמתעדכנים מדי לילה
גרסאות ה-runtime של TensorFlow שעברו אופטימיזציה ומתעדכנות מדי לילה כוללות את השיפורים והאופטימיזציות האחרונים, אבל יכול להיות שהן לא אמינות כמו גרסאות יציבות. הן משמשות בעיקר למטרות ניסיוניות. שמות גרסאות ה-build האוטומטיות כוללים את התווית nightly. בניגוד לקובצי האימג' היציבים של הקונטיינרים, קונטיינרים שמתעדכנים מדי לילה לא מכוסים על ידי הסכם רמת השירות (SLA) של Gemini Enterprise Agent Platform.
קובצי אימג' זמינים של קונטיינרים
קובצי האימג' הבאים של קונטיינרים של Docker עם זמן ריצה אופטימלי של TensorFlow זמינים בגרסאות יציבות ובגרסאות ליליות.
| גרסת ה-framework של למידת המכונה | מאיצים נתמכים (וגרסת CUDA, אם רלוונטי) | תאריך סיום התמיכה והתיקון | סיום הזמינות | תמונות נתמכות |
|---|---|---|---|---|
| לילי | מעבד בלבד | לא רלוונטי | לא רלוונטי |
|
| לילי | GPU (CUDA 12.x) | לא רלוונטי | לא רלוונטי |
|
| לילי | Cloud TPU | לא רלוונטי | לא רלוונטי |
|
| 2.17 | מעבד בלבד | 11 ביולי 2024 | 11 ביולי 2025 |
|
| 2.17 | GPU (CUDA 12.x) | 11 ביולי 2024 | 11 ביולי 2025 |
|
| 2.17 | Cloud TPU | 11 ביולי 2024 | 11 ביולי 2025 |
|
| 2.16 | מעבד בלבד | Apr 26, 2024 | Apr 26, 2025 | |
| 2.16 | GPU (CUDA 12.x) | Apr 26, 2024 | Apr 26, 2025 | |
| 2.16 | Cloud TPU | Apr 26, 2024 | Apr 26, 2025 | |
| 2.15 | מעבד בלבד | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.15 | GPU (CUDA 12.x) | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.15 | Cloud TPU | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.14 | מעבד בלבד | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.14 | GPU (CUDA 12.x) | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.13 | מעבד בלבד | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.13 | GPU (CUDA 11.x) | Aug 15, 2024 | 15 באוגוסט 2025 | |
| 2.12 | מעבד בלבד | 15 במאי 2024 | 15 במאי 2025 | |
| 2.12 | GPU (CUDA 11.x) | 15 במאי 2024 | 15 במאי 2025 | |
| 2.11 | מעבד בלבד | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.11 | GPU (CUDA 11.x) | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.10 | מעבד בלבד | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.10 | GPU (CUDA 11.x) | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.9 | מעבד בלבד | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.9 | GPU (CUDA 11.x) | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.8 | מעבד בלבד | 15 בנובמבר 2023 | Nov 15, 2024 | |
| 2.8 | GPU (CUDA 11.x) | 15 בנובמבר 2023 | Nov 15, 2024 |
שימוש בזמן הריצה של TensorFlow שעבר אופטימיזציה עם נקודת קצה פרטית
שימוש בנקודות קצה פרטיות כדי להכניס לשימוש בסביבת הייצור היקשים אונליין באמצעות Gemini Enterprise Agent Platform מספק חיבור מאובטח עם זמן טעינה נמוך לשירות היקשים אונליין של Gemini Enterprise Agent Platform, שהוא מהיר יותר משימוש בנקודות קצה ציבוריות. סביבת זמן הריצה המותאמת של TensorFlow כנראה מכניסה לשימוש בסביבת הייצור מודלים שרגישים לזמן טעינה, ולכן כדאי לשקול להשתמש בה עם נקודות קצה פרטיות. למידע נוסף, אפשר לעיין במאמר בנושא שימוש בנקודות קצה פרטיות להסקת היקשים אונליין.
פריסת מודל באמצעות זמן הריצה האופטימלי של TensorFlow
תהליך הפריסה של מודל להסקת מסקנות באמצעות זמן הריצה האופטימלי של TensorFlow כמעט זהה לתהליך הפריסה של מודלים באמצעות קונטיינרים מוכנים מראש של TensorFlow Serving שמבוססים על קוד פתוח. ההבדלים היחידים הם שאתם מציינים קובץ אימג' של קונטיינר שמשתמש בזמן הריצה המותאם של TensorFlow כשאתם יוצרים את המודל, ואתם יכולים להפעיל את דגלי האופטימיזציה שמתוארים בהמשך המסמך. לדוגמה, אם פרסתם את המודל שלכם באמצעות קונטיינר us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest, תוכלו להכניס לשימוש בסביבת הייצור את אותו מודל באמצעות זמן הריצה המותאם של TensorFlow באמצעות קונטיינר us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.2-8:latest.
בדוגמת הקוד הבאה מוצג איך ליצור מודל באמצעות קונטיינר זמן הריצה של TensorFlow שעבר אופטימיזציה us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest. כדי לפרוס את המודל הזה, משתמשים באותו תהליך שבו משתמשים כדי לפרוס מודל עם קונטיינרים מוכנים מראש של TensorFlow Serving.
מידע נוסף על ModelServiceClient שמשמש בדוגמה הזו זמין במאמר Class ModelServiceClient.
מידע נוסף על פריסת מודלים באמצעות Gemini Enterprise Agent Platform זמין במאמר בנושא פריסת מודל באמצעות Agent Platform API.
מידע נוסף על ההגדרות allow_precompilation ו-allow_compression מופיע בקטע אופטימיזציות של מודלים שבהמשך המאמר.
from google.cloud.aiplatform import gapic as aip
PROJECT_ID = PROJECT_ID
REGION = LOCATION
API_ENDPOINT = f"{REGION}-aiplatform.googleapis.com"
PARENT = f"projects/{PROJECT_ID}/locations/{REGION}"
client_options = {"api_endpoint": API_ENDPOINT}
model_service_client = aip.ModelServiceClient(client_options=client_options)
tf_opt_model_dict = {
"display_name": "DISPLAY_NAME",
"metadata_schema_uri": "",
"artifact_uri": "MODEL_URI",
"container_spec": {
"image_uri": "us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest",
"args": [
# The optimized TensorFlow runtime includes the following
# options that can be set here.
# "--allow_precompilation=true" - enable XLA precompilation
# "--allow_compression=true" - enable
# model compression optimization
],
},
}
tf_opt_model = model_service_client.upload_model(
parent=PARENT,
model=tf_opt_model_dict).result(timeout=180).model
התראות על אופטימיזציה של מודלים
כשפורסים מודל באמצעות זמן הריצה האופטימלי של TensorFlow, אפשר להפעיל שתי תכונות שעשויות לשפר עוד יותר את ההצגה של מודלים של TensorFlow.
אפשר להפעיל בו-זמנית את האפשרות של קומפילציה מראש של מודל XLA ואת האפשרות של אופטימיזציה של דחיסת מודל. בקטעים הבאים מתואר איך להפעיל את האפשרויות האלה באמצעות דגלים במהלך הפריסה.
הפעלת קדם-קומפילציה של מודל XLA
כדי להגדיר את זמן הריצה האופטימלי של TensorFlow כך שיבצע קומפילציה מראש של מודלים, צריך להגדיר את הדגל allow_precompilation
לערך true. קומפילציה מראש של מודל XLA פועלת עבור סוגים שונים של מודלים, וברוב המקרים משפרת את הביצועים. קומפילציה מראש של XLA פועלת בצורה הטובה ביותר עבור בקשות עם גדלים גדולים של אצווה.
הקומפילציה מראש של Model XLA מתבצעת כשהבקשה הראשונה עם גודל האצווה החדש מגיעה. כדי לוודא שזמן הריצה מאותחל לפני הבקשה הראשונה, אפשר לכלול קובץ בקשות לחימום. מידע נוסף זמין במאמר חימום של SavedModel במסמכי התיעוד של TensorFlow.
השלמת ההידור מראש של XLA נמשכת בין כמה שניות לכמה דקות, בהתאם למורכבות המודל. אם משתמשים בהידור מראש של מודל XLA, כדאי לקחת בחשבון את הנקודות הבאות.
אם משתמשים בקובץ חימום, כדאי לכלול בקשות עם גדלי אצווה שמייצגים את גדלי האצווה שהמודל צפוי לקבל. אם מספקים מספר גדול של בקשות בקובץ החימום, הפעלת שרת המודל תהיה איטית יותר.
אם אתם מצפים שהמודל שלכם יקבל בקשות עם גדלים שונים של אצווה, כדאי להפעיל את האפשרות לאיחוד בקשות בצד השרת עם קבוצה של ערכים קבועים ל-
allow_batch_sizes. מידע נוסף על הפעלת האפשרות לאיחוד בקשות בצד השרתמידע נוסף על שליחת בקשות באצווה מופיע במאמר הפעלת שליחת בקשות באצווה בצד השרת ב-TensorFlow במסמכי התיעוד של TensorFlow.
הקומפילציה מראש של XLA מוסיפה תקורה של זיכרון, ולכן יכול להיות שחלק מהמודלים הגדולים ייכשלו עם שגיאת חוסר בזיכרון ב-GPU.
מומלץ לבדוק את ההידור מראש של XLA במודל לפני שמפעילים את התכונה הזו בסביבת הייצור.
הפעלת אופטימיזציה של דחיסת מודלים
כדי להגדיר את זמן הריצה של TensorFlow שעבר אופטימיזציה לשימוש באופטימיזציה של דחיסת מודלים, צריך להגדיר את הדגל allow_compression שלו לערך true. בודקים איך הפעלת הדגל הזה משפיעה על הדיוק של המודל, ואז מחליטים אם להפעיל אותו בסביבת הייצור.
השבתת האופטימיזציות
כדי להגדיר את זמן הריצה של TensorFlow שעבר אופטימיזציה להרצת מודלים ללא אופטימיזציה, צריך להגדיר את הדגל disable_optimizer שלו ל-true.
מגבלות אופטימליות של זמן ריצה ב-TensorFlow
לזמן הריצה האופטימלי של TensorFlow יש את המגבלות הבאות:
- סביבת זמן הריצה האופטימלית של TensorFlow לא תואמת ל-GPU ישנים של NVIDIA, כמו Tesla P4 ו-Tesla P100.
- בשלב הזה, זמן הריצה האופטימלי של TensorFlow תומך רק בהסברים של Shapley עם דגימה.
תמחור
פריסת מודלים באמצעות זמן הריצה האופטימלי של TensorFlow לא כרוכה בחיובים נוספים. העלות זהה לפריסות אחרות של הסקת מסקנות שבהן אתם מחויבים על סמך מספר המכונות הווירטואליות והמאיצים שבהם נעשה שימוש. מידע נוסף על התמחור של Gemini Enterprise Agent Platform