tensorflow :: servindo :: Carregador

Esta é uma classe abstrata.

#include <loader.h>

Uma abstração padronizada para um objeto que gerencia o ciclo de vida de um serviço, incluindo carregamento e descarregamento.

Resumo

Servables são objetos arbitrários que servem algoritmos ou dados que freqüentemente, embora não necessariamente, usam um modelo aprendido por máquina.

Um carregador para um objeto que possa ser veiculado representa um exemplo de um fluxo de versões veiculáveis, todos compartilhando um nome comum (por exemplo, "my_servable") e o aumento do número de versão, tipicamente representando parâmetros do modelo atualizados aprendidas a partir de dados de treinamento frescos.

Um carregador deve começar em um estado sem carga, o que significa que nenhum trabalho foi feito para se preparar para executar operações. Uma instância típica que ainda não foi carregada contém apenas um ponteiro para um local a partir do qual seus dados podem ser carregados (por exemplo, um caminho do sistema de arquivos ou local de rede). A construção e a destruição de instâncias devem ser razoavelmente baratas. Operações de inicialização caro deve ser feito em Load () .

Subclasses podem opcionalmente armazenar um ponteiro para a Fonte que o originou, para acessar o estado compartilhado entre vários objetos que possa ser veiculado em um determinado fluxo que possa ser veiculado.

As implementações precisam garantir que os métodos expostos sejam seguros para thread ou documentar e / ou coordenar cuidadosamente suas propriedades de segurança de thread com seus clientes para garantir a correção. Servables não precisa se preocupar com a execução simultânea de Load () / Unload () como o chamador irá garantir que isso não aconteça.

Herança

Dirigir Subclasses conhecidos: tensorflow :: servindo :: ResourceUnsafeLoader

Construtores e Destruidores

~Loader ()
O destruidor nunca será chamado em um carregador cujo que possa ser veiculado está atualmente carregado, ou seja,

Funções públicas

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Estima os recursos que um serviço utilizará.
Load ()
virtual Status
Obtém quaisquer dados que tem de ser carregados antes de usar a que possa ser veiculado retornado pelo que podem ser veiculados () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Semelhante ao método acima, mas leva metadados como um parâmetro, que pode ser utilizado pela implantação carregador apropriadamente.
Unload ()=0
virtual void
Libera quaisquer recursos alocados durante Load () (exceto talvez para recursos compartilhados entre servables que ainda são necessários para outros ativas).
servable ()=0
virtual AnyPtr
Retorna uma interface opaca para o objeto servível subjacente.

Structs

tensorflow :: servindo :: carregador :: Metadados

Os metadados consistem no ServableId.

Funções públicas

EstimateResources

virtual Status EstimateResources(
  ResourceAllocation *estimate
) const =0

Estima os recursos que um serviço utilizará.

IMPORTANTE: a implementação deste método deve obedecer aos seguintes requisitos, que permitem ao sistema de serviço raciocinar corretamente sobre quais serviços podem ser carregados com segurança:

  1. A estimativa deve representar um limite superior do valor real.
  2. Antes do carregamento, a estimativa pode incluir recursos que não estão vinculados a nenhuma instância de dispositivo específica, por exemplo, RAM em uma das duas GPUs.
  3. Enquanto carregado, para quaisquer dispositivos com várias instâncias (por exemplo, duas GPUs), a estimativa deve especificar a instância à qual cada recurso está vinculado.
  4. A estimativa deve ser monotonicamente não crescente, ou seja, não pode aumentar com o tempo. Razões para que diminua potencialmente ao longo do tempo Devoluções
    uma estimativa dos recursos que o serviço irá consumir depois de carregado. Se o serviço já foi carregado, retorna uma estimativa do uso real do recurso.

Carga

virtual Status Load()

Obtém quaisquer dados que tem de ser carregados antes de usar a que possa ser veiculado retornado pelo que podem ser veiculados () .

Pode usar sem mais recursos do que a estimativa relatado por EstimateResources () .

Se implementar Load () , você não tem que substituir LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Semelhante ao método acima, mas leva metadados como um parâmetro, que pode ser utilizado pela implantação carregador apropriadamente.

Se você está substituindo LoadWithMetadata () , porque você pode usar os metadados de forma adequada, você pode pular substituindo Load () .

Descarregar

virtual void Unload()=0

Libera quaisquer recursos alocados durante Load () (exceto talvez para recursos compartilhados entre servables que ainda são necessários para outros ativas).

O carregador não precisa retornar ao estado "novo" (ou seja, Load () não pode ser chamado após Unload () ).

servível

virtual AnyPtr servable()=0

Retorna uma interface opaca para o objeto servível subjacente.

O chamador deve saber o tipo preciso de interface para poder utilizá-la de fato. Por exemplo:

CustomLoader implementação:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Servindo solicitação do usuário:

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

Se que possa ser veiculado () é chamado após sucesso Load () e antes Unload () , ele retorna um não-nula de objeto válido, AnyPtr. Se for chamado antes de uma bem sucedida Load () chamada ou após Unload () , ele retorna AnyPtr nulo.

~ Loader

virtual  ~Loader()=default

O destruidor nunca será chamado em um carregador cujo que possa ser veiculado está atualmente carregado, ou seja,

entre as chamadas (de sucesso) para carregar () e Unload () .