انضم إلينا تقريبا في المرأة في ندوة ML في 19 أكتوبر سجل الآن

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

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

#include <loader.h>

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

ملخص

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

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

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

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

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

ميراث

الفئات الفرعية المعروفة المباشرة: tensorflow :: serve :: ResourceUnsafeLoader

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

~Loader ()
لن يتم استدعاء المدمر مطلقًا على اللودر الذي يتم تحميله حاليًا ، أي

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

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

الهياكل

tensorflow :: serve :: Loader :: Metadata

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

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

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

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

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

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

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

حمل

virtual Status Load()

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

لا يجوز استخدام موارد أكثر من التقدير الذي تم الإبلاغ عنه بواسطة EstimateResources () .

في حالة تنفيذ Load () ، لا يتعين عليك تجاوز LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

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

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

تفريغ

virtual void Unload()=0

يحرر أي موارد مخصصة أثناء التحميل () (ربما باستثناء الموارد المشتركة عبر الخوادم التي لا تزال مطلوبة للموارد النشطة الأخرى).

لا يحتاج المُحمل إلى العودة إلى الحالة "الجديدة" (أي لا يمكن استدعاء Load () بعد Unload () ).

صالح للخدمة

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 صالح. إذا تم استدعاؤه قبل استدعاء Load () ناجح أو بعد Unload () ، فإنه يقوم بإرجاع AnyPtr خالية.

~ محمل

virtual  ~Loader()=default

لن يتم استدعاء المدمر مطلقًا على اللودر الذي يتم تحميله حاليًا ، أي

بين المكالمات (الناجحة) إلى Load () و Unload () .