टेंसरफ़्लो:: सेवारत:: बेसिक मैनेजर

यह एक अमूर्त वर्ग है।

#include <basic_manager.h>

लोडिंग, सर्विसिंग और अनलोडिंग सहित सर्वेबल्स के जीवनचक्र को प्रबंधित करने में मदद करता है।

सारांश

प्रबंधक लोडर के रूप में सर्वेबल स्वीकार करता है।

हम ManageServable* विधियों में से एक के माध्यम से एक सेवा योग्य का प्रबंधन शुरू करते हैं। आप को फोन करके इस के बाद servable लोड करने के लिए पर जा सकते हैं LoadServable () । लोड करने से सर्व करने योग्य भी उपलब्ध हो जाएगा। एक बार जब आप यह अनलोड करने के लिए निर्णय लेते हैं, आप कॉल कर सकते हैं UnloadServable () उस पर है, जो यह अनुपलब्ध सेवा करने के लिए कर देगा, तो servable उतारना।

Servables जब तक बनाए रखा जाता है () StopManagingServable कहा जाता है। यह एक उच्च स्तरीय प्रबंधक को अधिक जानकारी के साथ यह तय करने की अनुमति देता है कि किसी सर्व करने योग्य के बारे में भूलना सुरक्षित है।

BasicManager संसाधनों (जैसे रैम) लोड servables द्वारा प्रयोग किया जाता ट्रैक करता है, और केवल नए servables समग्र संसाधन पूल के भीतर फिट कि लोड हो रहा है की अनुमति देता है।

BasicManager यह लोड और अनलोड करने के लिए एक धागा पूल का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। इस बनाता है LoadServable () और UnloadServable () तरीकों उन्हें तुल्यकालिक को क्रियान्वित करने के बजाय लोड / अनलोड शेड्यूल करें। यदि थ्रेड पूल में थ्रेड से अधिक लोड/अनलोड लंबित हैं, तो उन्हें फीफो क्रम में संसाधित किया जाता है।

लोडर की उपस्थिति में जो अपने सर्वेबल्स की संसाधन जरूरतों का अधिक अनुमान लगाते हैं और/या केवल अपने सर्वेबल्स के संसाधनों को डिवाइस इंस्टेंस से बांधते हैं, लोड/अनलोड समेकन को थ्रेड-पूल आकार के नीचे कम किया जा सकता है। ऐसा इसलिए है क्योंकि हमें किसी अन्य सेवा योग्य को लोड करने के लिए संसाधन उपलब्धता को कम करने के लिए एक सर्व करने योग्य लोड/अनलोड समाप्त होने की प्रतीक्षा करनी पड़ सकती है।

आवश्यकता है:

  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 ()
यदि लोड/अनलोड थ्रेड-पूल का उपयोग करने के लिए कॉन्फ़िगर किया गया है, तो सभी शेड्यूल किए गए लोड और अनलोड समाप्त होने तक प्रतीक्षा करें और फिर थ्रेड के सेट को नष्ट कर दें।

सार्वजनिक प्रकार

DoneCallback का उपयोग करते हुए
std::function< void(const Status &status)>
कॉलबैक {लोड, अनलोड} सर्व करने योग्य () के अंत में कॉल किया गया।
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
इस आईडी के साथ सर्व करने योग्य लोड करता है, और सर्विंग मैप को भी अपडेट करता है।
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
इस आईडी के साथ सर्व करने योग्य को अनलोड करता है, और सर्विंग मैप को भी अपडेट करता है।

स्ट्रक्चर्स

tensorflow :: की सेवा :: BasicManager :: विकल्प

कॉन्फ़िग विकल्प और प्लगेबल ऑब्जेक्ट द्वारा उपयोग किया जाएगा BasicManager

सार्वजनिक प्रकार

हो गया कॉलबैक

std::function< void(const Status &status)> DoneCallback

कॉलबैक {लोड, अनलोड} सर्व करने योग्य () के अंत में कॉल किया गया।

