เทนเซอร์โฟลว์:: เสิร์ฟ:: Loader

นี่คือคลาสนามธรรม

#include <loader.h>

นามธรรมที่เป็นมาตรฐานสำหรับออบเจ็กต์ที่จัดการวงจรชีวิตของ Servable รวมถึงการโหลดและการขนถ่าย

สรุป

Servables เป็นอ็อบเจ็กต์ที่กำหนดเองซึ่งให้บริการอัลกอริธึมหรือข้อมูลที่มักจะใช้โมเดลที่เรียนรู้ด้วยเครื่องแม้ว่าไม่จำเป็น

พับ สำหรับวัตถุ servable เป็นหนึ่งในตัวอย่างของกระแสของรุ่น servable ทั้งหมดร่วมกันเป็นชื่อสามัญ (เช่น "my_servable") และเพิ่มจำนวนรุ่นมักจะเป็นตัวแทนของพารามิเตอร์การปรับปรุงรูปแบบการเรียนรู้จากการฝึกอบรมข้อมูลที่สดใหม่

พับ ควรจะเริ่มต้นในสถานะที่มิได้บรรจุหมายความว่าไม่มีผลงานได้รับการดำเนินการเพื่อเตรียมความพร้อมในการดำเนินการ อินสแตนซ์ทั่วไปที่ยังไม่ได้โหลดมีเพียงตัวชี้ไปยังตำแหน่งที่สามารถโหลดข้อมูลได้ (เช่น เส้นทางระบบไฟล์หรือตำแหน่งเครือข่าย) การสร้างและการทำลายอินสแตนซ์ควรมีราคาถูกพอสมควร การดำเนินงานเริ่มต้นที่มีราคาแพงควรจะทำใน การโหลด ()

subclasses อาจเลือกเก็บชี้ไปที่ แหล่ง ที่มามันสำหรับการเข้าถึงรัฐร่วมกันในวัตถุ servable หลายในกระแส servable ที่กำหนด

การใช้งานจำเป็นต้องตรวจสอบให้แน่ใจว่าวิธีการที่พวกเขาเปิดเผยนั้นปลอดภัยสำหรับเธรด หรือจัดทำเอกสารและ/หรือประสานงานคุณสมบัติความปลอดภัยของเธรดอย่างระมัดระวังกับไคลเอนต์ของพวกเขาเพื่อให้แน่ใจว่าถูกต้อง Servables ไม่จำเป็นต้องกังวลเกี่ยวกับการดำเนินการพร้อมกัน โหลด () / ยกเลิกการโหลด () เป็นผู้โทรจะให้แน่ใจว่าจะไม่เกิดขึ้น

มรดก

ตรง Subclasses เป็นที่รู้จัก: tensorflow :: การให้บริการ :: ResourceUnsafeLoader

ตัวสร้างและตัวทำลาย

~Loader ()
destructor จะไม่ถูกเรียกว่าบน พับ ซึ่ง 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 :: การให้บริการ :: พับ :: เมตาดาต้า

ข้อมูลเมตาประกอบด้วย ServableId

งานสาธารณะ

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

ประเมินทรัพยากรที่เซิร์ฟเวอร์จะใช้

สำคัญ: การนำเมธอดนี้ไปใช้ต้องเป็นไปตามข้อกำหนด ซึ่งทำให้ระบบที่ให้บริการสามารถให้เหตุผลอย่างถูกต้องว่าสามารถโหลดเซิร์ฟเวอร์ใดได้อย่างปลอดภัย:

  1. ค่าประมาณต้องแสดงถึงขอบเขตบนของมูลค่าจริง
  2. ก่อนโหลด การประมาณการอาจรวมทรัพยากรที่ไม่ผูกกับอินสแตนซ์อุปกรณ์ใด ๆ เช่น RAM บนหนึ่งในสอง GPUs
  3. ขณะโหลด สำหรับอุปกรณ์ที่มีหลายอินสแตนซ์ (เช่น GPU สองตัว) การประมาณการต้องระบุอินสแตนซ์ที่แต่ละทรัพยากรถูกผูกไว้
  4. ค่าประมาณจะต้องไม่เพิ่มขึ้นแบบโมโนโทน กล่าวคือ ไม่สามารถเพิ่มขึ้นได้เมื่อเวลาผ่านไป เหตุผลที่อาจลดลงเมื่อเวลาผ่านไป คืนสินค้า
    ค่าประมาณของทรัพยากรที่แสดงผลได้จะใช้เมื่อโหลดแล้ว หากโหลดเซิร์ฟเวอร์แล้ว ส่งคืนการประเมินการใช้ทรัพยากรจริง

โหลด

virtual Status Load()

เรียกข้อมูลใด ๆ ที่ตอบสนองความต้องการที่จะโหลดก่อนที่จะใช้ servable กลับโดย servable ()

อาจจะใช้ทรัพยากรมากกว่าประมาณการที่รายงานโดย EstimateResources ()

หากการดำเนินการ โหลด () คุณจะได้ไม่ต้องแทนที่ LoadWithMetadata ()

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & 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 () เรียกว่าหลังจากที่ประสบความสำเร็จ ในการโหลด () และก่อนที่จะ ยกเลิกการโหลด () ก็จะส่งกลับที่ถูกต้องไม่ใช่ null วัตถุ AnyPtr ถ้าเรียกว่าก่อนที่จะประสบความสำเร็จใน การโหลด () โทรหรือหลังการ ยกเลิกการโหลด () ก็จะส่งกลับ null AnyPtr

~ตัวโหลด

virtual  ~Loader()=default

destructor จะไม่ถูกเรียกว่าบน พับ ซึ่ง servable มีการโหลดในขณะนี้คือ

ระหว่าง (ที่ประสบความสำเร็จ) เรียกร้องให้ โหลด () และ ยกเลิกการโหลด ()