Visão geral sobre predições

Hospede modelos treinados de machine learning na nuvem e use o AI Platform Prediction para inferir valores desejados para dados novos. Esta página aborda a hospedagem e a previsão de modelos e apresenta considerações que você deve ter em mente para seus projetos.

Como funciona

O AI Platform Prediction gerencia recursos de computação na nuvem para executar seus modelos. É possível solicitar predições dos modelos e receber valores desejados previstos para eles. Veja abaixo o processo de configuração para fazer predições na nuvem:

  1. Exporte o modelo como artefatos que podem ser implantados no AI Platform Prediction.

  2. Crie um recurso de modelo no AI Platform Prediction. Depois, crie uma versão do modelo salvo.

    Se você estiver implantando uma rotina de previsão personalizada, também precisará fornecer o código a ser executado no momento da previsão.

  3. Formate os dados de entrada para a previsão e solicite-a on-line ou em lote.

  4. Quando você usa a predição on-line, o modelo salvo é executado pelo serviço e as predições solicitadas são retornadas como mensagem de resposta para a chamada.

    • A versão do modelo é implantada na região que você especificou quando criou o modelo.
    • Geralmente, a versão do modelo que você mais utiliza costuma ficar pronta para uso. Mas isso não é garantido.

    Ao usar a predição em lote, que é apenas compatível com modelos do TensorFlow, o processo é um pouco mais complicado:

    1. O serviço de predição aloca recursos para executar o job. Isso inclui um ou mais nós de predição.

    2. Esse serviço restaura o gráfico do TensorFlow em cada nó alocado.

    3. Os dados de entrada são distribuídos pelo serviço de predição nos nós alocados.

    4. O gráfico é executado em cada nó e as predições são salvas em um local do Cloud Storage especificado por você.

    5. Após o processamento de todos os dados de entrada, o job é encerrado pelo serviço e os recursos alocados para ele são liberados.

Implantação do modelo

O AI Platform Prediction hospeda seus modelos para que você faça previsões neles a partir da nuvem. O processo de hospedagem de um modelo salvo é chamado de implantação. O serviço de predição gerencia a infraestrutura necessária para executar o modelo em escala e o disponibiliza para solicitações de predição on-line e em lote. Esta seção descreve a implantação do modelo.

Sobre modelos e versões

O AI Platform Prediction organiza os modelos treinados usando recursos chamados modelos e versões. Um modelo é uma solução de machine learning. Por exemplo, é possível criar um modelo denominado census para conter todo o trabalho em um modelo de machine learning do Censo dos EUA. A entidade que você cria, denominada census, é um contêiner de implementações reais do modelo de machine learning, ou seja, versões.

O desenvolvimento de um modelo de machine learning é um processo iterativo. Por isso, o paradigma do recurso do AI Platform Prediction é configurado com o pressuposto de que você fará várias versões de cada modelo de machine learning. Essa terminologia pode ser confusa, porque um recurso de modelo do AI Platform Prediction não é um modelo de machine learning em si. No AI Platform Prediction, um modelo é um contêiner das versões do modelo de machine learning.

O que há em uma versão?

O "modelo" que você implanta no AI Platform Prediction como uma versão consiste em um ou mais artefatos produzidos pelo treinamento com frameworks hospedados, TensorFlow, scikit-learn ou XGBoost. Não importa se você treinou o modelo na nuvem usando o AI Platform ou em outro lugar.

Também é possível implantar uma rotina de predição personalizada (Beta). Nesse caso, é possível fornecer a versão do modelo com código e artefatos de treinamento adicionais para lidar com solicitações de predição.

Variações entre versões

As versões que você cria para qualquer recurso de modelo são arbitrárias. Você pode usar o mesmo recurso de modelo, mesmo que altere completamente o modelo de machine learning entre as versões. Um modelo é uma ferramenta organizacional que você pode usar do jeito que fizer sentido para a situação.

É comum, especialmente depois que você tiver uma versão em produção, usá-lo para manter as entradas e saídas iguais entre as versões do modelo. Isso permite alternar as versões sem precisar alterar outra estrutura do aplicativo que você tenha construído em torno do modelo. Também facilita o teste de novas versões com dados existentes.

Versão padrão

Para todo modelo que tenha pelo menos uma versão, há uma padrão que é definida quando a primeira versão é criada. Se você solicitar previsões especificando apenas um nome de modelo, o AI Platform Prediction usará a versão padrão dele.