हम ऑपरेशन की स्थिति को कॉलबैक में पास करते हैं।

प्रीलोडहुक

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 () ।

अगर सर्व करने योग्य प्रबंधित नहीं है तो कुछ भी नहीं करता है।

यदि पुनर्प्रयास रद्द कर दिए जाते हैं, तो सेवा योग्य अंतिम लोड () पर निर्भर राज्य में चला जाता है। यदि अंतिम लोड () सफल रहा, तो यह राज्य kReady में होगा, अन्यथा kError में।

अतिरिक्त सर्व करने योग्य स्थिति प्राप्त करें

T * GetAdditionalServableState(
  const ServableId & id
)

आवश्यकताएँ: इस प्रबंधक को पहले से ही इस सेवा योग्य का प्रबंधन करना चाहिए था, अन्यथा हम nullptr लौटाते हैं।

विवरण
रिटर्न
सेवा करने योग्य के लिए अतिरिक्त राज्य। यदि कोई अतिरिक्त राज्य सेटअप नहीं है या क्या सेटअप किया गया था और क्या मांगा जा रहा है, के बीच एक प्रकार का मेल नहीं है, तो नलप्टर लौटाता है।

GetAvailableUntypedServableHandles

virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override

प्रबंधित सर्व करने योग्य नाम प्राप्त करें

std::vector< string > GetManagedServableNames() const 

विवरण
रिटर्न
इस प्रबंधक द्वारा प्रबंधित सभी सर्वेबल के नाम। नाम डुप्लीकेट-मुक्त होंगे और किसी विशेष क्रम में नहीं होंगे।

GetManagedServableStateSnapshot

optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot(
  const ServableId & id
)

आवश्यकताएँ: इस प्रबंधक को पहले से ही इस सेवा योग्य का प्रबंधन करना चाहिए था, अन्यथा हम अशक्त लौटते हैं।

विवरण
रिटर्न
यदि उपलब्ध हो तो इस प्रबंधक द्वारा प्रबंधित एक विशेष सेवा योग्य-आईडी का राज्य स्नैपशॉट।

GetManagedServableStateSnapshots

std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots(
  const string & servable_name
) const 

टी अतिरिक्त-राज्य प्रकार है, यदि कोई हो।

विवरण
रिटर्न
इस प्रबंधक द्वारा प्रबंधित किसी विशेष स्ट्रीम के सभी सर्वेबल के राज्य स्नैपशॉट।

GetUntypedServableHandle

virtual Status GetUntypedServableHandle(
  const ServableRequest & request,
  std::unique_ptr< UntypedServableHandle > *untyped_handle
) override

सूची उपलब्ध सर्व करने योग्य आईडी

virtual std::vector< ServableId > ListAvailableServableIds() const override

सभी उपलब्ध सर्व करने योग्य आईडी की सूची प्राप्त करता है, अर्थात

इनमें से प्रत्येक को GetServableHandle का उपयोग करके पुनर्प्राप्त किया जा सकता है।

लोड करने योग्य

void LoadServable(
  const ServableId & id,
  DoneCallback done_callback
)

इस आईडी के साथ सर्व करने योग्य लोड करता है, और सर्विंग मैप को भी अपडेट करता है।

कॉल ठीक से done_callback iff servable सफलतापूर्वक लोड किया गया था, और रिटर्न एक त्रुटि स्थिति।

यदि थ्रेड-पूल का उपयोग करते हैं, तो यह विधि सेवा योग्य हार्नेस को kLoading स्थिति में स्थानांतरित करती है, लोड को शेड्यूल करती है और वापस आती है, अन्यथा यह लौटने से पहले लोड को पूरा करती है।

आवश्यक है: यह प्रबंधक चाहिए पहले से ही इस servable प्रबंध किया गया है, यह लोड करने के लिए के लिए, और हम एक त्रुटि स्थिति के साथ done_callback कहते हैं। इसे एक ही सर्व करने योग्य पर कई बार कॉल न करें। उनमें से केवल एक ही सफल होगा और शेष त्रुटि स्थिति के साथ विफल हो जाएगा।

