جریان تنسور:: خدمت:: لودر

این یک کلاس انتزاعی است.

#include <loader.h>

یک انتزاع استاندارد شده برای یک شی که چرخه حیات یک سرویس پذیر را مدیریت می کند، از جمله بارگیری و تخلیه آن.

خلاصه

Servable ها اشیاء دلخواه هستند که الگوریتم ها یا داده هایی را ارائه می دهند که اغلب، اگرچه نه لزوما، از یک مدل یادگیری ماشینی استفاده می کنند.

لودر برای یک شیء servable نشان دهنده یک نمونه از یک جریان از نسخه های servable، همه به اشتراک گذاری یک نام مشترک (به عنوان مثال "my_servable") و افزایش تعداد نسخه، به طور معمول به نمایندگی پارامترهای مدل به روز شده به دست از داده های آموزشی تازه است.

لودر باید در وضعیت تخلیه شروع، به این معنی که هیچ کار است برای آماده سازی برای انجام عملیات انجام شده است. یک نمونه معمولی که هنوز بارگذاری نشده است، صرفاً حاوی یک اشاره گر به مکانی است که داده های آن را می توان از آنجا بارگیری کرد (مثلاً یک مسیر سیستم فایل یا مکان شبکه). ساخت و تخریب نمونه ها باید نسبتاً ارزان باشد. عملیات اولیه گران قیمت باید در انجام بار () .

زیر کلاس اختیاری ممکن است ذخیره یک اشاره گر به منبع که نشات گرفته، برای دسترسی به حالت مشترک در سراسر اشیاء servable های متعدد در یک جریان servable داده شده است.

پیاده‌سازی‌ها باید اطمینان حاصل کنند که روش‌هایی که در معرض نمایش قرار می‌دهند، ایمن هستند، یا ویژگی‌های ایمنی نخ خود را با دقت مستند و/یا هماهنگ کنند تا از صحت اطمینان حاصل شود. Servables در مورد اجرای همزمان به نگرانی لازم نیست بار () / خالی کردن () به عنوان تماس گیرنده اطمینان خواهد داد که اتفاق نمی افتد.

وراثت

مستقیم زیرکلاس های شناخته شده: tensorflow :: خدمت :: ResourceUnsafeLoader

سازندگان و تخریب کنندگان

~Loader ()
مخرب هرگز در یک نامیده خواهد شد لودر که servable است در حال حاضر پر، یعنی

توابع عمومی

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
منابعی را که یک سرویس پذیر استفاده خواهد کرد تخمین می زند.
Load ()
virtual Status
بازخوانی هر اطلاعاتی را که باید قبل از استفاده از servable بازگردانده شده توسط لود شود servable () .
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. قبل از بارگذاری، تخمین ممکن است شامل منابعی باشد که به نمونه خاصی از دستگاه محدود نمی شوند، به عنوان مثال RAM در یکی از دو GPU.
  3. در حین بارگذاری، برای هر دستگاهی با چندین نمونه (مثلاً دو پردازنده گرافیکی)، تخمین باید نمونه ای را که هر منبع به آن متصل است، مشخص کند.
  4. برآورد باید به طور یکنواخت غیر افزایشی باشد، یعنی نمی تواند در طول زمان افزایش یابد. دلایل کاهش بالقوه آن در طول زمان برمی گرداند
    تخمینی از منابعی که قابل سرویس دهی پس از بارگیری مصرف می کند. اگر سرویس‌پذیر قبلاً بارگذاری شده باشد، تخمینی از مصرف واقعی منابع را برمی‌گرداند.

بار

virtual Status Load()

بازخوانی هر اطلاعاتی را که باید قبل از استفاده از servable بازگردانده شده توسط لود شود servable () .

ممکن است منابع بیش از برآورد گزارش شده توسط استفاده از 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->...

اگر servable () است که پس از به نام موفق بار () و قبل از خالی کردن () ، آن را به یک معتبر، غیر تهی شی AnyPtr گرداند. اگر قبل از به نام موفق بار () تماس و یا بعد از خالی کردن () ، آن را برمی گرداند AnyPtr تهی.

~لودر

virtual  ~Loader()=default

مخرب هرگز در یک نامیده خواهد شد لودر که servable است در حال حاضر پر، یعنی

بین (موفق) را به بار () و خالی کردن () .