tensorflow :: portion:: Chargeur

Il s'agit d'une classe abstraite.

#include <loader.h>

Une abstraction standardisée pour un objet qui gère le cycle de vie d'un serveur, y compris son chargement et son déchargement.

Résumé

Les servables sont des objets arbitraires qui servent des algorithmes ou des données qui utilisent souvent, mais pas nécessairement, un modèle appris par machine.

Un chargeur pour un objet diffusable représente une instance d'un flux de versions diffusables, tous partageant un nom commun (par exemple « my_servable ») et un nombre croissant de version, généralement représentant les paramètres du modèle mis à jour à partir des données tirées de formation fraîches.

Un chargeur devrait commencer dans un état non chargé, ce qui signifie qu'aucun travail n'a été fait pour se préparer à effectuer des opérations. Une instance typique qui n'a pas encore été chargée contient simplement un pointeur vers un emplacement à partir duquel ses données peuvent être chargées (par exemple un chemin de système de fichiers ou un emplacement réseau). La construction et la destruction d'instances devraient être relativement bon marché. Doivent faire des opérations d'initialisation coûteuse en charge () .

Les sous - classes peuvent éventuellement stocker un pointeur vers la source qui a pris naissance, car l' accès à l' état partagé sur plusieurs objets diffusables dans un courant pouvant être diffusés donné.

Les implémentations doivent s'assurer que les méthodes qu'elles exposent sont thread-safe, ou documentent et/ou coordonnent soigneusement leurs propriétés de thread-safe avec leurs clients pour garantir leur exactitude. Servables ne ont pas besoin de vous soucier de l' exécution simultanée de charge () / Unload () que l'appelant veillera à ce que ne se produise pas.

Héritage

Direct connus: Sous - classes tensorflow :: service :: ResourceUnsafeLoader

Constructeurs et destructeurs

~Loader ()
Le destructor ne sera jamais appelé sur un chargeur dont diffusable est actuellement chargé, à savoir

Fonctions publiques

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Estime les ressources qu'un serveur va utiliser.
Load ()
virtual Status
Récupère les données qui doit être chargé avant l' utilisation du diffusable renvoyé par diffusable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Similaire à la méthode ci - dessus, mais prend des métadonnées comme param, qui peut être utilisé par la mise en œuvre du chargeur approprié.
Unload ()=0
virtual void
Libère toutes les ressources attribuées au cours de la charge () (sauf peut - être des ressources partagées à travers servables qui sont encore nécessaires pour d' autres actifs ceux).
servable ()=0
virtual AnyPtr
Renvoie une interface opaque à l'objet servant sous-jacent.

Structures

tensorflow :: :: service Loader :: métadonnées

Les métadonnées se composent du ServableId.

Fonctions publiques

EstimerRessources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Estime les ressources qu'un serveur va utiliser.

IMPORTANT : L'implémentation de cette méthode doit obéir aux exigences suivantes, qui permettent au système serveur de raisonner correctement sur les servables pouvant être chargés en toute sécurité :

  1. L'estimation doit représenter une limite supérieure de la valeur réelle.
  2. Avant le chargement, l'estimation peut inclure des ressources qui ne sont liées à aucune instance de périphérique spécifique, par exemple la RAM sur l'un des deux GPU.
  3. Lorsqu'il est chargé, pour tous les appareils avec plusieurs instances (par exemple deux GPU), l'estimation doit spécifier l'instance à laquelle chaque ressource est liée.
  4. L'estimation doit être monotone non croissante, c'est-à-dire qu'elle ne peut pas augmenter dans le temps. Raisons pour lesquelles il diminue potentiellement avec le temps Retour
    une estimation des ressources que le serveur va consommer une fois chargé. Si le serveur a déjà été chargé, renvoie une estimation de l'utilisation réelle des ressources.

Charger

virtual Status Load()

Récupère les données qui doit être chargé avant l' utilisation du diffusable renvoyé par diffusable () .

Peut ne pas utiliser plus de ressources que l'estimation rapportée par EstimateResources () .

Si la mise en œuvre Load () , vous ne devez pas passer outre LoadWithMetadata () .

ChargerAvecMétadonnées

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Similaire à la méthode ci - dessus, mais prend des métadonnées comme param, qui peut être utilisé par la mise en œuvre du chargeur approprié.

Si vous surchargeons LoadWithMetadata () , parce que vous pouvez utiliser les métadonnées de façon appropriée, vous pouvez sauter remplaçant Load () .

Décharger

virtual void Unload()=0

Libère toutes les ressources attribuées au cours de la charge () (sauf peut - être des ressources partagées à travers servables qui sont encore nécessaires pour d' autres actifs ceux).

Le chargeur n'a pas besoin de revenir à l'état « nouveau » (c. -à- Load () ne peut pas être appelée après Unload () ).

utilisable

virtual AnyPtr servable()=0

Renvoie une interface opaque à l'objet servant sous-jacent.

L'appelant doit connaître le type précis de l'interface afin d'en faire un usage réel. Par example:

CustomLoader mise en œuvre:

class CustomLoader : public Loader {
 public:
  ...
  Status Load() override {
    servable_ = ...;
  }

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Au service de demande de l' utilisateur:

ServableHandle<CustomServable> handle = ...
CustomServable* servable = handle.get();
servable->...

Si diffusable () est appelée après succès Load () et avant Unload () , elle retourne valide, objet AnyPtr non nul. Si elle est appelée avant un succès Load () appel ou après Unload () , elle retourne AnyPtr nulle.

~Chargeur

virtual  ~Loader()=default

Le destructor ne sera jamais appelé sur un chargeur dont diffusable est actuellement chargé, à savoir

entre les appels ( avec succès) à charge () et Unload () .