Práticas recomendadas para otimização de desempenho e custo para machine learning

Neste guia, você verá algumas práticas recomendadas para melhorar o desempenho e reduzir os custos das cargas de trabalho de machine learning (ML) no Google Cloud, desde a experimentação até a produção.

O diagrama a seguir mostra uma visualização típica de um ambiente de ML para experimentação e operacionalização.

Um ambiente de ML para experimentação e operacionalização, mostrando como o AI Platform Pipelines alimenta os serviços do Google Cloud e como o AI Platform Notebooks é usado para trabalhar individualmente com esses serviços.

O ambiente usa vários serviços de análise inteligentee Cloud AI em diferentes fases do processo de ML, ou seja, o seguinte:

Neste exemplo, o Cloud Storage é usado por esses serviços para armazenar e recuperar artefatos de ML.

Embora este guia se concentre no ambiente descrito no diagrama, o BigQuery ML pode ser mais eficiente e econômico do que usar o AI Platform se os dados de treinamento estiverem no BigQuery e você estiver usando modelos para predições em lote. Com o BigQuery ML, é possível criar e executar modelos de ML usando consultas SQL padrão, sem gerenciar infraestruturas.

Use o BigQuery ML para treinar modelos de regressão usando regressão linear, modelos de classificação usando regressão logística e modelos de árvore com o comando XGBoost, modelos de recomendação usando fatoração de matrizes, séries temporais usando ARIMA e clustering com k-means. Também é possível usar a instrução CREATE MODEL do BigQuery para importar modelos do TensorFlow. Além disso, o BigQuery ML fornece um conjunto de funções TRANSFORM para engenharia de atributos.

Experimentos com o AI Platform Notebooks

O AI Platform Notebooks permite gerenciar instâncias do JupyterLab por meio de um URL protegido e disponível publicamente. É possível criar uma instância usando uma das instâncias de VM de aprendizado profundo atuais que tenham as bibliotecas de ML e ciência de dados mais recentes pré-instaladas, com os drivers mais recentes. Como alternativa, é possível criar uma instância do AI Platform Notebooks com base em um contêiner personalizado para personalizar o ambiente do Notebooks de acordo com suas necessidades. O AI Platform Notebooks usa o TensorFlow Enterprise, uma distribuição otimizada que contém binários personalizados do TensorFlow e pacotes relacionados.

Comece com uma amostra dos dados

Para iterar rapidamente a baixo custo, comece com uma amostra dos seus dados em uma pequena instância do AI Platform Notebooks. Isso permite que você valide suposições, confirme suas hipóteses e identifique sua abordagem de modelo. Após essa fase, é possível escalonar verticalmente para treinar o modelo com o conjunto de dados completo, usando instâncias de computação e aceleradores mais eficientes.

Selecione o tipo de máquina que tem o equilíbrio ideal entre custo e desempenho

É possível escolher qualquer tipo de máquina para a instância do AI Platform Notebooks. Os tipos de máquina pertencem a famílias diferentes, cada uma selecionada para cargas de trabalho específicas, da computação de uso geral (E2, N1, N2 e N2D), à otimização de memória (M1 e M2), e a computação otimizada (C2). As cargas de trabalho comuns de treinamento de ML se encaixam nos tipos de máquina N1, em que é possível anexar muitos tipos de GPUs. A família de VMs A2 é baseada na GPU NVIDIA Ampere A100 Tensor Core e otimizada para grandes cargas de trabalho de ML e computação de alto desempenho (HPC, na sigla em inglês). As VMs A2 também são compatíveis com o NVIDIA MIG, que permite executar várias cargas de trabalho isoladas no mesmo hardware.

Crie contêineres derivados das imagens padrão de Deep Learning Containers

As imagens de Deep Learning Containers do AI Platform fornecem ambientes otimizados de ciência de dados para o framework selecionado, como PyTorch ou TensorFlow. As imagens também são compatíveis com drivers e bibliotecas de IA mais recentes da NVIDIA® CUDA-X para imagens de GPU (CUDA, cuDNN, NCCL2), e a biblioteca Intel® Math Kernel. Para mais informações sobre como criar ambientes personalizados de ciência de dados, consulte contêineres derivados.

Aproveite os aceleradores com eficiência

É possível adicionar e remover até oito GPUs NVIDIA® Tesla® nas instâncias do AI Platform Notebooks para acelerar as cargas de trabalho de ML. Enquanto P100 e V100 são aceleradores avançados, o uso de aceleradores K80 pode reduzir significativamente os custos, principalmente se a instância do AI Platform Notebooks estiver em execução por muito tempo, mas não utilizar a GPU pela maior parte desse tempo.

Melhore o desempenho de cargas de trabalho de várias GPUs

Use larguras de banda de rede maiores para treinar um modelo grande em um grande conjunto de dados. As GPUs V100 são oferecidas com conexões NVLink™ de alta velocidade para comunicação entre GPUs. Para mais informações, consulte Como otimizar o desempenho da GPU.

Trate o AI Platform Notebooks como instâncias temporárias

Não trate as instâncias como de longa duração. A menos que você esteja executando experimentos, a instância precisa ser desativada ou excluída. Se você desativar as instâncias, pagará apenas pelo armazenamento em disco. Se você excluir as instâncias, certifique-se de armazenar os dados no Cloud Storage ou no BigQuery, em vez de localmente na instância, mantendo seu Notebooks e código em um sistema de controle de origem.

