ארכיטקטורה

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

מושגי מפתח

כדי להבין את הארכיטקטורה של TensorFlow Serving, עליך להבין את מושגי המפתח הבאים:

ניתן להגשה

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

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

  • תוצאות סטרימינג
  • ממשקי API ניסיוניים
  • מצבי פעולה אסינכרוניים

ניתנים להגשה אינם מנהלים את מחזור החיים שלהם.

מנות אופייניות להגשה כוללות את הדברים הבאים:

  • חבילת TensorFlow SavedModelBundle ( tensorflow::Session )
  • טבלת חיפוש להטמעה או חיפושי אוצר מילים

גרסאות הניתנות להגשה

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

זרמים הניתנים להגשה

זרם שניתן להגשה הוא רצף הגרסאות של זרם ניתן להגשה, ממוין לפי מספרי גרסאות הולכים וגדלים.

דגמים

TensorFlow Serving מייצג מודל כחומר הגשה אחד או יותר. מודל שנלמד על ידי מכונה עשוי לכלול אלגוריתם אחד או יותר (כולל משקלים נלמדים) וטבלאות חיפוש או הטמעה.

אתה יכול לייצג מודל מורכב כאחת מהאפשרויות הבאות:

  • מספר מנות עצמאיות להגשה
  • מרוכב יחיד שניתן להגשה

ניתן להגשה עשוי להתאים גם לשבריר של דגם. לדוגמה, טבלת חיפוש גדולה יכולה להיות מפורקת על פני מופעי TensorFlow Serving רבים.

מעמיסים

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

מקורות

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

הממשק של TensorFlow Serving עבור Sources יכול לגלות שרתים ממערכות אחסון שרירותיות. TensorFlow Serving כולל יישומי מקור התייחסות נפוצים. לדוגמה, מקורות עשויים לגשת למנגנונים כגון RPC ויכולים לסקור מערכת קבצים.

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

גרסאות שאפו

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

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

מנהלים

מנהלים מטפלים במחזור החיים המלא של שירותים, כולל:

  • טוען שירותים
  • הגשת מנות הגשה
  • פריקת כלי הגשה

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

מנהלי הגשה של TensorFlow מספקים ממשק פשוט וצר -- GetServableHandle() -- עבור לקוחות לגשת למופעים ניתנים להגשה טעונים.

הליבה

באמצעות ה-APis הסטנדרטיים של TensorFlow Serving, TensorFlow Serving Core מנהלת את ההיבטים הבאים של קבצי הגשה:

  • מעגל החיים
  • מדדים

TensorFlow Serving Core מתייחס לחומרי הגשה ומעמיסים כאל אובייקטים אטומים.

חיים של שרת

tf המשרת דיאגרמת ארכיטקטורה

באופן כללי:

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

ביתר פירוט:

  1. תוסף מקור יוצר Loader עבור גרסה ספציפית. ה-Loader מכיל כל מטא-נתונים שהוא צריך כדי לטעון את ה-servable.
  2. המקור משתמש בהתקשרות חוזרת כדי להודיע ​​למנהל על גרסת השאיפה.
  3. המנהל מחיל את מדיניות הגירסה שהוגדרה כדי לקבוע את הפעולה הבאה שיש לנקוט, שיכולה להיות פריקת גירסה שנטענה בעבר או טעינת הגירסה החדשה.
  4. אם המנהל קובע שזה בטוח, הוא נותן ל-Loader את המשאבים הנדרשים ואומר ל-Loader לטעון את הגרסה החדשה.
  5. לקוחות מבקשים מהמנהל את ה-Serable, או מציינים גרסה במפורש או רק מבקשים את הגרסה העדכנית ביותר. המנהל מחזיר ידית לשרת.

לדוגמה, נניח שמקור מייצג גרף TensorFlow עם משקלי מודל המתעדכנים לעתים קרובות. המשקולות נשמרות בקובץ בדיסק.

  1. המקור מזהה גרסה חדשה של משקלי הדגם. זה יוצר Loader המכיל מצביע לנתוני הדגם בדיסק.
  2. המקור מודיע למנהל הדינמי על גרסת השאיפה.
  3. המנהל הדינמי מחיל את מדיניות הגרסאות ומחליט לטעון את הגרסה החדשה.
  4. המנהל הדינמי אומר למטעין שיש מספיק זיכרון. ה-Loader מציג את גרף TensorFlow עם המשקולות החדשות.
  5. לקוח מבקש טיפול לגרסה העדכנית ביותר של הדגם, וה-Dynamic Manager מחזיר ידית לגרסה החדשה של השרת.

פְּרִישׁוּת

TensorFlow Serving מספק מספר נקודות הרחבה בהן ניתן להוסיף פונקציונליות חדשה.

מדיניות גרסה

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

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

מָקוֹר

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

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

מעמיסים

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

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

באצ'ר

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