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 :: ResourceUnsafeLoaderConstrutores 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:
- A estimativa deve representar um limite superior do valor real.
- 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.
- 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.
- 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
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 () .