Evite pagar por recursos não utilizados

Certifique-se de não usar recursos desnecessários ao executar instâncias temporárias do AI Platform Notebooks. É possível configurar uma rotina de encerramento automático quando a instância estiver inativa ou usar o recomendador de VM inativo para identificar discos permanentes e VMs inativas, com base em métricas de uso. Como os testes e o desenvolvimento tendem a ficar confinados em horários de funcionamento, também é possível automatizar e gerenciar o encerramento da VM em escala ao agendar instâncias do Compute Engine.

Considere o uso de VMs preemptivas

VMs preemptivas são executadas a um preço muito menor do que as instâncias normais e são adequadas para experimentos grandes de longa duração (lote). Por exemplo, Simulações de Monte Carlo. Também é possível adicionar GPUs às instâncias de VM preemptivas de aprendizado profundo com preços preemptivos menores para as GPUs. Observe que as VMs preemptivas não são recomendadas para experimentação interativa.

Monitore e melhore o uso da GPU

Para experiências de longa duração, configure o script de relatório de métricas da GPUe visualize os registros no Cloud Monitoring. Receba alertas sobre o uso da GPU configurando notificações do Cloud Monitoring. Quando você conhece as taxas de uso da GPU, é possível executar tarefas, como configurar grupos de instâncias gerenciados para escalonar automaticamente com base nas suas necessidades.

Preparação de dados com o BigQuery

O BigQuery é um armazenamento de dados em nuvem sem servidor, altamente escalonável e econômico. Normalmente, você organiza e armazena os dados no BigQuery, que são usados para treinar os modelos de ML. É possível usar o BigQuery para consultar e processar durante a análise exploratória de dados (EDA, na sigla em inglês), bem como para preparação de dados. Além das recomendações desta seção para otimizar os custos de armazenamento e processamento de consultas do BigQuery, consulte Práticas recomendadas de otimização de custos para o BigQuery.

Aproveite os preços do BigQuery

O preço fixo da taxa do BigQuery é a opção mais barata se você estiver gastando pelo menos US$ 10 mil por mês. A próxima opção mais barata é slots flexíveis. Para grandes cargas de trabalho de pré-processamento de ML, sugerimos não usar preços sob demanda porque a quantidade de dados é alta, mas a sobrecarga de computação normalmente é baixa.

Use o BigQuery para explorar e pré-processar grandes quantidades de dados

Durante a EDA, os dados geralmente são recuperados do BigQuery e enviados para uma instância do AI Platform Notebooks. No entanto, se você tiver um conjunto de dados grande, talvez isso não seja possível. Portanto, é melhor executar a análise e o processamento de dados no BigQuery e usar uma instância do AI Platform Notebooks para recuperar e visualizar os resultados. Da mesma forma, recomendamos que você pré-processe dados no BigQuery antes de recuperá-los para treinar seu modelo.

Use a API BigQuery Storage

Use a API BigQuery Storage para carregar os dados em DataFrames pandas na memória. A API oferece acesso rápido ao armazenamento gerenciado pelo BigQuery usando um protocolo baseado em RPC e otimizado para recuperar os dados. Se você estiver usando a biblioteca Python pandas, configure use_bqstorage_api como True ao chamar a função pandas.read_gbq.

Use o BigQueryClient no TensorFlow para ler os dados

Se você estiver treinando um modelo do TensorFlow e nenhum pré-processamento for necessário, leia os dados usando a classe tfio.bigquery.BigQueryClient. Essa classe estabelece uma conexão com o BigQuery e inicia uma sessão de leitura. Para mais informações, consulte Como ler dados do BigQuery do TensorFlow 2.0 com eficiência.

Particione tabelas para melhorar o desempenho e reduzir custos

Ao preparar dados para treinamento de ML, é possível particionar uma tabela com base no tempo de ingestão, data ou em qualquer coluna de carimbo de data/hora. Assim, use os dados em apenas uma partição específica para treinar o modelo. Cada partição é considerada separadamente para armazenamento de longo prazo. Portanto, essa abordagem reduz o custo do armazenamento e o tamanho do processamento da consulta.

Mantenha os dados apenas pelo tempo necessário

Configure o conjunto de dados padrão, a tabela ou a validade da partição e use instruções DDL para alterar as tabelas atuais e evitar custos de armazenamento de dados que não precisam ser preservados.

Preparação de dados com o Dataflow e o Apache Beam

É possível usar o Dataflow para executar uma ampla variedade de pipelines de processamento de dados que são implementados no Apache Beam. O Dataflow permite a análise de dados em escala e elimina a sobrecarga operacional das cargas de trabalho da engenharia de dados. Para mais informações, consulte Como processar dados agregados e em tempo real com o Dataflow.

As recomendações a seguir se concentram nos jobs em lote do Dataflow para a etapa de preparação de dados no ML.

Teste o Apache Beam interativo no AI Platform Notebooks

Antes de iniciar um job do Dataflow em escala, use o executor interativo do Apache Beam (Beta) com os notebooks do JupyterLab. Isso permite desenvolver pipelines de maneira iterativa em um conjunto de dados pequeno e validar a precisão do pipeline de maneira econômica.

