เทนเซอร์โฟลว์:: เสิร์ฟ:: 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
ประเมินทรัพยากรที่เซิร์ฟเวอร์จะใช้
สำคัญ: การนำเมธอดนี้ไปใช้ต้องเป็นไปตามข้อกำหนด ซึ่งทำให้ระบบที่ให้บริการสามารถให้เหตุผลอย่างถูกต้องว่าสามารถโหลดเซิร์ฟเวอร์ใดได้อย่างปลอดภัย:
- ค่าประมาณต้องแสดงถึงขอบเขตบนของมูลค่าจริง
- ก่อนโหลด การประมาณการอาจรวมทรัพยากรที่ไม่ผูกกับอินสแตนซ์อุปกรณ์ใด ๆ เช่น RAM บนหนึ่งในสอง GPUs
- ขณะโหลด สำหรับอุปกรณ์ที่มีหลายอินสแตนซ์ (เช่น GPU สองตัว) การประมาณการต้องระบุอินสแตนซ์ที่แต่ละทรัพยากรถูกผูกไว้
- ค่าประมาณจะต้องไม่เพิ่มขึ้นแบบโมโนโทน กล่าวคือ ไม่สามารถเพิ่มขึ้นได้เมื่อเวลาผ่านไป เหตุผลที่อาจลดลงเมื่อเวลาผ่านไป
คืนสินค้า ค่าประมาณของทรัพยากรที่แสดงผลได้จะใช้เมื่อโหลดแล้ว หากโหลดเซิร์ฟเวอร์แล้ว ส่งคืนการประเมินการใช้ทรัพยากรจริง
โหลด
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 มีการโหลดในขณะนี้คือ
ระหว่าง (ที่ประสบความสำเร็จ) เรียกร้องให้ โหลด () และ ยกเลิกการโหลด ()