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

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

#include <basic_manager.h>

ช่วยจัดการวงจรชีวิตของ Servables รวมถึงการโหลด การให้บริการ และการขนถ่าย

สรุป

ผู้จัดการยอมรับ Servables ในรูปแบบของ Loaders

เราเริ่มจัดการเซิร์ฟเวอร์โดยใช้หนึ่งในวิธี ManageServable* คุณสามารถไปโหลด servable หลังจากนี้โดยการเรียก LoadServable () การโหลดจะทำให้สามารถให้บริการได้ เมื่อคุณตัดสินใจที่จะขนนั้นคุณสามารถเรียก UnloadServable () ในนั้นซึ่งจะทำให้ไม่สามารถใช้งานในการให้บริการแล้วขน servable

Servables จะถูกเก็บไว้จนถึง StopManagingServable () จะเรียกว่า ซึ่งช่วยให้ผู้จัดการระดับสูงกว่ามีข้อมูลเพิ่มเติมในการตัดสินใจว่าจะลืมเกี่ยวกับเซิร์ฟเวอร์เมื่อใดจึงจะปลอดภัย

BasicManager ติดตามทรัพยากร (เช่น RAM) ใช้โดย servables โหลดและเพียง แต่ช่วยให้การโหลด servables ใหม่ที่เหมาะสมกับภายในสระว่ายน้ำทรัพยากรโดยรวม

BasicManager สามารถกำหนดค่าการใช้ด้ายสระว่ายน้ำที่จะทำโหลดและยกเลิกการโหลด นี้จะทำให้ LoadServable () และ UnloadServable () วิธีการกำหนดเวลาในการโหลด / unloads มากกว่าการดำเนินการให้พวกเขาพร้อมกัน หากมีการโหลด/ยกเลิกการโหลดที่รอดำเนินการมากกว่าเธรดในกลุ่มเธรด เธรดเหล่านั้นจะถูกประมวลผลในลำดับ FIFO

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

ต้องใช้:

  1. การสั่งซื้อของสายวิธีการ - ManageServable () (และสายพันธุ์) -> LoadServable () -> UnloadServable () -> StopManagingServable ()
  2. อย่ากำหนดเวลาการโหลดพร้อมกันและการยกเลิกการโหลดของเซิร์ฟเวอร์เดียวกัน
  3. อย่าเรียกการโหลดหรือยกเลิกการโหลดหลายครั้งบนเซิร์ฟเวอร์เดียวกัน

คลาสนี้ปลอดภัยสำหรับเธรด

ตัวอย่างการใช้งาน:

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 ให้รอจนกว่าการโหลดและยกเลิกการโหลดตามกำหนดเวลาทั้งหมดจะเสร็จสิ้น จากนั้นจะทำลายชุดของเธรด