Aproveite o Dataflow FlexRS

A programação flexível de recursos do Dataflow (FlexRS, na sigla em inglês) reduz os custos de processamento em lote ao usar técnicas de programação avançadas, o serviço Dataflow Shuffle e uma combinação de instâncias de máquina virtual (VM) preemptivas e VMs comuns.

Aproveite o Dataflow Shuffle

A operação Dataflow Shuffle baseada em serviços permite execução mais rápida, consumo mais eficiente de recursos de CPU, memória e disco permanente, além de melhor escalonamento automático e melhor tolerância a falhas. Jobs vinculados ao Shuffle que não usam o Dataflow Shuffle podem resultar em aumento no ambiente de execução e custo do job.

Use o tipo de máquina certo para a carga de trabalho

Se você estiver carregando módulos grandes (por exemplo, modelos do TensorFlow Hub) nos nós de trabalho no Dataflow, considere aumentar o tamanho das máquinas de trabalho para evitar problemas de falta de memória. É possível definir o tipo de máquina usando o parâmetro workerMachineType. Caso contrário, use um tipo de máquina menor para reduzir os custos.

Desative endereços IP públicos

Para ajudar a proteger sua infraestrutura de processamento de dados e reduzir os custos de rede, desative os endereços IP públicos. Por padrão, o Dataflow atribui endereços IP público e privado aos workers. Para alterar essa atribuição, use a opção usePublicIps ao criar um pipeline.

Carregue módulos para pré-processamento apenas uma vez

Carregue seus módulos apenas uma vez, e não toda vez que eles forem chamados para processar um ponto de dados. Quando você prepara dados para o ML, pode ser necessário fazer o download de módulos externos para a extração do recurso. Por exemplo, é possível aplicar essa técnica ao usar módulos do TensorFlow Hub (TF-Hub) (em inglês) para extrair embeddings de texto, conforme descrito em Como criar um sistema de correspondência por similaridade de embeddings em tempo real. Para carregar o modelo apenas uma vez, faça o download e instancie o modelo na função de configuração na classe que implementa a transformação beam.DoFn.

Escolha codificadores que fornecem bom desempenho

Use codificadores como ProtoCoder ou Esquemas. A codificação e a decodificação podem ser uma grande fonte de sobrecarga. Portanto, se você tiver um BLOB grande, mas precisar apenas que ele seja estruturado, será possível decodificar seletivamente essa parte.

Evite definir num_shards em transformações de saída

Ao usar beam.io.WriteToText, deixe num_shards definido como 0. Isso permite que o Dataflow decida o número de fragmentos para gravar os dados de saída. Se você corrigir o número de fragmentos em um número pequeno (por exemplo, 1), todos os dados serão agregados em um nó de trabalho para serem gravados como um arquivo. Isso pode causar lentidão no job.

Crie um lote de pontos de dados e processe-o como um todo

Para criar um lote de pontos de dados, recomendamos que você use beam.BatchElements, que melhora a vetorização. Por exemplo, imagine que você esteja usando um módulo TF-Hub para extrair embeddings de texto como parte do job do Dataflow. É mais eficiente receber uma saída para um lote de pontos de dados de uma só vez usando o módulo em vez de invocar o módulo com cada ponto de dados individual. Para mais informações, consulte exemplos de como chamar APIs do AI Platform na documentação do apache_beam.ml.gcp package.

Pré-processe os dados uma vez e salve-os como um arquivo TFRecord

Se você planeja treinar um modelo do TensorFlow, crie um arquivo TFRecord. Um arquivo TFRecord contém uma sequência de registros, em que cada registro é codificado como uma string de bytes. Os arquivos TFRecord são otimizados para treinamento de modelos do TensorFlow. Use o TensorFlow Transform (TFT) (em inglês) para preparar os dados como TFRecords para treinar modelos do TensorFlow. O TFT é implementado usando o Apache Beam e executado em escala no Dataflow.

Registre somente o que for útil

No executor do Dataflow, os registros de todos os workers são enviados para um local central no Cloud Logging. Muitos registros podem diminuir o desempenho e aumentar os custos. Portanto, considere o que você está registrando e o nível de granularidade necessário. Em seguida, modifique as configurações de geração de registros adequadamente. Para mais informações, consulte Como criar pipelines de dados prontos para produção usando o Dataflow: como monitorar pipelines de dados.

Monitore os jobs do Dataflow

Use a interface de monitoramento do Dataflow, que fornece uma visão geral dos jobs e mostra detalhes sobre o status e a execução deles. Os gráficos de monitoramento de jobs ilustram a visibilidade no nível da etapa para ajudar a identificar o que pode estar causando atraso. Eles também mostram informações estatísticas que destacam o comportamento anômalo e fornecem métricas para ajudar você a encontrar gargalos e coletores. Para mais informações sobre como melhorar o desempenho, consulte Como criar perfis de pipelines do Dataflow.

Treinamento com o AI Platform Training

O AI Platform Training é um serviço simples e totalmente gerenciado que traz a eficiência e a flexibilidade do TensorFlow, do scikit-learn e do XGBoost, além de contêineres personalizados na nuvem. É possível usar o AI Platform para treinar modelos de ML e ajustar os hiperparâmetros em escala usando um ambiente distribuído sem servidor e aceleradores poderosos.