A única vez em que o serviço define automaticamente a versão padrão é quando você cria a primeira. É possível definir manualmente como padrão qualquer versão posterior. Basta chamar projects.models.versions.setDefault, também exposto como gcloud ai-platform versions set-default e como uma opção na lista "Versões" da página "Detalhes do modelo" no Console do Google Cloud. Para acessar essa página, clique no modelo na lista em "Modelos". Isso permite que você, por exemplo, use uma versão padrão estável para atender predições para produção enquanto testa versões mais recentes sem criar um recurso de modelo dedicado para teste.

Como nomear modelos e versões

Os nomes de modelos e versões precisam:

  • conter apenas letras maiúsculas e minúsculas, números e sublinhados;
  • começar com uma letra;
  • conter no máximo 128 caracteres;
  • ser exclusivos dentro de um determinado projeto (para modelos) ou modelo (para versões).

Não há regras para nomes além desses requisitos técnicos, mas há algumas práticas recomendadas:

  • Nomes de modelos precisam ser descritivos e específicos. Talvez seja necessário retirá-los de listas com muitos nomes em registros ou relatórios.
  • Escolha nomes de versões curtos e simples. É mais fácil identificar "v1" em uma lista de recursos do que "2017_01_29T13_54_58", por exemplo.

Limites de modelos e versões

Para saber quantos modelos e versões é possível criar em um projeto do Google Cloud, consulte Cotas de recursos.

Parâmetros de implantação de modelos

O AI Platform Prediction precisa de algumas informações para criar a versão de modelo. Há também algumas opções para configurar. Nesta seção, os parâmetros dos dois tipos são descritos. Esses parâmetros são definidos no objeto Version ou adicionados por conveniência no comando gcloud ai-platform versions create.

Nome da versão
Um nome para a nova versão que é exclusivo entre os nomes de outras versões do modelo.
Descrição
É possível incluir uma descrição para a versão. No momento, a descrição só é fornecida quando você recebe as informações da versão com a API. Nem a Google Cloud CLI nem o console do Google Cloud exibem a descrição.
URI de implantação
É preciso fornecer o URI do local do Cloud Storage em que o SavedModel está armazenado. O AI Platform Prediction extrai o modelo desse local e o implanta. Esse parâmetro é chamado de --origin no comando gcloud ai-platform versions create. Se você implantar uma rotina de previsão personalizada (Beta), forneça o URI de um diretório do Cloud Storage que contém todos os artefatos que a versão de modelo usa para previsão, e não apenas um SavedModel.
Versão do ambiente de execução
O AI Platform Prediction usa a versão do ambiente de execução estável mais recente para implantar a versão de modelo, a menos que você especifique uma outra compatível. A versão de ambiente de execução determina principalmente a versão do TensorFlow que o serviço de previsão usa para executar o modelo. Ao executar um job de predição em lote, você tem a opção de modificar a versão do ambiente de execução atribuída. A previsão on-line sempre usa a versão do ambiente de execução definida quando a versão de modelo é implantada.
Escalonamento manual

É possível especificar o número de nós de predição que continuam em execução na versão do modelo. Consulte a seção sobre dimensionamento para mais informações.

Bucket de preparo

Se você estiver implantando o modelo com a Google Cloud CLI, use um SavedModel no computador local. A ferramenta prepara o modelo no local do Cloud Storage que você especificou antes de implantá-lo no AI Platform Prediction.

Alterações de gráfico para previsão

Você pode ter incluído operações do TensorFlow no gráfico de computação que foram úteis principalmente no contexto de treinamento. Depois de treinar o modelo, você pode remover essas operações do gráfico antes de exportar a versão final.

Boa parte da orientação dada na página de desenvolvimento do aplicativo de treinamento visa a experiência de predição. Em alguns casos, essas são as alterações que você faz no modelo quando a maior parte do treinamento está concluída e você está pronto para começar a implantar versões.

Como receber predições

Você pode enviar novos dados às versões do modelo implantadas para receber predições. As seções a seguir descrevem importantes considerações sobre predição.

Predição on-line versus predição em lote

Saiba mais sobre as diferenças entre as predições on-line e em lote.

Noções básicas sobre nós de previsão e alocação de recursos

O AI Platform Prediction mede em horas de uso do nó o volume de processamento que você consome na previsão. Esta seção descreve esses nós e como eles são alocados para os diferentes tipos de previsão.

É mais fácil pensar em um nó como uma máquina virtual (VM, na sigla em inglês), mesmo que ele seja implementado com um mecanismo diferente de uma VM tradicional. Cada nó é provisionado com um volume definido de memória e potência de processamento. Ele também tem uma imagem de sistema operacional e uma configuração de software definida que são necessárias para executar o modelo e receber predições.

