tensorflow :: portion:: Gestionnaire de base
Il s'agit d'une classe abstraite.#include <basic_manager.h>
Aide à gérer le cycle de vie des servables, y compris leur chargement, leur service et leur déchargement.
Résumé
Le gestionnaire accepte les servables sous forme de Loaders.
Nous commençons à gérer un servable via l'une des méthodes ManageServable*. Vous pouvez aller à charger le diffusable après en appelant LoadServable () . Le chargement rendra également le serveur disponible pour le service. Une fois que vous décidez de le décharger, vous pouvez appeler UnloadServable () sur elle, qui le rendre indisponible pour servir, puis décharger le diffusable.
Servables sont conservés jusqu'à ce que StopManagingServable () est appelée. Cela permet à un responsable de niveau supérieur disposant de plus d'informations de décider quand il est sûr d'oublier une servable.
BasicManager suit les ressources (RAM) utilisés par servables chargés, et ne permet de charger de nouvelles servables qui correspondent à la piscine d' ensemble des ressources.
BasicManager peut être configuré pour utiliser un fil piscine pour faire charge et décharge de lui. Cela rend le LoadServable () et UnloadServable () méthodes de planifier la charge / déchargements plutôt que de les exécuter de manière synchrone. S'il y a plus de chargements/déchargements en attente que de threads dans le pool de threads, ils sont traités dans l'ordre FIFO.
En présence de chargeurs qui surestiment les besoins en ressources de leurs servables et/ou ne lient les ressources de leurs servables qu'aux instances de périphérique, la simultanéité de chargement/déchargement peut être réduite en dessous de la taille du pool de threads. C'est parce que nous devrons peut-être attendre la fin du chargement/déchargement d'un serveur pour déterminer la disponibilité des ressources pour le chargement d'un autre serveur.
A BESOIN:
- Ordre des appels de méthode - ManageServable () (et variantes) -> LoadServable () -> UnloadServable () -> StopManagingServable () .
- Ne planifiez pas le chargement et le déchargement simultanés du même serveur.
- N'appelez pas load ou unload plusieurs fois sur le même serveur.
Cette classe est thread-safe.
Exemple d' utilisation:
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));
Héritage
Hérite de: tensorflow :: :: service ResponsableConstructeurs et destructeurs | |
---|---|
~BasicManager () S'il est configuré pour utiliser un pool de threads de chargement/déchargement, attend la fin de tous les chargements et déchargements planifiés, puis détruit l'ensemble de threads. |
Types publics | |
---|---|
DoneCallback | utilisantstd::function< void(const Status &status)> Rappel appelé à la fin de {Load,Unload}Servable(). |
PreLoadHook | utilisantstd::function< void(const ServableId &)> |
Cours d'amis | |
---|---|
test_util::BasicManagerTestAccess | friend class |
Fonctions statiques publiques | |
---|---|
Create ( Options options, std::unique_ptr< BasicManager > *manager) | Status |
Fonctions publiques | |
---|---|
CancelLoadServableRetry (const ServableId & id) | void Annule une nouvelle tentative de la charge pouvant être diffusés au cours de 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 > Obtient une liste de tous les identifiants utilisables disponibles, c'est-à-dire |
LoadServable (const ServableId & id, DoneCallback done_callback) | void Charge le serveur avec cet identifiant et met également à jour la carte de service. |
ManageServable (ServableData< std::unique_ptr< Loader >> servable) | Status Commence à gérer le servable. |
ManageServableWithAdditionalState (ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state) | Status Similaire à la méthode ci-dessus, mais les appelants, généralement d'autres gestionnaires construits sur celui-ci, peuvent associer un état supplémentaire au servable. |
StopManagingServable (const ServableId & id) | Status Indique au gestionnaire d'arrêter de gérer ce serveur. |
UnloadServable (const ServableId & id, DoneCallback done_callback) | void Décharge le serveur avec cet identifiant et met également à jour la carte de service. |
Structures | |
---|---|
tensorflow :: :: service BasicManager :: options | Les options de configuration et les objets connectables qui seront utilisés par le BasicManager . |
Types publics
TerminéRappel
std::function< void(const Status &status)> DoneCallback
Rappel appelé à la fin de {Load,Unload}Servable().
On passe le statut de l'opération au callback.
Crochet de précharge
std::function< void(const ServableId &)> PreLoadHook
Cours d'amis
test_util::BasicManagerTestAccess
friend class test_util::BasicManagerTestAccess
Fonctions statiques publiques
Créer
Status Create( Options options, std::unique_ptr< BasicManager > *manager )
Fonctions publiques
AnnulerChargerServableRéessayer
void CancelLoadServableRetry( const ServableId & id )
Annule une nouvelle tentative de la charge pouvant être diffusés au cours de LoadServable () .
Ne fait rien si le serveur n'est pas géré.
Si les nouvelles tentatives sont annulées, le servable passe dans un état dépendant du dernier Load() appelé. Si le dernier Load() a réussi, il sera dans l'état kReady, sinon dans kError.
GetAdditionalServableState
T * GetAdditionalServableState( const ServableId & id )
REQUIS : ce gestionnaire aurait déjà dû gérer ce serveur, sinon nous renvoyons nullptr.
Des détails | |
---|---|
Retour | l'état supplémentaire pour le servable. Renvoie nullptr s'il n'y a pas de configuration d'état supplémentaire ou s'il y a une incompatibilité de type entre ce qui a été configuré et ce qui est demandé. |
GetAvailableUntypedServableHandles
virtual std::map< ServableId, std::unique_ptr< UntypedServableHandle > > GetAvailableUntypedServableHandles() const override
GetManagedServableNames
std::vector< string > GetManagedServableNames() const
Des détails | |
---|---|
Retour | les noms de tous les serveurs gérés par ce gestionnaire. Les noms seront sans doublons et non dans un ordre particulier. |
GetManagedServableStateSnapshot
optional< ServableStateSnapshot< T > > GetManagedServableStateSnapshot( const ServableId & id )
REQUIS : ce gestionnaire aurait déjà dû gérer ce serveur, sinon nous renvoyons nullopt.
Des détails | |
---|---|
Retour | l'instantané d'état d'un servable-id particulier géré par ce gestionnaire, s'il est disponible. |
GetManagedServableStateSnapshots
std::vector< ServableStateSnapshot< T > > GetManagedServableStateSnapshots( const string & servable_name ) const
T est le type d'état supplémentaire, le cas échéant.
Des détails | |
---|---|
Retour | les instantanés d'état de tous les servables d'un flux particulier, gérés par ce gestionnaire. |
GetUntypedServableHandle
virtual Status GetUntypedServableHandle( const ServableRequest & request, std::unique_ptr< UntypedServableHandle > *untyped_handle ) override
ListAvailableServableIds
virtual std::vector< ServableId > ListAvailableServableIds() const override
Obtient une liste de tous les identifiants utilisables disponibles, c'est-à-dire
chacun d'eux peut être récupéré à l'aide de GetServableHandle.
ChargeServable
void LoadServable( const ServableId & id, DoneCallback done_callback )
Charge le serveur avec cet identifiant et met également à jour la carte de service.
Appels done_callback ok avec ssi le diffusable a été chargé avec succès, sinon retourne un état d'erreur.
Si vous utilisez un pool de threads, cette méthode fait passer le faisceau utilisable à l'état kLoading, planifie le chargement et renvoie, sinon elle termine le chargement avant de revenir.
EXIGE: Ce gestionnaire aurait dû gérer cette diffusable déjà, pour qu'il soit chargé, sinon nous appelons done_callback avec un statut d'erreur. N'appelez pas cela plusieurs fois sur le même serveur. Un seul d'entre eux réussira et le reste échouera avec un état d'erreur.
GérerServable
Status ManageServable( ServableData< std::unique_ptr< Loader >> servable )
Commence à gérer le servable.
Renvoie une erreur si un serveur est déjà géré.
Si diffusable est dans un état d'erreur, cette méthode ne renvoie pas d'erreur. Au lieu de cela, le gestionnaire accepte le servable, le met dans l'état kError (avec une notification envoyée au bus d'événements), puis arrête immédiatement de le gérer. Ce comportement facilite la gestion uniforme des erreurs qui se produisent dans les sources (par exemple, chemin de fichier invalide vers les données pouvant être servies) et celles qui se produisent dans le gestionnaire (par exemple, ressources insuffisantes pour charger le serveur).
GérerServableWithAdditionalState
Status ManageServableWithAdditionalState( ServableData< std::unique_ptr< Loader >> servable, std::unique_ptr< T > additional_state )
Similaire à la méthode ci-dessus, mais les appelants, généralement d'autres gestionnaires construits sur celui-ci, peuvent associer un état supplémentaire au servable.
Un état supplémentaire peut être une ACL ou des métadonnées de durée de vie pour ce serveur. La propriété de l'État est transférée à cette classe.
ArrêterGérerServable
Status StopManagingServable( const ServableId & id )
Indique au gestionnaire d'arrêter de gérer ce serveur.
Nécessite que le serveur soit actuellement géré et que son état soit {kNew, kError, kDisabled}.
UnloadServable
void UnloadServable( const ServableId & id, DoneCallback done_callback )
Décharge le serveur avec cet identifiant et met également à jour la carte de service.
Appels done_callback ok avec ssi le diffusable a été déchargé avec succès, sinon retourne un état d'erreur.
Si vous utilisez un pool de threads, cette méthode fait passer le faisceau utilisable à l'état kQuiescing, planifie le déchargement et renvoie, sinon elle termine le déchargement avant de revenir.
EXIGE: Ce gestionnaire aurait chargé et fait de cette disposition diffusable, pour être déchargé, les autres appellent done_callback avec un état d'erreur. N'appelez pas cela plusieurs fois sur le même serveur. Un seul d'entre eux réussira et le reste échouera avec un état d'erreur.
~BasicManager
~BasicManager() override
S'il est configuré pour utiliser un pool de threads de chargement/déchargement, attend la fin de tous les chargements et déchargements planifiés, puis détruit l'ensemble de threads.