Faça a troca certa entre a precisão e o tamanho do modelo para a tarefa

Se a tarefa exigir alta precisão, talvez seja necessário treinar um modelo grande e complexo, como o Inception_v4, para aplicativos de visão. No entanto, se você planeja disponibilizar seu modelo em dispositivos de borda com recursos limitados de armazenamento e computação, é melhor treinar um modelo menor com menos precisão. Modelos menores também são mais rápidos para treinar e produzir predições mais rapidamente do que modelos maiores. Por exemplo, MobileNets é otimizado para aplicativos de visão móvel.

Escolha a configuração correta de máquina para as características de treinamento

É possível escolher tipos de máquina arbitrários e vários tipos de GPU. A configuração da máquina escolhida depende do tamanho dos dados, do tamanho do modelo e da seleção de algoritmo. Por exemplo, os frameworks de aprendizado profundo, como o TensorFlow e o PyTorch, beneficiam-se da aceleração da GPU, enquanto os frameworks do scikit-learn e do XGboost não. Por outro lado, ao treinar um modelo grande do scikit-learn, é necessária uma máquina otimizada de memória.

Não use máquinas grandes em modelos simples

Modelos simples podem não treinar mais rapidamente com GPUs ou com treinamento distribuído, porque podem não se beneficiar de um paralelismo de hardware maior. Como o framework do scikit-learn não é compatível com treinamento distribuído, certifique-se de usar apenas as configurações de tipo de máquina personalizado ou de nível de escalonamento que correspondam a uma única instância de worker.

Para conjuntos de dados pequenos, use uma única máquina grande

Se você conseguir adequar todos os dados na memória, pode ser mais econômico usar um tipo de máquina grande (CPUs e memória altas), em vez de executar treinamento distribuído ou fazer streaming dos dados do Cloud Storage para sua máquina.

Escalone verticalmente antes de escalonar horizontalmente

Escalonar verticalmente em vez de escalonar horizontalmente durante o experimento pode ajudar a identificar as configurações mais econômicas e com melhor desempenho. Por exemplo, comece usando um único worker que tenha uma única GPU e, em seguida, tente uma GPU mais potente antes de usar várias GPUs. Depois disso, teste o treinamento distribuído, conforme discutido posteriormente nesta seção. O escalonamento vertical é mais rápido do que o escalonamento horizontal porque a latência da rede é muito mais lenta do que a interconexão da GPU.

Para grandes conjuntos de dados, use o treinamento distribuído

O treinamento distribuído executa o paralelismo de dados em um cluster de nós para reduzir o tempo necessário para treinar um modelo do TensorFlow quando você usa um grande conjunto de dados. Certifique-se de ajustar o número de iterações em relação à escala de distribuição, ou seja, receber o número total de iterações necessárias e dividir esse total pelo número de GPUs multiplicadas pelo número nós de trabalho.

Aumente o tamanho do servidor de parâmetros para aumentar a largura de banda

O treinamento distribuído assíncrono com GPUs avançadas exige muita largura de banda para o servidor de parâmetros. No entanto, a largura de banda disponível é proporcional ao tamanho (número de vCPUs) do servidor de parâmetros. Portanto, recomendamos que você provisione em excesso a capacidade de computação do servidor de parâmetros para aumentar a largura de banda e aproveitar ao máximo os workers da GPU.

Use o MultiWorkerMirroredStrategy para treinamento distribuído de modelos do TensorFlow

A classe MultiWorkerMirroredStrategy implementa o treinamento distribuído síncrono em vários workers, possivelmente com várias GPUs. Cada variável no modelo é espelhada em todas as réplicas, e algoritmos eficientes de redução são usados para comunicar as atualizações da variável nos dispositivos. Essa estratégia é escalonável, eficiente e não precisa de um servidor de parâmetros, o que reduz o custo da infraestrutura de treinamento. Para mais informações, consulte Treinamento distribuído com o TensorFlow.

Use o Cloud TPU para modelos compatíveis

Se você estiver treinando um dos modelos oficiais compatíveis para o TensorFlow e o PyTorch, use o Cloud TPU. O Cloud TPU foi criado com base em chips ASIC personalizados projetados pelo Google e criados especificamente para acelerar os cálculos de aprendizado profundo. É possível executar jobs de treinamento no AI Platform Training usando o Cloud TPU, que oferece preços que podem reduzir significativamente o custo. Para mais informações sobre o treinamento de modelos personalizados, consulte Usar TPUs.

Use a API tf.data para aproveitar melhor os aceleradores

Alcançar o desempenho máximo de treinamento em GPUs e TPUs requer um pipeline de entrada eficiente que fornece dados para a próxima etapa antes que a etapa atual seja concluída. Para ajudar a criar pipelines de entrada de dados flexíveis e eficientes para modelos do TensorFlow, a tf.data API fornece um conjunto de funções, como map, batch, cache, prefetch, shuffle, repeat e interleaves. Além disso, o uso de tamanhos de lote maiores melhora a utilização dos seus aceleradores. Para mais informações, consulte Melhor desempenho com a API tf.data.

Faça streaming de dados do Cloud Storage para treinar modelos do scikit-learn