Tanto a on-line como a em lote executam o nó com processamento distribuído, de modo que uma determinada solicitação ou job possa usar vários nós simultaneamente. Você é cobrado pelo uso total do nó por minuto, usando-se uma taxa por hora. Por exemplo, executar dois nós por dez minutos custa o mesmo que executar um nó por vinte minutos. A predição on-line e em lote aloca os nós de modos diferentes, o que pode afetar substancialmente o que será cobrado de você.

Alocação de nós para predição em lote

O serviço de predição em lote escalona o número de nós usados para minimizar o tempo decorrido na execução do job. Para isso, o serviço:

  • aloca alguns nós para processar o job quando você o inicia;

  • faz o escalonamento do número de nós durante o job, na tentativa de otimizar a eficiência. Como leva tempo para cada nó ser iniciado, o serviço tenta alocar apenas os nós suficientes, para que o tempo de inicialização seja compensado pela redução do tempo decorrido;

  • encerra os nós assim que o job é concluído.

É possível simular o escalonamento de um job de previsão em lote especificando o número máximo de nós que serão usados. Geralmente, você quer o máximo de nós utilizados pelo serviço, mas o uso de nós está sujeito à política de cotas do AI Platform Prediction. Talvez seja necessário limitar o número de nós alocados a um job específico, especialmente se você compartilhar o projeto com outras pessoas e possivelmente executar jobs (de treinamento e previsão) simultâneos.

Alocação de nós para previsão on-line

O serviço de previsão on-line escalona o número de nós usados para maximizar a quantidade de solicitações processadas sem gerar excesso de latência. Para isso, o serviço:

  • aloca alguns nós na primeira solicitação de predições, após uma longa pausa entre as solicitações;

  • faz o escalonamento do número de nós em resposta ao tráfego de solicitações, adicionando nós quando o tráfego aumenta e removendo quando há menos solicitações;

  • coloca à disposição pelo menos um nó pronto, durante vários minutos, para processar solicitações mesmo quando não há nenhuma para processar. O estado pronto garante que o serviço possa atender imediatamente cada predição;

  • reduz a zero o número de nós quando a versão do modelo permanece vários minutos sem uma solicitação de predição.

Depois que o serviço reduz a zero o número de nós ou quando ocorre um pico repentino no tráfego, pode demorar alguns segundos ou minutos até que os nós sejam inicializados para atender uma solicitação. O tempo de inicialização depende do tamanho da versão do seu modelo. Sendo assim, um tempo limite do cliente pode resultar na eliminação de solicitações até que os novos nós sejam inicializados e/ou em maior latência durante esse período de tempo.

Para garantir uma resposta rápida e a qualquer hora, especifique um número mínimo de nós que o serviço precisa manter de prontidão. Para isso, configure a opção minNodes na versão de modelo. Essa configuração pode aumentar o custo porque os nós são pagos mesmo quando nenhuma previsão é fornecida.

Limitações do escalonamento automático

Com o escalonamento automático do AI Platform Prediction na previsão on-line, você garante taxas variáveis de solicitações de previsão e reduz os custos. No entanto, ele não é ideal para todas as situações. O serviço pode não ser capaz de ativar os nós rápido o suficiente para acompanhar os grandes picos de tráfego de solicitações. Se o tráfego tem picos altos regularmente, e uma latência baixa confiável é importante para o aplicativo, talvez convenha fazer o escalonamento manual.

Como usar o escalonamento manual

Você pode simular o escalonamento de predição on-line para uma versão de modelo especificando um número de nós para continuar em execução, independentemente do tráfego. Definir o número de nós manualmente na verdade impede que o serviço faça o escalonamento, o que significa que o número de nós que você especifica estará sempre pronto, e você será cobrado continuamente por eles. Isso não é recomendável, a menos que o número de solicitações que o modelo recebe oscile de tal forma que torne o trabalho do dimensionamento automático ineficiente. Para definir o número de nós a ser usado, configure manualScaling no objeto Version que será transmitido para projects.models.versions.create.

Escalonamento de várias zonas

Se sua versão usa um tipo de máquina N1 do Compute Engine e você define autoScaling.minNodes ou manualScaling.nodes como 2 ou superior (dependendo se você usa escalonamento automático ou manual), os nós de previsão serão executados em várias zonas na mesma região. Isso garante disponibilidade contínua se houver interrupção em uma das zonas.

