เทนเซอร์โฟลว์:: เสิร์ฟ:: BasicManager
นี่คือคลาสนามธรรม#include <basic_manager.h>
ช่วยจัดการวงจรชีวิตของ Servables รวมถึงการโหลด การให้บริการ และการขนถ่าย
สรุป
ผู้จัดการยอมรับ Servables ในรูปแบบของ Loaders
เราเริ่มจัดการเซิร์ฟเวอร์โดยใช้หนึ่งในวิธี ManageServable* คุณสามารถไปโหลด servable หลังจากนี้โดยการเรียก LoadServable () การโหลดจะทำให้สามารถให้บริการได้ เมื่อคุณตัดสินใจที่จะขนนั้นคุณสามารถเรียก UnloadServable () ในนั้นซึ่งจะทำให้ไม่สามารถใช้งานในการให้บริการแล้วขน servable
Servables จะถูกเก็บไว้จนถึง StopManagingServable () จะเรียกว่า ซึ่งช่วยให้ผู้จัดการระดับสูงกว่ามีข้อมูลเพิ่มเติมในการตัดสินใจว่าจะลืมเกี่ยวกับเซิร์ฟเวอร์เมื่อใดจึงจะปลอดภัย
BasicManager ติดตามทรัพยากร (เช่น RAM) ใช้โดย servables โหลดและเพียง แต่ช่วยให้การโหลด servables ใหม่ที่เหมาะสมกับภายในสระว่ายน้ำทรัพยากรโดยรวม
BasicManager สามารถกำหนดค่าการใช้ด้ายสระว่ายน้ำที่จะทำโหลดและยกเลิกการโหลด นี้จะทำให้ LoadServable () และ UnloadServable () วิธีการกำหนดเวลาในการโหลด / unloads มากกว่าการดำเนินการให้พวกเขาพร้อมกัน หากมีการโหลด/ยกเลิกการโหลดที่รอดำเนินการมากกว่าเธรดในกลุ่มเธรด เธรดเหล่านั้นจะถูกประมวลผลในลำดับ FIFO
เมื่อมีตัวโหลดที่ประเมินความต้องการทรัพยากรของเซิร์ฟเวอร์มากเกินไป และ/หรือผูกเฉพาะทรัพยากรของเซิร์ฟเวอร์กับอินสแตนซ์ของอุปกรณ์ การโหลด/ยกเลิกการโหลดพร้อมกันจะลดลงต่ำกว่าขนาดเธรดพูล นั่นเป็นเพราะเราอาจต้องรอจนกว่าการโหลด/ยกเลิกการโหลดของเซิร์ฟเวอร์หนึ่งเสร็จสิ้นเพื่อตรึงความพร้อมใช้งานของทรัพยากรสำหรับการโหลดเซิร์ฟเวอร์อื่น
ต้องใช้:
- การสั่งซื้อของสายวิธีการ - ManageServable () (และสายพันธุ์) -> LoadServable () -> UnloadServable () -> StopManagingServable ()
- อย่ากำหนดเวลาการโหลดพร้อมกันและการยกเลิกการโหลดของเซิร์ฟเวอร์เดียวกัน
- อย่าเรียกการโหลดหรือยกเลิกการโหลดหลายครั้งบนเซิร์ฟเวอร์เดียวกัน
คลาสนี้ปลอดภัยสำหรับเธรด
ตัวอย่างการใช้งาน:
const ServableId id = {kServableName, 0}; std::unique_ptr<Loader> loader = ...; ... BasicManager manager; TF_CHECK_OK(manager.ManageServable( CreateServableData(id, std::move(loader)))); TF_CHECK_OK(manager.LoadServable(id)); ... TF_CHECK_OK(manager.GetServableHandle( ServableRequest::Latest(kServableName), &handle)); ... TF_CHECK_OK(manager.UnloadServable(id)); TF_CHECK_OK(manager.StopManagingServable(id));
มรดก
สืบทอดจาก: tensorflow :: การให้บริการ :: ผู้จัดการตัวสร้างและตัวทำลาย | |
---|---|
~BasicManager () หากกำหนดค่าให้ใช้ load/unload thread-pool ให้รอจนกว่าการโหลดและยกเลิกการโหลดตามกำหนดเวลาทั้งหมดจะเสร็จสิ้น จากนั้นจะทำลายชุดของเธรด |
ประเภทสาธารณะ | |
---|---|
DoneCallback | โดยใช้std::function< void(const Status &status)> โทรกลับเมื่อสิ้นสุด {Load,Unload}Servable() |
PreLoadHook | โดยใช้std::function< void(const ServableId &)> |
คลาสเพื่อน | |
---|---|
test_util::BasicManagerTestAccess | friend class |
ฟังก์ชั่นคงที่สาธารณะ | |
---|---|
Create ( Options options, std::unique_ptr< BasicManager > *manager) | Status |
งานสาธารณะ | |
---|---|
CancelLoadServableRetry (const ServableId & id) | void ยกเลิกการลองใหม่โหลด servable ระหว่าง LoadServable () |
GetAdditionalServableState (const ServableId & id) | T * |
GetAvailableUntypedServableHandles () const override | virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > |
GetManagedServableNames () const | std::vector< string > |
GetManagedServableStateSnapshot (const ServableId & id) | optional< ServableStateSnapshot< T > > |
GetManagedServableStateSnapshots (const string & servable_name) const | std::vector< ServableStateSnapshot< T > > |
GetUntypedServableHandle (const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle) override | virtual Status |
ListAvailableServableIds () const override | virtual std::vector< ServableId > รับรายการรหัสที่แสดงได้ทั้งหมด เช่น |
LoadServable (const ServableId & id, DoneCallback done_callback) | void โหลดเซิร์ฟเวอร์ด้วย ID นี้ และอัปเดตแผนที่ที่ให้บริการด้วย |
ManageServable (ServableData< std::unique_ptr< Loader >> servable) | Status เริ่มจัดการเสิร์ฟ |
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state) | Status คล้ายกับวิธีการข้างต้น แต่ผู้โทรซึ่งโดยปกติแล้วจะเป็นผู้จัดการอื่นที่สร้างขึ้นจากวิธีนี้สามารถเชื่อมโยงสถานะเพิ่มเติมกับเซิร์ฟเวอร์ได้ |
StopManagingServable (const ServableId & id) | Status บอกผู้จัดการให้หยุดจัดการเสิร์ฟนี้ |
UnloadServable (const ServableId & id, DoneCallback done_callback) | void ยกเลิกการโหลดเซิร์ฟเวอร์ด้วย ID นี้ และอัปเดตแผนที่ที่ให้บริการด้วย |
โครงสร้าง | |
---|---|
tensorflow :: การให้บริการ :: BasicManager :: ตัวเลือก | ตัวเลือกการกำหนดค่าและวัตถุ pluggable ที่จะถูกนำมาใช้โดย BasicManager |
ประเภทสาธารณะ
DoneCallback
std::function< void(const Status &status)> DoneCallback
โทรกลับเมื่อสิ้นสุด {Load,Unload}Servable()
เราส่งต่อสถานะของการดำเนินการไปยังการโทรกลับ
พรีโหลดเบ็ด
std::function< void(const ServableId &)> PreLoadHook
คลาสเพื่อน
test_util::BasicManagerTestAccess
friend class test_util::BasicManagerTestAccess
ฟังก์ชั่นคงที่สาธารณะ
สร้าง
Status Create( Options options, std::unique_ptr< BasicManager > *manager )
งานสาธารณะ
ยกเลิกโหลดได้ลองใหม่
void CancelLoadServableRetry( const ServableId & id )
ยกเลิกการลองใหม่โหลด servable ระหว่าง LoadServable ()
ไม่ทำอะไรเลยถ้าไม่มีการจัดการเซิร์ฟเวอร์
หากการลองใหม่ถูกยกเลิก เซิร์ฟเวอร์จะเข้าสู่สถานะขึ้นอยู่กับ Load() ล่าสุดที่เรียกใช้ หาก Load() ครั้งล่าสุดสำเร็จ มันจะอยู่ในสถานะ kReady อย่างอื่นใน kError
GetAdditionalServableState
T * GetAdditionalServableState( const ServableId & id )
ข้อกำหนด: ผู้จัดการรายนี้ควรได้รับการจัดการเซิร์ฟเวอร์นี้แล้ว มิฉะนั้นเราจะส่งคืน nullptr
รายละเอียด | |
---|---|
คืนสินค้า | สถานะเพิ่มเติมสำหรับเสิร์ฟ คืนค่า nullptr หากไม่มีการตั้งค่าสถานะเพิ่มเติม หรือมีประเภทที่ไม่ตรงกันระหว่างสิ่งที่ตั้งค่ากับสิ่งที่ต้องการ |
GetAvailableUntypedServableHandles
virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override
GetManagedServableNames
std::vector< string > GetManagedServableNames() const
รายละเอียด | |
---|---|
คืนสินค้า | ชื่อของเซิร์ฟเวอร์ทั้งหมดที่จัดการโดยผู้จัดการรายนี้ ชื่อจะไม่ซ้ำกันและไม่อยู่ในลำดับใดโดยเฉพาะ |
GetManagedServableStateSnapshot
optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot( const ServableId & id )
ข้อกำหนด: ผู้จัดการรายนี้ควรได้รับการจัดการเซิร์ฟเวอร์นี้แล้ว มิฉะนั้นเราจะคืนค่า nullopt
รายละเอียด | |
---|---|
คืนสินค้า | สแน็ปช็อตสถานะของ servable-id ที่จัดการโดยผู้จัดการรายนี้ หากมี |
GetManagedServableStateSnapshots
std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots( const string & servable_name ) const
T คือประเภทสถานะเพิ่มเติม หากมี
รายละเอียด | |
---|---|
คืนสินค้า | สแนปชอตสถานะของเซิร์ฟเวอร์ที่เสิร์ฟได้ทั้งหมดของสตรีมหนึ่งๆ ที่จัดการโดยผู้จัดการรายนี้ |
GetUntypedServableHandle
virtual Status GetUntypedServableHandle( const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle ) override
ListAvailableServableIds
virtual std::vector< ServableId > ListAvailableServableIds() const override
รับรายการรหัสที่แสดงได้ทั้งหมด เช่น
สามารถดึงข้อมูลเหล่านี้ได้โดยใช้ GetServableHandle
โหลดได้
void LoadServable( const ServableId & id, DoneCallback done_callback )
โหลดเซิร์ฟเวอร์ด้วย ID นี้ และอัปเดตแผนที่ที่ให้บริการด้วย
โทร done_callback กับ ok IFF servable ถูกโหลดประสบความสำเร็จอื่น ๆ ผลตอบแทนที่มีสถานภาพเป็นข้อผิดพลาด
หากใช้ thread-pool เมธอดนี้จะเปลี่ยนสายรัดที่ใช้งานได้เป็นสถานะ kLoading กำหนดเวลาโหลดและส่งคืน มิฉะนั้นจะโหลดจนเสร็จก่อนส่งคืน
กำหนดผู้จัดการนี้ควรได้รับการจัดการ servable อย่างนี้แล้วมันจะโหลดอื่นที่เราเรียก done_callback กับสถานะข้อผิดพลาด อย่าเรียกสิ่งนี้หลายครั้งบนเซิร์ฟเวอร์เดียวกัน มีเพียงคนเดียวเท่านั้นที่จะสำเร็จ และที่เหลือจะล้มเหลวโดยมีสถานะข้อผิดพลาด
จัดการได้
Status ManageServable( ServableData< std::unique_ptr< Loader >> servable )
เริ่มจัดการเสิร์ฟ
ส่งกลับข้อผิดพลาดหากได้รับบริการที่มีการจัดการอยู่แล้ว
หาก servable อยู่ในสถานะที่ผิดพลาดวิธีนี้ไม่ได้กลับข้อผิดพลาด แทน, ผู้จัดการยอมรับ servable, วางไว้ในสถานะ kError (พร้อมการแจ้งเตือนที่ส่งไปยังบัสเหตุการณ์) แล้วหยุดจัดการทันที ลักษณะการทำงานนี้ช่วยอำนวยความสะดวกในการจัดการข้อผิดพลาดที่เกิดขึ้นในแหล่งที่มา (เช่น เส้นทางของไฟล์ที่ไม่ถูกต้องไปยังข้อมูลที่ให้บริการ) และข้อผิดพลาดที่เกิดขึ้นในตัวจัดการ
ManageServableWithAdditionalState
Status ManageServableWithAdditionalState( ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state )
คล้ายกับวิธีการข้างต้น แต่ผู้โทรซึ่งโดยปกติแล้วจะเป็นผู้จัดการอื่นที่สร้างขึ้นจากวิธีนี้สามารถเชื่อมโยงสถานะเพิ่มเติมกับเซิร์ฟเวอร์ได้
สถานะเพิ่มเติมอาจเป็น ACL หรือข้อมูลเมตาตลอดอายุการใช้งานสำหรับเซิร์ฟเวอร์นั้น ความเป็นเจ้าของของรัฐถูกโอนไปยังชั้นนี้
StopManagingServable
Status StopManagingServable( const ServableId & id )
บอกผู้จัดการให้หยุดจัดการเสิร์ฟนี้
กำหนดให้เซิร์ฟเวอร์ต้องได้รับการจัดการและสถานะของเซิร์ฟเวอร์ต้องอยู่ใน {kNew, kError, kDisabled}
UnloadServable
void UnloadServable( const ServableId & id, DoneCallback done_callback )
ยกเลิกการโหลดเซิร์ฟเวอร์ด้วย ID นี้ และอัปเดตแผนที่ที่ให้บริการด้วย
โทร done_callback กับ ok IFF servable ถูกถอดประสบความสำเร็จอื่น ๆ ผลตอบแทนที่มีสถานภาพเป็นข้อผิดพลาด
หากใช้ thread-pool เมธอดนี้จะเปลี่ยนสายรัดที่ใช้งานได้เป็นสถานะ kQuiescing กำหนดเวลายกเลิกการโหลดและส่งคืน มิฉะนั้นจะยกเลิกการโหลดจนเสร็จก่อนส่งคืน
กำหนดผู้จัดการนี้ควรจะมีการโหลดและทำนี้สามารถใช้ได้ servable, เพื่อให้มีการถอดสายอื่น done_callback กับสถานะข้อผิดพลาด อย่าเรียกสิ่งนี้หลายครั้งบนเซิร์ฟเวอร์เดียวกัน มีเพียงคนเดียวเท่านั้นที่จะสำเร็จ และที่เหลือจะล้มเหลวโดยมีสถานะข้อผิดพลาด
~ผู้จัดการขั้นพื้นฐาน
~BasicManager() override
หากกำหนดค่าให้ใช้ load/unload thread-pool ให้รอจนกว่าการโหลดและยกเลิกการโหลดตามกำหนดเวลาทั้งหมดจะเสร็จสิ้น จากนั้นจะทำลายชุดของเธรด