Quando você treina um modelo do scikit-learn em grandes conjuntos de dados, fazer o download de todo o conjunto de dados no worker de treinamento e carregá-lo na memória não gera escalonamento. Nesses casos, use a API stream-read/file_io do TensorFlow, que é pré-instalada na VM de worker.

Considere usar o XGBoost distribuído com grandes conjuntos de dados

Quando você treina um modelo XGBoost em grandes conjuntos de dados, é possível aproveitar o algoritmo XGBoost integrado e distribuído, porque ele é executado em escala usando várias máquinas virtuais em paralelo.

Controle a vida útil do job de treinamento

No job do AI Platform Training, configure max_running_time para limitar o ambiente de execução do job. Se o job de treinamento ainda estiver em execução após essa duração, ele será cancelado para que você não tenha mais custos.

Use a parada antecipada no treinamento dos modelos

Para limitar o custo de um job de treinamento de ML, recomendamos que você implemente um comportamento de interrupção antecipada, quando seu modelo atingir um determinado nível de desempenho preditivo ou quando não houver melhoria no desempenho preditivo do modelo.

Prepare o ambiente em uma imagem de contêiner

Se o ambiente de treinamento exigir muitas dependências que levam tempo para serem instaladas, use uma imagem de contêiner. A instalação dessas dependências adiciona uma sobrecarga de tempo considerável ao início do job de treinamento. Em vez disso, usar uma imagem de contêiner preparada pode economizar tempo e reduzir custos, além de enviar a imagem do contêiner de treinamento usando o AI Platform Training com contêineres personalizados.

Use o ajuste automático de hiperparâmetros

O AI Platform fornece um serviço de otimização de caixa preta que ajuda você a ajustar automaticamente hiperparâmetros em modelos complexos de ML. Ao configurar um job de ajuste de hiperparâmetro, recomendamos que você defina enableTrialEarlyStopping como True. Isso ajuda a limitar o custo do job de ajuste de hiperparâmetro. Se você tiver um job de ajuste de hiperparâmetro anterior, poderá definir resumePreviousJobId como True para começar a partir de um estado parcialmente otimizado. Isso permite reutilizar o conhecimento adquirido no job de ajuste de hiperparâmetro anterior. Além disso, recomendamos definir maxParallelTrials como entre 2 e maxTrials/2 para convergir mais rapidamente para bons valores de hiperparâmetro, o que, por sua vez, reduz o custo do ajuste de hiperparâmetros.

Limpe artefatos produzidos por jobs antigos

A execução de muitos jobs de treinamento por um longo período pode produzir um número considerável de artefatos, como registros e checkpoints. A retenção desses artefatos gera custos de armazenamento desnecessários se você não precisar mais deles.

Monitore a utilização de recursos dos jobs de treinamento

É possível monitorar seus jobs de treinamento usando o Console do Google Cloud para analisar o consumo de recursos, incluindo CPU, GPU e utilização de memória, bem como o uso da rede. Isso ajuda você a decidir se quer aumentar seus recursos para melhorar o desempenho ou para a otimização de custos. Além disso, é possível usar as recomendações de tamanho para diminuir os tipos de máquina com base nas alterações no uso de vCPU e RAM.

Exibição com o AI Platform Prediction

O AI Platform Prediction é um serviço totalmente gerenciado e escalonável que pode ser usado para hospedar modelos de ML treinados na nuvem e disponibilizá-los como APIs REST para inferência on-line. Além disso, quando você quer armazenar uma grande quantidade de dados off-line, use o modelo implantado para solicitações de predição em lote.

Use tipos de pontos flutuantes de precisão reduzida

Modelos menores resultam em uma latência de veiculação mais baixa. Ao criar um modelo do TensorFlow para exibição on-line, recomendamos que você use tipos de pontos flutuantes de 16 bits (meia precisão) em vez de tipos de pontos flutuantes de 32 bits (precisão total) para representar seus dados e as ponderações do modelo. Também é possível usar um treinamento de precisão mista para manter a estabilidade numérica, acelerar o treinamento e produzir modelos menores que tenham menor latência de inferência.

Reduza o tamanho do modelo usando a quantização pós-treinamento

A quantização pós-treinamento é uma técnica de conversão que pode reduzir o tamanho do modelo do TensorFlow e, ao mesmo tempo, melhorar a latência do acelerador de CPU e hardware, com pouca degradação na precisão do modelo. Opções para quantização pós-treinamento incluem quantização dinâmica de intervalos, quantização de número inteiro completa e quantização float16.

Aproveite o kit de ferramentas de otimização de modelos do TensorFlow

Antes de implantar seus modelos do TensorFlow no AI Platform Prediction, use o Kit de ferramentas de otimização de modelos do TensorFlow. Este kit de ferramentas oferece um conjunto de ferramentas para otimizar a implantação e a execução de modelos de ML. É possível usar as ferramentas para quantização pós-treinamento, treinamento de quantização e remoção de modelos.

Use o escalonamento manual para um volume de solicitações altamente variável

Se o número de solicitações que o modelo recebe flutuações inerentemente mais rápido que o escalonamento automático conseguir acompanhar, pode ser mais eficiente usar o escalonamento manual. Se você tiver uma carga de trabalho previsível (por exemplo, uma carga alta nos fins de semana e uma carga baixa nos dias da semana), recomendamos programar o escalonamento para corresponder à demanda esperada.