Dados de entrada de previsão

Os dados que você usa para receber predições são dados novos que assumem a mesma forma que os dados usados no treinamento. Tanto a predição on-line como a em lote usam os mesmos dados (recursos do modelo), mas elas exigem formatos diferentes, dependendo do tipo de predição e da interface que você usa. Esses formatos estão resumidos na tabela a seguir e descritos em mais detalhes nas seções abaixo:

Tipo e interface de predição Formato de entrada compatível
Lote com chamada de API Arquivo de texto com strings de instância JSON ou TFRecord (pode ser compactado)
Lote com a CLI gcloud Arquivo de texto com strings de instância JSON ou TFRecord (pode ser compactado)
On-line com chamada de API Mensagem de solicitação JSON
On-line com CLI gcloud Arquivo de texto com strings de instância JSON ou CSV

Strings JSON de instâncias

O formato básico das predições on-line e em lote é uma lista de tensores de dados de instância. Pode ser uma lista simples de valores ou membros de um objeto JSON, dependendo de como você configurou as entradas no aplicativo de treinamento:

Este exemplo mostra um tensor de entrada e uma chave de instância:

{"values": [1, 2, 3, 4], "key": 1}

A composição da string JSON pode ser complexa, contanto que siga estas regras:

  • O nível superior dos dados da instância precisa ser um objeto JSON, um dicionário de pares de chave-valor.

  • Os valores individuais em um objeto de instância podem ser strings, números ou listas. Não é possível incorporar objetos JSON.

  • As listas devem conter apenas itens do mesmo tipo (incluindo outras listas). Não é possível misturar strings e valores numéricos.

A seguinte string (formatada para fins de legibilidade) mostra um objeto contendo um rótulo e uma imagem, em que a imagem é uma matriz tridimensional de inteiros de 8 bits:

{
  "tag": "beach",
  "image": [
    [
      [138, 30, 66],
      [130, 20, 56],
      ...
    ],
    [
      [126, 38, 61],
      [122, 24, 57],
      ...
    ],
        ...
  ]
}

Se o modelo só recebe uma entrada, não é necessário incorporá-lo a um objeto JSON. Por exemplo, se você enviar um único tensor (vetor, neste caso) com quatro valores, não será necessário formatá-lo assim:

{"values": [1, 2, 3, 4]}

Você pode simplesmente formatar cada instância como uma lista:

[1, 2, 3, 4]
Dados binários na entrada de previsão

Os dados binários não podem ser formatados como as strings codificadas em UTF-8 compatíveis com JSON. Se houver dados binários nas entradas, você terá que usar a codificação base64 para representá-los. É necessária a seguinte formatação especial:

  • Sua string codificada precisa ser formatada como um objeto JSON com uma única chave chamada b64. No exemplo em Python a seguir, um buffer de dados JPEG brutos é codificado usando a biblioteca Base64 para fazer uma instância:

    {"image_bytes":{"b64": base64.b64encode(jpeg_data)}}
    
  • No código do modelo do TensorFlow, é preciso criar aliases para os tensores de entrada e saída para que terminem com "_bytes".

Dados de entrada de predição on-line

Transmita as instâncias de entrada de previsão on-line como o corpo da mensagem para a predict. Para formatar o corpo da solicitação e da resposta, consulte os detalhes da solicitação de previsão.

Em resumo: faça de cada instância um item em uma lista e nomeie o membro da lista como instances. Com isso, o exemplo acima de JSON de instância de dados simples fica assim:

{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}

Ao usar gcloud ai-platform projects predict para solicitar previsões on-line, você transmite um arquivo com o mesmo formato usado para a previsão em lote.

Dados de entrada de previsão em lote

Você fornece dados de entrada para predição em lote em um ou mais arquivos de texto contendo linhas de dados de instância JSON, conforme descrito acima. Um arquivo de entrada não contém cabeçalhos de coluna ou outra formatação além da sintaxe JSON simples.

{"image": [0.0, 0.0, ... ], "key": 0}
{"image": [0.0, 0.0, ... ], "key": 1}
{"image": [0.0, 0.0, ... ], "key": 2}

Chaves de instância

O AI Platform Prediction executa os jobs de previsão em lote usando o processamento distribuído. Isso significa que os dados são distribuídos por um cluster arbitrário de máquinas virtuais e processados em ordem imprevisível. Para poder corresponder as predições retornadas às instâncias de entrada, é necessário ter chaves de instâncias definidas. Uma chave de instância é um valor que cada instância tem e é exclusivo entre as instâncias em um conjunto de dados. A chave mais simples é um número de índice.