प्रबंधित करने योग्य

Status ManageServable(
  ServableData< std::unique_ptr< Loader >> servable
)

सर्व करने योग्य का प्रबंधन शुरू करता है।

यदि पहले से प्रबंधित किया जा रहा है जो एक सर्व करने योग्य दिया गया है तो एक त्रुटि देता है।

यदि servable एक त्रुटि अवस्था में है, इस पद्धति में कोई त्रुटि वापस नहीं करता है। इसके बजाय, प्रबंधक सेवा योग्य को स्वीकार करता है, इसे राज्य kError (ईवेंट बस को भेजी गई अधिसूचना के साथ) में रखता है, और फिर तुरंत इसे प्रबंधित करना बंद कर देता है। यह व्यवहार स्रोतों में होने वाली त्रुटियों (उदाहरण के लिए सेवा योग्य डेटा के लिए अमान्य फ़ाइल पथ) और प्रबंधक में होने वाली त्रुटियों (उदाहरण के लिए उपलब्ध लोड करने के लिए अपर्याप्त संसाधन) की एक समान हैंडलिंग की सुविधा प्रदान करता है।

प्रबंधित करने योग्य के साथअतिरिक्त स्थिति

Status ManageServableWithAdditionalState(
  ServableData< std::unique_ptr< Loader >> servable,
  std::unique_ptr< T > additional_state
)

उपरोक्त विधि के समान, लेकिन कॉल करने वाले, आमतौर पर इसके शीर्ष पर बने अन्य प्रबंधक, अतिरिक्त राज्य को सर्व करने योग्य के साथ जोड़ सकते हैं।

उस सेवा योग्य के लिए अतिरिक्त राज्य एसीएल या आजीवन मेटाडेटा हो सकता है। राज्य का स्वामित्व इस वर्ग को हस्तांतरित कर दिया जाता है।

स्टॉप मैनेजिंग सर्व करने योग्य

Status StopManagingServable(
  const ServableId & id
)

प्रबंधक को इस सेवा योग्य का प्रबंधन बंद करने के लिए कहता है।

यह आवश्यक है कि वर्तमान में सर्व करने योग्य प्रबंधित किया जा रहा है और इसकी स्थिति {kNew, kError, kDisabled} में से एक है।

उतारने योग्य

void UnloadServable(
  const ServableId & id,
  DoneCallback done_callback
)

इस आईडी के साथ सर्व करने योग्य को अनलोड करता है, और सर्विंग मैप को भी अपडेट करता है।

कॉल ठीक से done_callback iff servable सफलतापूर्वक उतारा गया, और रिटर्न एक त्रुटि स्थिति।

यदि थ्रेड-पूल का उपयोग करते हैं, तो यह विधि सेवा योग्य हार्नेस को kQuiescing स्थिति में स्थानांतरित करती है, अनलोड को शेड्यूल करती है और वापस आती है, अन्यथा यह लौटने से पहले अनलोड को पूरा करती है।

आवश्यक है: यह प्रबंधक लोड और इस servable उपलब्ध कराया है, यह उतार दिया जाए, इसके लिए किसी और कॉल एक त्रुटि स्थिति के साथ done_callback जाना चाहिए था। इसे एक ही सर्व करने योग्य पर कई बार कॉल न करें। उनमें से केवल एक ही सफल होगा और शेष त्रुटि स्थिति के साथ विफल हो जाएगा।

~मूल प्रबंधक

 ~BasicManager() override

यदि लोड/अनलोड थ्रेड-पूल का उपयोग करने के लिए कॉन्फ़िगर किया गया है, तो सभी शेड्यूल किए गए लोड और अनलोड समाप्त होने तक प्रतीक्षा करें और फिर थ्रेड के सेट को नष्ट कर दें।