Use o tipo de máquina N1 com escalonamento manual para baixa latência

Se o tráfego tiver picos íngremes regulares e uma latência baixa confiável for importante para o aplicativo, use os tipos de máquina N1, que oferecem latência muito menor e previsível em comparação com outros tipos de máquina.

Escolha o tipo de máquina certo para exibir o modelo

É possível personalizar o tipo de máquina virtual que o AI Platform Prediction usa para hospedar o modelo. Para exibir modelos grandes com tráfego intenso, escolha uma das máquinas N1 (padrão, otimizada para memória ou otimizada para CPU). As máquinas N1 não são compatíveis com o escalonamento de nós até zero. Se o modelo exigir escalonamento de nós até zero nós, use máquinas mls1-c1-m2 e mls1-c4-m2.

Use o escalonamento automático e defina minNodes como zero quando a baixa latência não for essencial

Se o caso de uso não for sensível à latência, use o escalonamento automático e defina minNodes como zero. Isso pode ajudar a reduzir o custo quando o serviço de modelo não estiver recebendo solicitações. Para o escalonamento automático, use máquinas mls1-c1-m2 e mls1-c4-m2. As máquinas mls1-c4-m2 (quad-core) podem melhorar a latência.

Verifique se você precisa de GPUs para exibir on-line

Quando você usa tipos de máquina N1, o AI Platform Prediction permite anexar aceleradores de GPU ao seu serviço de previsão on-line. No entanto, você só se beneficiará dos aceleradores de GPU se disponibilizar modelos do TensorFlow, não se estiver usando o scikit-learn ou o XGBoost. Além disso, se você não tiver um modelo grande do TensorFlow que processe pontos de dados grandes para predição on-line, como streams de vídeo ou imagens, talvez não precise da capacidade total de uma GPU.

Use o TF-TRT com aceleradores de GPU NVIDIA

Ao usar aceleradores de GPU NVIDIA para exibição, recomendamos usar o TensorFlow com o TensorRT (TF-TRT). Essa ferramenta realiza várias transformações e otimizações importantes no gráfico de rede neural. Isso inclui eliminar camadas com saídas não utilizadas, fusões de convolução, polarizações e ReLU para formar uma única camada, agregação de camada, fusão de camada horizontal (agregação de camada) e quantização. Para mais informações, consulte Como otimizar o desempenho do TensorFlow Serving com o NVIDIA TensorRT.

Reutilize o objeto de serviço autenticado no objeto cliente

Para chamar uma versão de modelo implantada no AI Platform Prediction, crie um objeto de serviço que interaja com a API do modelo usando o método googleapiclient.discovery.build. O método usa a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS para autenticação. Chamar esse método toda vez que você solicita uma previsão adiciona sobrecarga ao tempo de resposta. Portanto, crie esse objeto de serviço uma vez e reutilize-o nas chamadas de previsão subsequentes.

Use codificação base64 ao enviar imagens

Ao enviar imagens ao AI Platform Prediction para inferência, use a codificação base64 em vez de uma matriz de pontos flutuantes. O serviço do AI Platform Prediction espera um objeto JSON que representa a solicitação de previsão. No entanto, dados binários, como imagens, não podem ser formatados como as strings codificadas em UTF-8 compatíveis com o JSON. Portanto, use a codificação base64 para representá-la, porque isso minimiza o tamanho do payload da solicitação em comparação com o uso de uma matriz de pontos flutuantes e, consequentemente, reduz o tempo de resposta.

Envie vários pontos de dados em uma solicitação

As versões de modelo implantadas no AI Platform Prediction aceitam uma lista de instâncias. É possível aproveitar isso se tiver vários pontos de dados (menos de 100) e se quiser obter uma previsão enviando-os em um payload de solicitação. No entanto, o tamanho geral dos dados precisa ser inferior a 1,5 MB.

Para tráfego intenso, reduza o tamanho da amostra para a geração de registros de solicitação/resposta

O AI Platform fornece geração de registros de solicitação/resposta para o BigQuery. A predição on-line que está trabalhando a uma alta taxa de consultas por segundo (QPS, na sigla em inglês) pode produzir um número substancial de registros. Elas estão sujeitas a preços do BigQuery. Ao reduzir o tamanho da amostra, é possível reduzir a quantidade de geração de registros e, assim, reduzir seu custo. Para configurar o volume da geração de registros de solicitação-resposta no BigQuery, especifique o valor samplingPercentage ao implantar a versão do modelo para o AI Platform Prediction.

Use jobs de previsão em lote do AI Platform para pontuar grandes conjuntos de dados

Ao fazer a previsão off-line em um grande número de instâncias, e você não precisa delas imediatamente, use o serviço de previsões em lote. Esse serviço executa um job de processamento de dados distribuído em escala para melhorar a capacidade e reduzir os custos em comparação com a previsão on-line.

Aumente o tamanho do lote para jobs de previsão em lote

Se você usar jobs de predição em lote, configure o job de previsão em lote para maximizar o uso da vetorização quando o modelo estiver pontuando os dados. Isso aumenta a capacidade do job de previsão em lote e reduz o ambiente de execução e, consequentemente, o custo.

Exclua versões de modelo não utilizadas ao usar o escalonamento manual

