Sistema de inferência do TensorFlow escalonável

Last reviewed 2023-11-02 UTC

Esta série de arquitetura de referência descreve como projetar e implantar um sistema de inferência on-line de alto desempenho para modelos de aprendizado profundo usando uma GPU NVIDIA® T4 e um Servidor de inferência Triton.

Com essa arquitetura, é possível criar um sistema que usa modelos de machine learning e pode aproveitar a aceleração da GPU. O Google Kubernetes Engine (GKE) permite escalonar o sistema de acordo com um número crescente de clientes. É possível melhorar a capacidade e reduzir a latência do sistema aplicando as técnicas de otimização descritas nesta série.

Esta série é destinada a desenvolvedores familiarizados com o Google Kubernetes Engine e os frameworks de machine learning (ML), incluindo o TensorFlow e a NVIDIA TensorRT.

Os documentos a seguir estão incluídos nesta série:

Arquitetura

O diagrama a seguir mostra a arquitetura do sistema de inferência.

Arquitetura do sistema de inferência.

Essa arquitetura inclui os seguintes componentes:

  • Cloud Load Balancing: envia o tráfego de solicitação para o cluster do GKE mais próximo do cliente.

  • Cluster do GKE: contém os nós do cluster e os servidores de monitoramento. Se os clientes enviarem solicitações de várias regiões, será possível implantar clusters do GKE em várias regiões. Você implanta a ferramenta de teste de carga do Locust no mesmo cluster.

  • Nós de cluster com acelerador de GPU: contém pods de servidor de inferência Triton. Um pod é implantado para cada nó. Não é possível compartilhar uma única GPU com vários pods.

  • Servidor de inferência Territon: veicula modelos ResNet-50 criados por você. O servidor oferece um serviço de inferência usando um endpoint HTTP ou gRPC. O serviço de inferência permite que clientes remotos solicitem inferência de qualquer modelo que esteja sendo gerenciado pelo servidor.

  • NVIDIA T4: melhora o desempenho de inferência. É preciso haver uma NVIDIA T4 para cada pod. Essa GPU conta com os Tensor Cores, que são unidades de processamento especializadas que aceitam e aceleram cálculos INT8 e FP16.

  • Servidores de monitoramento: colete dados de métricas sobre a utilização da GPU e da memória do Triton. Use o Prometheus para monitoramento e alerta de eventos. É possível usar o Grafana para visualizar e analisar dados de desempenho armazenados no Prometheus.

Considerações sobre o design

As diretrizes a seguir podem ajudar você a desenvolver uma arquitetura que atenda aos requisitos da sua organização para confiabilidade e desempenho.

Confiabilidade

Essa arquitetura usa o GKE para escalonabilidade e gerenciamento flexível de recursos.

Ao implantar o sistema no GKE, é possível escaloná-lo de acordo com o número de clientes. É possível implantar clusters do GKE em várias regiões e aumentar o número de nós no cluster.

Otimização de desempenho

Ao ajustar o desempenho, siga estas diretrizes gerais:

  • Defina as métricas de desempenho e de objetivos de acordo com o caso de uso do sistema.
  • Avalie o desempenho de referência antes de aplicar o ajuste de desempenho.
  • Aplique uma alteração e observe a melhoria. Se você aplicar várias alterações de uma vez, não poderá saber qual delas causou a melhoria.
  • Colete métricas apropriadas para entender as características de desempenho e decidir sobre a próxima ação para o ajuste de desempenho.

Usando essas diretrizes, você mede a melhoria de performance feita pelos seguintes fatores:

  • TensorRT (otimização de gráficos) A TensorRT aplica otimizações de gráfico para o NVIDIA T4. Por exemplo, ela modifica automaticamente os modelos de aprendizado profundo para que possam ser processados com o Tensor Core. Primeiro, você observa o desempenho da inferência sem a TensorRT como uma linha de base. Em seguida, você observa a melhoria no desempenho depois de aplicar a otimização do gráfico TensorRT.

  • Conversão FP16. O NVIDIA T4 é compatível com FP32 (32 pontos flutuantes) e FP16 para cálculos de ponto flutuante. Ao converter a precisão das variáveis do FP32 padrão para o FP16, é possível melhorar o desempenho da inferência.

  • Quantização INT8. A quantização é uma técnica de otimização para modelos de aprendizado profundo que melhora o desempenho de computação em GPUs. O NVIDIA T4 é compatível com os tipos de variáveis INT8 (número inteiro de 8 bits) para quantização. Em comparação com a conversão para o FP16, a quantização INT8 pode melhorar o desempenho, mas possivelmente reduzir a precisão. No entanto, o TensorRT usa um processo de calibração que minimiza a perda de informações durante os cálculos.

  • Tamanho do lote e número de grupos de instâncias. É possível ajustar o tamanho do lote e o número de grupos de instâncias usando Triton. Por exemplo, quando você define um tamanho de lote como 16, as solicitações de inferência são armazenadas em uma fila em lote e 16 solicitações são processadas como um único lote. Da mesma forma, se você definir um grupo de grupos de instâncias como quatro, elas serão processadas com quatro linhas de execução em paralelo. Nesse cenário, há 16 solicitações em cada lote e quatro linhas de execução processadas em paralelo, o que significa que 64 solicitações são processadas simultaneamente em uma única GPU.

    Aumentar o número de grupos de instâncias permite que a TensorRT atinja uma utilização maior de GPU. Ao mesmo tempo, ao ajustar o tamanho do lote, você permite que o Tirton otimize os cálculos na GPU. Por exemplo, ele pode combinar vários cálculos de solicitações diferentes em uma única tarefa computacional nos Tensor Cores.

Implantação

Para implantar essa arquitetura, consulte Implantar um sistema de inferência escalonável do TensorFlow.

Para medir e ajustar a implantação, consulte Medir e ajustar o desempenho de um sistema de inferência do TensorFlow.

A seguir