تينسورفلو :: خدمة:: محمل

هذه فئة مجردة.

#include <loader.h>

تجريد معياري لكائن يدير دورة حياة مادة قابلة للخدمة ، بما في ذلك تحميلها وتفريغها.

ملخص

الخوادم عبارة عن كائنات عشوائية تخدم الخوارزميات أو البيانات التي تستخدم غالبًا ، وإن لم يكن بالضرورة ، نموذجًا تعلمه الآلة.

A محمل لكائن قابل للعرض يمثل مثيل واحد من تيار من الإصدارات قابل للعرض، عن تقاسم الاسم الشائع (على سبيل المثال "my_servable") وزيادة أرقام إصدار، وهو ما يمثل عادة المعلمات النموذج المحدث المستفادة من بيانات التدريب الطازجة.

A محمل ينبغي أن تبدأ في حالة عدم التحميل، وهذا يعني أن أي عمل تم القيام به لإعداد لتنفيذ عمليات. المثال النموذجي الذي لم يتم تحميله بعد يحتوي فقط على مؤشر إلى موقع يمكن من خلاله تحميل بياناته (مثل مسار نظام الملفات أو موقع الشبكة). يجب أن يكون إنشاء النماذج وتدميرها رخيصًا إلى حد ما. ينبغي القيام به عمليات التهيئة مكلفة في تحميل () .

فرعية قد يتم تخزين اختياريا مؤشر إلى المصدر الذي نشأ عليه، للوصول إلى دولة مشتركة عبر الأجسام قابل للعرض متعددة في تيار قابل للعرض معين.

تحتاج التطبيقات إلى التأكد من أن الطرق التي تعرضها آمنة ، أو توثيق و / أو تنسيق خصائص سلامة الخيط مع عملائها لضمان صحتها. لا تحتاج إلى Servables تقلق بشأن تنفيذ المتزامنة تحميل () / إلغاء () كما المتصل سيضمن هذا لا يحدث.

ميراث

توجيه المعروفة الفئات الفرعية: tensorflow :: :: خدمة ResourceUnsafeLoader

البنائين والمدمرين

~Loader ()
لن يتم استدعاء destructor على محمل الذي يتم تحميله حاليا قابل للعرض، أي

الوظائف العامة

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
تقدر الموارد التي يمكن استخدامها.
Load ()
virtual Status
جلب أي البيانات التي يحتاج إلى تحميلها قبل استخدام قابل للعرض إرجاعها بواسطة قابل للعرض () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
على غرار الأسلوب أعلاه، ولكنه يأخذ الفوقية بمثابة المعلمة، والتي يمكن استخدامها من قبل تنفيذ محمل بشكل مناسب.
Unload ()=0
virtual void
تفرج عن أي الموارد المخصصة أثناء الحمل () (ربما باستثناء الموارد المشتركة عبر servables التي لا تزال هناك حاجة لتلك النشطة الأخرى).
servable ()=0
virtual AnyPtr
إرجاع واجهة معتمة إلى الكائن الأساسي القابل للخدمة.

الهياكل

tensorflow :: :: خدمة تحميل :: الفوقية

تتكون البيانات الوصفية من ServableId.

الوظائف العامة

تقدير الموارد

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

تقدر الموارد التي يمكن استخدامها.

هام: يجب أن يفي تنفيذ هذه الطريقة بالمتطلبات التالية ، والتي تمكّن نظام العرض من التفكير بشكل صحيح حول الخوادم التي يمكن تحميلها بأمان:

  1. يجب أن يمثل التقدير حدًا أعلى للقيمة الفعلية.
  2. قبل التحميل ، قد يتضمن التقدير موارد غير مرتبطة بأي مثيل جهاز معين ، على سبيل المثال ذاكرة الوصول العشوائي على واحدة من اثنين من وحدات معالجة الرسومات.
  3. أثناء التحميل ، لأي أجهزة ذات مثيلات متعددة (مثل وحدتي GPU) ، يجب أن يحدد التقدير المثيل الذي يرتبط به كل مورد.
  4. يجب أن يكون التقدير غير متزايد بشكل رتيب ، أي أنه لا يمكن أن يزيد بمرور الوقت. أسباب احتمال انخفاضها بمرور الوقت عائدات
    تقدير للموارد التي ستستهلكها الخدمة بمجرد تحميلها. إذا تم تحميل الخدمة القابلة للخدمة بالفعل ، فتُرجع تقديرًا لاستخدام المورد الفعلي.

حمل

virtual Status Load()

جلب أي البيانات التي يحتاج إلى تحميلها قبل استخدام قابل للعرض إرجاعها بواسطة قابل للعرض () .

قد لا تستخدم موارد أكثر تقدير ذكرت من قبل EstimateResources () .

إذا تنفيذ تحميل () ، لم يكن لديك لتجاوز LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

على غرار الأسلوب أعلاه، ولكنه يأخذ الفوقية بمثابة المعلمة، والتي يمكن استخدامها من قبل تنفيذ محمل بشكل مناسب.

إذا كنت تجاوز LoadWithMetadata () ، لأنه يمكنك استخدام البيانات الوصفية بشكل مناسب، يمكنك تخطي تجاوز الحمولة () .

تفريغ

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->...

إذا قابل للعرض () ويسمى بعد نجاح تحميل () وقبل إلغاء تحميل () ، تقوم بإرجاع وعدم خالية الكائن AnyPtr صالح. إذا دعا قبل ناجحة تحميل () مكالمة أو بعد إلغاء تحميل () ، فإنه يعود AnyPtr فارغة.

~ محمل

virtual  ~Loader()=default

لن يتم استدعاء destructor على محمل الذي يتم تحميله حاليا قابل للعرض، أي

بين (نجاح) دعوات ل تحميل () و إلغاء تحميل () .