Para implantar modelos treinados no AI Platform Prediction e usá-los para exibir previsões, primeiro é necessário exportá-los no formato SavedModel do TensorFlow.
Nesta página, você vê algumas considerações importantes para criar o SavedModel. Para informações mais detalhadas sobre como exportar para um SavedModel, leia o guia do TensorFlow para SavedModels e o guia do TensorFlow para salvar modelos Keras (ambos em inglês). Para mais detalhes sobre como implantar o SavedModel no AI Platform Prediction e exibir previsões, consulte o guia sobre como implantar modelos. Para informações gerais sobre o processo de previsão, consulte esta página.
Rotinas de previsão personalizadas
Outra maneira de implantar um SavedModel é criar e implantar uma rotina de previsão personalizada. Ela combina um SavedModel (ou um modelo treinado salvo de outra maneira) com outros artefatos de treinamento e com o código Python fornecido para personalizar a forma como o AI Platform Prediction processa solicitações de previsão. Por exemplo, é possível usar essa flexibilidade para pré-processar a entrada de predição antes que o modelo a faça.
Para mais informações, leia o guia sobre rotinas de predição personalizadas.
Noções básicas sobre grafos de treinamento e de exibição
Após treinar e exportar seu modelo como um SavedModel, há algumas etapas importantes a serem seguidas antes de receber previsões.
Há algumas diferenças importantes entre um gráfico de treinamento e um gráfico de serviço. Os gráficos de treinamento contêm recursos que não são apropriados para o serviço, como:
- leitores de arquivos;
- filas de entrada;
- camadas de saída;
- funções de perda;
- otimizadores.
O processo de veicular previsões e o de treinamento tem necessidades diferentes. Portanto, é recomendável exportar um gráfico separado especificamente para veicular as previsões.
Noções básicas sobre o SavedModel
Um SavedModel é o formato recomendado do TensorFlow para salvar modelos. Ele é obrigatório na implantação de modelos treinados do TensorFlow no AI Platform Prediction. Exportar o modelo treinado como SavedModel salva o grafo de treinamento com os recursos, variáveis e metadados dele em um formato que o AI Platform Prediction pode consumir e restaurar para previsões.
Depois de exportá-lo, você terá um diretório SavedModel com o conteúdo a seguir:
- os gráficos de treinamento, salvos nos buffers de protocolo do SavedModel
- Arquivos externos, chamados de recursos
- Variáveis, salvas como arquivos de checkpoint
Ao implantar o SavedModel no AI Platform Prediction, é necessário incluir o diretório completo, não apenas o arquivo de buffer de protocolo SavedModel que contém o grafo e os metadados dele. Geralmente, esse arquivo tem uma extensão .pb
ou .pbtxt
.
Com o SavedModel, você salva várias versões de um grafo que compartilha os mesmos recursos e variáveis (ou checkpoints). Por exemplo, desenvolva duas versões do mesmo grafo: uma para ser executada em CPUs e outra em GPUs.
Saiba mais sobre a estrutura de um diretório SavedModel (em inglês).
Como exportar de várias APIs TensorFlow
Há várias maneiras de exportar SavedModels do código de treinamento do TensorFlow. Na lista a seguir, você verá algumas maneiras diferentes que funcionam para várias APIs TensorFlow:
- Se você utilizou o Keras no treinamento, use
tf.keras.Model.save
para exportar um SavedModel (em inglês). - Se você usa um Estimator para treinamento, use
tf.estimator.Estimator.export_saved_model
para exportar um SavedModel (em inglês). - Caso contrário, use
tf.saved_model.save
ou usetf.saved_model.SavedModelBuilder
(tf.compat.v1.saved_model.Builder
no TensorFlow 2).
Compatibilidade com o AI Explanations
Se você quiser usar o AI Explanations com seu modelo, saiba mais sobre outros requisitos adicionais para o SavedModel.
Verificar e ajustar o tamanho do modelo
O SavedModel precisará ter até 500 MB se você quiser implantá-lo em uma versão de modelo que usa um tipo de máquina legado MLS1. Esse tamanho poderá ser de até 10 GB se você usar um tipo de máquina N1 do Compute Engine. Saiba mais sobre os tipos de máquinas para previsão on-line.
Esse limite de tamanho inclui todos os recursos e variáveis no diretório SavedModel, e não apenas o arquivo de buffer de protocolo do SavedModel em si (ou seja, saved_model.pb
ou saved_model.pbtxt
).
Para verificar o tamanho do modelo durante o desenvolvimento, exporte um SavedModel e verifique o tamanho do arquivo do diretório.
Se o SavedModel exceder o limite de 500 MB:
- inclua apenas o que você precisa para a previsão no grafo exportado;
- diminua a precisão dos pesos e dados para reduzir o tamanho do modelo.
Seguindo essas etapas, é possível deixar o SavedModel abaixo do limite de 500 MB e diminuir a latência das previsões. Os benefícios são melhor desempenho e não ter que solicitar e aguardar um aumento de cota.
Se você ainda precisar de mais cota, consulte Como solicitar um aumento de cota.
Criar o melhor gráfico de predição possível
O treinamento produz vários pontos de verificação que não são usados para veicular previsões. Faça o upload de um diretório livre desses artefatos, contendo apenas o modelo a ser implantado.
Por exemplo, se você for exportar resumos durante o processo de treinamento para visualização no TensorBoard, tenha certeza de que eles não estão incluídos no seu SavedModel. Esses resumos do TensorBoard não são necessários para um grafo de previsão.
Como reduzir a precisão para diminuir o tamanho do arquivo
Reduzir a precisão das variáveis e dos dados de entrada é uma compensação que reduz significativamente o tamanho do seu modelo, ainda que isso diminua também a precisão da previsão. Os dados de alta precisão são armazenados de modo menos econômico do que dados de baixa precisão. Os dados de baixa precisão são uma fonte de ruído. No entanto, uma rede neural pode "ignorar" esse ruído e ainda produzir previsões bastante precisas.
Se o uso desses métodos resultar em uma perda da acurácia de predição muito grande para seu caso de uso, tente solicitar um aumento de cota.
Reduza o tamanho do arquivo diminuindo o tamanho dos pesos. O padrão são números de ponto flutuante, difíceis de armazenar com eficiência. Esses pesos são os maiores contribuintes para o tamanho geral do arquivo do modelo.
Quantizar seus dados contínuos a fim de reduzir o tamanho do seu modelo em até 75% sem sacrificar uma quantidade significativa de precisão.
Use variáveis menos precisas. Por exemplo, altere o tipo de dados
dtype
(em inglês) deint64
paraint32
.Reduza o tamanho de outros atributos de entrada na pasta
assets
do diretório do SavedModel. Por exemplo, use tamanhos de vocabulário menores em dados de texto.Leia sobre técnicas para otimizar os modelos do TensorFlow para serviço e conheça exemplos de aplicação delas. As técnicas vinculadas serão aplicadas somente se você estiver usando o TensorFlow 1.
Ferramentas para inspecionar SavedModels e grafos
O TensorFlow fornece uma interface de linha de comando que pode ser usada para verificar aspectos do SavedModel, como formatação de entrada e SignatureDefs
.
Saiba mais sobre a CLI do SavedModel (em inglês).
É possível usar a ferramenta Graph Transform no TensorFlow para otimizar o modelo de implantação (páginas em inglês). Embora a explicação sobre o uso dessa ferramenta seja voltada à implantação em dispositivos móveis, também é possível usá-las para otimizar modelos para implantação em dispositivos não móveis.
Como criar funções de entrada de serviço
Se você exportar o SavedModel usando tf.keras.Model.save
, não será necessário especificar uma função de entrada de exibição.
Do contrário, defina uma função de entrada de exibição ao exportar o SavedModel. É possível fazer isso nos seguintes momentos do processo geral de treinamento:
- Durante a etapa final do processo de treinamento
- Como um processo separado após a conclusão do treinamento
Nos exemplos a seguir, você verá como fazer isso para um Estimator treinado. Veja mais informações sobre funções de entrada de exibição para o Estimator.
Criar grafos de exibição durante o treinamento
Essa etapa normalmente ocorre no final do processo de treinamento, mas ainda está vinculada a ele.
Defina uma função de entrada de serviço. Na sua função, verifique se a dimensão mais externa dos seus atributos é
None
. Isso corresponde ao tamanho do lote e é demonstrado abaixo ao definir o valor dos itens no seu dict de atributos usandotf.placeholder
. O código de exemplo a seguir vem da nossa amostra do Censo (em inglês):Exporte um SavedModel do Estimator usando
tf.estimator.Estimator.export_saved_model
(em inglês), transmitindo no caminho para o modelo como o parâmetroexport_dir_base
e o nome da função de entrada de exibição comoserving_input_fn
. No exemplo do Censo, o tipo de Estimator usado étf.estimator.DNNLinearCombinedClassifier
(em inglês).
Criar o grafo de serviço separadamente do treinamento
Se você já treinou seu modelo, pode conseguir previsões sem fazer outro treinamento. Este processo é muito semelhante à criação de um gráfico de serviço durante o treinamento. A principal diferença é que você cria o grafo de exibição em um script em Python separado que será executado após o fim do treinamento. A ideia básica é
construa a Estimator
com o mesmo model_dir
usado no treinamento e, em seguida,
ligar
tf.estimator.Estimator.export_saved_model
conforme descrito na seção anterior.
Defina uma função de entrada de exibição no script em Python, da mesma forma que ela foi definida no treinamento:
Ao criar o
Estimator
, configure o parâmetromodel_dir
para ser o mesmo usado no treinamento. Isso disponibiliza os checkpoints do modelo salvo anteriormente para oEstimator
.Por fim, use
Estimator
para chamartf.estimator.Estimator.export_saved_model
transmitindo o caminho para o modelo como o parâmetroexport_dir_base
; e o nome da função de entrada de exibição como o parâmetroserving_input_fn
.
Assinaturas e tags do TensorFlow
Se você exportar um SavedModel do
tf.keras
ou de um
estimador,
o gráfico exportado estará pronto para exibição por padrão.
Em outros casos, ao criar um grafo de previsão do TensorFlow, é preciso especificar os valores corretos para as tags e as assinaturas do grafo. O TensorFlow fornece constantes para esses valores, usados nas finalidades a seguir:
- Selecionar um gráfico no SavedModel para disponibilizar predições.
- Indicar que você está criando uma assinatura de predição para o gráfico.
As assinaturas definem as entradas e saídas do grafo. Ao criar uma assinatura do grafo de previsão, é preciso especificar uma constante de assinatura
válida como o parâmetro method_name
em
build_signature_def
(em inglês).
Para a previsão, a melhor opção costuma ser PREDICT_METHOD_NAME
.
Você precisa usar uma tag para especificar qual grafo no seu SavedModel é usado para fornecer previsões. Em add_meta_graph_and_variables
, adicione
tag_constants.SERVING
à lista de tags
.
Veja um exemplo de como criar um gráfico de predição usando as constantes corretas de tags e assinaturas.
A seguir
- Saiba como implantar o modelo exportado no AI Platform Prediction para exibir previsões.