Se as versões de modelo estiverem definidas para escalonamento manual ou se o parâmetro minNodes no escalonamento automático não estiver definido como zero, exclua versões de modelo não usadas. Versões de modelo não utilizadas geram custos desnecessários, dependendo do tamanho da máquina e do tempo de execução.

Monitore suas métricas do AI Platform Prediction

Você precisa monitorar os padrões de tráfego, as taxas de erro, a latência e a utilização de recursos do modelo para ajudar a detectar problemas nos modelos e ajudar a encontrar o tipo de máquina certo para otimizar a latência e o custo. Também é possível usar o Cloud Monitoring para configurar alertas com base nas métricas do ML. Por exemplo, é possível receber alertas se a latência de previsão do modelo estiver muito alta. Para mais informações, consulte Como monitorar versões do modelo.

Orquestração com o AI Platform Pipelines

O AI Platform Pipelines é um serviço hospedado do Kubeflow Pipelines (KFP) no Google Kubernetes Engine (GKE). Ele fornece uma plataforma em que é possível orquestrar as etapas no fluxo de trabalho do ML, como extração de dados, validação, preparação, treinamento de modelo, ajuste, avaliação e exibição. É possível implementar os pipelines de ML usando o TensorFlow Extended (TFX) ou o SDK do KFP (em inglês) e implantá-los no AI Platform Pipelines para execução escalonável e confiável.

Use serviços gerenciados para etapas de pipeline

Para escalonar horizontalmente a execução do pipeline de treinamento de ML, especialmente quando você trabalha com grandes conjuntos de dados e modelos grandes, recomendamos usar os serviços gerenciados do Google Cloud. Também recomendamos que você faça o download das diferentes cargas de trabalho para os serviços certos. Por exemplo, use o Dataflow para etapas de validação e transformação de dados e o treinamento do AI Platform (distribuído) para treinamento e ajuste de modelos. No entanto, quando você trabalha com conjuntos de dados relativamente pequenos, talvez seja mais eficiente executar todas as etapas localmente no cluster do GKE do AI Platform Pipelines.

Para grandes conjuntos de dados, use o Dataflow para a etapa de avaliação do modelo

Quando você trabalha com grandes conjuntos de dados, o Dataflow é mais escalonável e econômico do que o AI Platform Training. Por exemplo, consulte a análise de modelo do TensorFlow, que é implementada usando o Apache Beam e pode ser executada no Dataflow para avaliar os SavedModels do TensorFlow.

Realize um treinamento incremental com inicialização a quente (se possível)

Em pipelines de treinamento contínuo, você treina seu modelo regularmente em dados novos. Se a implementação do modelo não mudar de uma iteração de treinamento para outra, será possível iniciar a iteração de treinamento atual usando o modelo treinado na iteração anterior e ajustá-la usando os novos dados. Isso reduz o tempo (e, consequentemente, o custo) de treinamento do modelo a cada novo uso do zero com todos os dados. Ela também converge mais rapidamente do que treinar um modelo inicializado aleatoriamente usando somente os novos dados. O TFX Pipelines tem compatibilidade integrada com inicializações a quente.

Otimize a frequência de treinamento do modelo

Você precisa treinar o modelo novamente, mas pode ser ineficiente e caro treiná-lo com muita frequência. Por outro lado, o desempenho preditivo do modelo diminui se não for treinado com frequência suficiente. O monitoramento do modelo implantado para a variação de dados e a variação de conceito fornecem indicações de que o modelo pode precisar ser treinado novamente.

Limpe artefatos produzidos pelas etapas do pipeline

A execução de um pipeline produz artefatos como divisões de dados, dados transformados, saída de validação e saída de avaliação. Esses artefatos se acumulam rapidamente e geram custos de armazenamento desnecessários. Portanto, limpe periodicamente os artefatos desnecessários.

Criar seu próprio cluster do GKE para KFP

O AI Platform Pipelines facilita a configuração e o uso do Kubeflow Pipelines (KFP) ao criar um cluster do GKE para você e implantar o KFP no cluster. Como alternativa, é possível criar seu próprio cluster do GKE para ter um controle mais granular sobre o cluster. Isso permite que você personalize a configuração para os requisitos da sua carga de trabalho.

Configure o escalonamento automático e o provisionamento automático de nós para o cluster do GKE

O escalonamento automático e o provisionamento automático de nós ajudam a controlar o número de pipelines executados em paralelo em comparação com aqueles que estão na fila aguardando os recursos. O provisionamento automático de nós de GPU reduz os custos quando você não está usando GPUs.

Equilibre os benefícios do armazenamento persistente

Os discos permanentes podem ter maior desempenho quando são anexados aos nós do GKE. No entanto, os dados precisam ser copiados para o Cloud Storage quando outros serviços precisarem usá-los. Se os dados forem usados apenas pelos processos de ML no cluster do GKE, use discos permanentes. Caso contrário, use o Cloud Storage para compartilhar dados e artefatos entre serviços.

Configure o Cloud SQL para o armazenamento de metadados do pipeline

Quando você usa o Cloud SQL como armazenamento de metadados de ML, os pipelines podem ter maior capacidade e melhor escalonabilidade do que o armazenamento de metadados no cluster. Os metadados também são preservados mesmo se o cluster for desprovisionado.

