tensorflow:: מָנָה:: מטעין

זהו שיעור מופשט.

#include <loader.h>

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

סיכום

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

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

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

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

הטמעות צריכות להבטיח שהשיטות שהם חושפים בטוחות בשרשור, או לתעד ו/או לתאם בקפידה את מאפייני בטיחות השרשור שלהן עם הלקוחות שלהן כדי להבטיח נכונות. Servables לא צריך לדאוג ביצוע במקביל של Load () / לפרוק () כפי המתקשר יבטיח כי לא קורה.

יְרוּשָׁה

כוון ידוע subclasses: tensorflow :: המשרתים :: ResourceUnsafeLoader

בנאים והורסים

~Loader ()
הורס לעולם להיקרא על Loader אשר servable נטען כרגע, כלומר

תפקידים ציבוריים

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
מעריך את המשאבים שניתן להגשה ישתמש בהם.
Load ()
virtual Status
המאחזרת כל הנתונים שיש לטעון לפני השימוש servable שמחזיר servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
בדומה לשיטה הנ"ל, אבל לוקח Metadata בתור פרמטר, אשר עשוי לשמש את יישום מטעין כראוי.
Unload ()=0
virtual void
משחררת כל המשאבים שהוקצו במהלך טען () (למעט אולי משאבים משותפים ברחבי servables כי עדיין נדרשים עבור הפעלתנים אחרים).
servable ()=0
virtual AnyPtr
מחזיר ממשק אטום לאובייקט הניתן להגשה הבסיסי.

מבנים

tensorflow :: המשרתים :: Loader :: Metadata

המטא נתונים מורכבים מה-ServableId.

תפקידים ציבוריים

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

מעריך את המשאבים שניתן להגשה ישתמש בהם.

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

  1. האומדן חייב לייצג גבול עליון של הערך בפועל.
  2. לפני הטעינה, האומדן עשוי לכלול משאבים שאינם קשורים לאף מופע מכשיר ספציפי, למשל זיכרון RAM באחד משני ה-GPUs.
  3. בזמן טעינה, עבור כל התקנים עם מספר מופעים (למשל שני GPUs), האומדן חייב לציין את המופע אליו קשור כל משאב.
  4. האומדן חייב להיות מונוטוני שאינו עולה, כלומר אינו יכול לעלות עם הזמן. סיבות לכך שזה עשוי לרדת עם הזמן החזרות
    אומדן של המשאבים שהשרת יצרוך לאחר הטעינה. אם קובץ ההגשה כבר נטען, מחזיר אומדן של השימוש בפועל במשאבים.

לִטעוֹן

virtual Status Load()

המאחזרת כל הנתונים שיש לטעון לפני השימוש servable שמחזיר servable () .

לא עשוי להגביר את צריכת משאבים מהאומדן שדווח על ידי EstimateResources () .

אם אתה רוצה להטמיע טענת () , אתה לא צריך לעקוף LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

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

אם אתה שולט LoadWithMetadata () , כי אתה יכול להשתמש metadata כראוי, אתה יכול לדלג דריסה טען () .

לִפְרוֹק

virtual void Unload()=0

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

המטעין אינו צריך לחזור למצב "החדש" (כלומר טען () לא יכול להיקרא לאחר לפרוק () ).

ניתן להגשה

virtual AnyPtr servable()=0

מחזיר ממשק אטום לאובייקט הניתן להגשה הבסיסי.

על המתקשר לדעת את סוג הממשק המדויק כדי לעשות בו שימוש בפועל. לדוגמה:

CustomLoader יישום:

class CustomLoader : public Loader {
 public:
  ...
  Status Load() override {
    servable_ = ...;
  }

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

הגשת בקשת משתמש:

ServableHandle<CustomServable> handle = ...
CustomServable* servable = handle.get();
servable->...

אם servable () נקרא לאחר מוצלח טען () ולפני לפרוק () , היא מחזירה אובייקט AnyPtr תקף, שאינו ריקה. אם נקרא לפני מוצלח טען () שיחה או אחרי לפרוק () , היא מחזירה AnyPtr null.

~מטעין

virtual  ~Loader()=default

הורס לעולם להיקרא על Loader אשר servable נטען כרגע, כלומר

בין (מוצלחות) שיחות לטעון () ו לפרוק () .