Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

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 Loader para um objeto de serviço representa uma instância de um fluxo de versões de serviço, todas compartilhando um nome comum (por exemplo, "my_servable") e números de versão crescentes, geralmente representando parâmetros de modelo atualizados aprendidos de novos dados de treinamento.

Um Loader deve iniciar em um estado descarregado, o que significa que nenhum trabalho foi feito para se preparar para executar as 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 caras devem ser feitas em Load () .

As subclasses podem, opcionalmente, armazenar um ponteiro para a Fonte que o originou, para acessar o estado compartilhado entre vários objetos que podem ser servidos em um determinado fluxo que pode ser servido.

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. Os servidores não precisam se preocupar com a execução simultânea de Load () / Unload (), pois o chamador garantirá que isso não aconteça.

Herança

Subclasses diretamente conhecidas: tensorflow :: serving :: ResourceUnsafeLoader

Construtores e Destruidores

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

Funções públicas

EstimateResources (ResourceAllocation *estimate) const =0
virtual Status
Estima os recursos que um serviço utilizará.
Load ()
virtual Status
Busca todos os dados que precisam ser carregados antes de usar o servable retornado por servable () .
LoadWithMetadata (const Metadata & metadata)
virtual Status
Semelhante ao método acima, mas leva Metadados como um parâmetro, que pode ser usado pela implementação do carregador de forma adequada.
Unload ()=0
virtual void
Libera todos os recursos alocados durante Load () (exceto talvez para recursos compartilhados entre servables que ainda são necessários para outros ativos).
servable ()=0
virtual AnyPtr
Retorna uma interface opaca para o objeto servível subjacente.

Structs

tensorflow :: serving :: Loader :: Metadata

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á tiver sido carregado, retorna uma estimativa do uso real do recurso.

Carregar

virtual Status Load()

Busca todos os dados que precisam ser carregados antes de usar o servable retornado por servable () .

Não pode usar mais recursos do que a estimativa relatada por EstimateResources () .

Se estiver implementando Load () , você não precisa substituir LoadWithMetadata () .

LoadWithMetadata

virtual Status LoadWithMetadata(
  const Metadata & metadata
)

Semelhante ao método acima, mas leva Metadados como um parâmetro, que pode ser usado pela implementação do carregador de forma adequada.

Se você estiver substituindo LoadWithMetadata () , porque pode usar os metadados apropriadamente, pode ignorar a substituição de Load () .

Descarregar

virtual void Unload()=0

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

O carregador não precisa retornar ao "novo" estado (isto é, 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:

Implementação de CustomLoader:

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

  AnyPtr servable() override { return servable_; }

 private:
  CustomServable* servable_ = nullptr;
};

Atendendo solicitação do usuário:

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

Se servable () for chamado após Load () e antes de Unload () , ele retorna um objeto AnyPtr válido e não nulo. Se chamado antes de uma chamada Load () bem-sucedida ou depois de Unload () , ele retorna AnyPtr nulo.

~ Loader

virtual  ~Loader()=default

O destruidor nunca será chamado em um Loader cujo servable está atualmente carregado, ou seja,

entre chamadas (bem-sucedidas) para Load () e Unload () .