Como monitorar o desempenho e gerenciar o custo dos projetos de ML

As Operações do Cloud fornecem um conjunto de ferramentas para monitorar, solucionar problemas e melhorar o desempenho dos sistemas de treinamento e exibição de ML no Google Cloud. No nível do projeto, o Google Cloud oferece várias maneiras de capturar, relatar, gerenciar e prever custos. Para mais informações sobre otimização de custos no Google Cloud, consulte o artigo Noções básicas sobre a otimização de custos, que fornece uma visão geral dos produtos de gerenciamento de custos do Google Cloud e veja as postagens sobre gerenciamento de custos no blog do Google Cloud.

Investigue o sistema usando registros de aplicativos

O Cloud Logging é um serviço totalmente gerenciado com desempenho em grande escala para processamento de dados de registros de aplicativos e sistemas. Isso permite analisar e exportar os registros selecionados para armazenamento de longo prazo em tempo real.

Use o Cloud Monitoring para acompanhar aplicativos de ML

O Cloud Monitoring coleta métricas, eventos e metadados dos serviços do Google Cloud e, em seguida, gera insights por meio de painéis e gráficos e por meio de alertas. É possível usar essas informações para acompanhar o desempenho, o tempo de atividade e a integridade geral dos seus aplicativos de ML. É possível ver o funcionamento dos aplicativos de ML e resolvê-los, se necessário, usando Cloud Trace, Cloud Debugger e Cloud Profiler.

Capture dados de gastos em um formato consistente

Ao capturar informações sobre custos e gastos, use ferramentas e técnicas que agregam os dados a um formato consistente. Isso permite trabalhar com os dados de maneira consistente e inferir as informações adequadas deles para gerenciar os custos com eficiência. É possível especificar a formatação dos dados de custo ao configurar uma exportação de faturamento para o BigQuery para hospedar o conjunto de dados para retenção e análise. A exportação do faturamento fornece uma visão mais detalhada do seu uso e dos custos do que os relatórios do console, que é possível visualizar por meio de ferramentas como o Data Studio.

Atribua uso de recursos por meio de rótulos

Rótulos são pares de chave-valor que podem ser anexados a recursos. É possível usá-los para identificar e, assim, rastrear os custos de uma equipe, um ambiente ou qualquer outra maneira de organizar seu trabalho para um grupo de recursos. Recomendamos que você torne os valores de rótulo simples e úteis do ponto de vista comercial e técnico, além de aplicá-los de forma consistente (de maneira programática, se possível). Para ver uma lista de produtos em que os rótulos são compatíveis, consulte serviços compatíveis.

Entenda e monitore os custos dos seus projetos

Para se manter informado sobre os custos do projeto, use a página Relatórios de faturamento e painéis personalizados. A página "Relatórios de faturamento" mostra informações sobre seus gastos, que podem ser filtrados por projeto, rótulos, produto e assim por diante. É possível criar painéis personalizados usando o Data Studio ou outras ferramentas de visualização. É possível adicionar visualizações diferentes para garantir que todos os usuários tenham acesso aos insights necessários para tomar decisões fundamentadas sobre otimizações de custos.

Controle os custos por meio de orçamentos e alertas

Use orçamentos e notificações programáticas (alertas) para ajudar a controlar seus custos definindo níveis de gastos e especificando que você quer receber alertas quando seus custos atingirem esses níveis. Esteja ciente de que, mesmo quando um alerta for acionado, os recursos continuarão a funcionar normalmente. Também é possível integrar alertas com e-mail ou soluções de terceiros, como o Slack. Para projetos de pesquisa e desenvolvimento, alunos, pesquisadores e desenvolvedores, ao definir a desativação do Cloud Billing, é possível controlar seletivamente os recursos ou limitar os recursos, o que interrompe os recursos em limites predeterminados. Também é possível usar papéis de faturamento para gerenciar os custos restringindo a permissão de vinculação de recursos à sua conta de faturamento.

Aproveite a computação sem servidor

Com os produtos sem servidor, você paga somente pelo que usa. O BigQuery oferece opções de preços flexíveis, e o uso do serviço do Dataflow é cobrado em incrementos por segundo para cada job.

Execute os serviços na mesma região

O ideal é que os serviços de ML (Dataflow, Cloud Storage, AI Platform e BigQuery) estejam na mesma região para evitar custos de entrada e saída para transferir dados entre regiões.

Aproveite os descontos para recursos de computação

O Google Cloud oferece vários descontos, como descontos por uso prolongado (incluindo GPUs), que são aplicados automaticamente quando você executa recursos por uma parte significativa de cada mês. Também é possível aproveitar os descontos por uso contínuo, que são outros descontos aplicáveis quando você usa um volume específico de recursos, incluindo vCPUs, RAM e GPUs. É possível solicitar esses descontos por meio do Console do Cloud. Os descontos por uso contínuo são ideais para cargas de trabalho de estado estável previsíveis.

Preveja custos para planejar e priorizar de maneira eficiente os investimentos na nuvem

Use a página de relatórios do Cloud Billing para ver os custos previstos até 12 meses no futuro. Também é possível usar o BigQuery para fazer sua própria previsão. Em um nível de serviço, é possível usar a Calculadora de preços do Google Cloud para estimar os custos.

A seguir