Você deve passar as chaves por meio do gráfico inalterado no aplicativo de treinamento. Se os dados ainda não têm chaves de instâncias, você pode adicioná-las como parte do pré-processamento de dados.

Versões de tempo de execução

À medida que novas versões do AI Platform Prediction são lançadas, os modelos desenvolvidos em versões anteriores podem se tornar obsoletos. Isso será particularmente pertinente se você chegar a uma versão modelo efetiva que permanece inalterada por um longo período. Você precisa ler a política de controle de versões do AI Platform Prediction e conhecer a versão do ambiente de execução do AI Platform Prediction usada para treinar suas versões de modelo.

Previsões e versões do ambiente de execução

Você precisa especificar uma versão compatível do ambiente de execução do AI Platform Prediction ao criar uma versão de modelo. Isso estabelece a configuração padrão da versão do modelo.

Especifique uma versão de ambiente de execução para usar ao iniciar um job de previsão em lote. Isso serve para acomodar o recebimento de previsões usando um modelo que não é implantado no AI Platform Prediction. Para um modelo implantado, use a versão do ambiente de execução padrão do modelo na solicitação do job. O uso de uma versão de ambiente de execução diferente provavelmente causará erros inesperados.

Por não ser possível solicitar previsões on-line de modelos de fora do AI Platform Prediction, não há uma opção para modificar a versão padrão do ambiente de execução na solicitação.

A versão de ambiente de execução padrão definida para uma versão de modelo não pode ser alterada. Para especificar uma versão de ambiente de execução diferente para uma versão de um modelo, implante uma versão nova com os mesmos artefatos de treinamento que você usou inicialmente.

Regiões e previsões

O Google Cloud usa regiões subdivididas em zonas para definir a localização geográfica dos recursos físicos de computação. Ao implantar um modelo de previsão usando o AI Platform Prediction, especifique a região padrão em que a previsão será executada.

Ao iniciar um job de previsão em lote, é possível especificar uma região para executar o job modificando a região padrão. As predições on-line são sempre atendidas pela região padrão definida para o modelo.

Para acessar as regiões disponíveis dos serviços do AI Platform Prediction, incluindo treinamento de modelos e previsão on-line/em lote, consulte o guia sobre as regiões.

Geração de registros de previsão

A previsão em lote gera registros de jobs que podem ser visualizados no Cloud Logging. Também será possível receber registros de solicitações de previsão on-line se você configurar o modelo para gerar esses registros ao criá-lo. É necessário especificar essa opção ao criar o recurso de modelo no AI Platform Prediction: ou todas as versões de um modelo geram registros de previsões on-line ou nenhuma delas gera.

É possível configurar a geração de registros de previsão on-line para um modelo. Basta definir onlinePredictionLogging como verdadeiro (True em Python) no recurso Model usado ao criar o modelo com projects.models.create. Se você usar a Google Cloud CLI para criar o modelo, inclua a sinalização --enable-logging ao executar gcloud ai-platform models create.

Como receber previsões de modelos não implantados

É possível solicitar uma previsão em lote usando um modelo que não foi implantado no serviço do AI Platform Prediction. Em vez de especificar um nome de versão ou modelo, é possível usar o URI de um local do Cloud Storage onde está armazenado o modelo que você quer executar.

Como um modelo não implantado não tem uma versão de ambiente de execução padrão estabelecida, é preciso defini-la explicitamente na solicitação do job.

De qualquer outro modo, um job de previsão em lote usando um modelo não implantado se comporta como qualquer outro job em lote.

Teste de modelo

Além de usar o serviço de previsão do AI Platform Prediction para hospedar seus modelos em produção, é possível testá-los com ele. Tradicionalmente, o teste do modelo é a etapa antes da preparação para implantar uma solução de machine learning. O objetivo é testar o modelo em um ambiente que seja próximo ao modo como será usado em situações do mundo real.

Lembre-se de que várias versões de um modelo podem ser implantadas simultaneamente no serviço. Isso significa que, se necessário, você poderá testar várias revisões do modelo de uma só vez. Isso também facilita a implantação de uma versão de produção do modelo, ao mesmo tempo em que a próxima revisão é testada. Tal como acontece com grande parte do desenvolvimento de aplicativos de machine learning, a disponibilidade de dados recentes muitas vezes é um fator de limitação. Você deve desenvolver estratégias para dividir os dados que tem e coletar novos dados para usar em testes.

A seguir