O tempo de execução do TensorFlow otimizado otimiza os modelos para uma inferência mais rápida e de custo inferior do que os contentores do TensorFlow Serving pré-criados baseados em código aberto. O tempo de execução do TensorFlow otimizado faz isto através da utilização das tecnologias proprietárias e de código aberto da Google.
Quanto maior for um modelo de aprendizagem automática (AA), mais pode custar a sua publicação. Com o tempo de execução do TensorFlow otimizado, o custo de publicação do seu modelo de AA e a velocidade de inferência podem ser inferiores em comparação com quando usa um tempo de execução do TensorFlow baseado em código aberto. Para tirar partido do tempo de execução do TensorFlow otimizado quando usa o Vertex AI, não precisa de modificar o código. Em alternativa, escolha uma imagem de contentor de publicação que a use.
O tempo de execução do TensorFlow otimizado é retrocompatível com os contentores do TensorFlow Serving pré-criados. Se estiver a executar modelos do TensorFlow com um contentor pré-criado, pode mudar para um contentor de tempo de execução do TensorFlow otimizado com o mínimo de esforço.
Embora o desempenho do modelo melhore quando usa o tempo de execução do TensorFlow otimizado, deve esperar que o impacto no desempenho varie para diferentes tipos de modelos.
Vista geral do tempo de execução do TensorFlow otimizado
O tempo de execução do TensorFlow otimizado usa otimizações de modelos e novas tecnologias proprietárias da Google para melhorar a velocidade e reduzir o custo da inferência em comparação com os contentores do TensorFlow Serving pré-criados baseados em código aberto.
A otimização ocorre quando o Vertex AI carrega um modelo, antes de o executar. Depois de implementar um modelo num ponto final, o registo de otimização é adicionado ao registo de inferência. Pode usar estes registos para resolver problemas que possam ocorrer durante a otimização.
Os tópicos seguintes descrevem as melhorias de otimização no tempo de execução do TensorFlow otimizado.
Otimizações de modelos
As seguintes três otimizações de modelos estão incluídas no tempo de execução do TensorFlow otimizado.
Pré-compilação do XLA do modelo
Quando um modelo do TensorFlow é executado, todas as operações são executadas individualmente. Existe uma pequena quantidade de sobrecarga com a execução de operações individuais. O tempo de execução do TensorFlow otimizado pode remover alguns destes custos gerais tirando partido do XLA para pré-compilar todo ou uma parte do gráfico do TensorFlow em kernels maiores.
A pré-compilação do XLA é opcional e está desativada por predefinição. Para saber como ativar a pré-compilação do XLA do modelo durante uma implementação, consulte o artigo Ative a pré-compilação do XLA do modelo.
Otimizações de compressão de modelos
O tempo de execução do TensorFlow otimizado pode executar alguns modelos mais rapidamente com um pequeno impacto na precisão do modelo, o que permite a otimização da compressão do modelo. Quando a otimização da compressão de modelos está ativada, o tempo de execução do TensorFlow otimizado usa técnicas como a quantização e a remoção de pesos para executar modelos mais rapidamente.
A funcionalidade de otimização da compressão de modelos está desativada por predefinição. Para saber como ativar a otimização da compressão de modelos durante uma implementação, consulte o artigo Ative a otimização da compressão de modelos.
Desempenho melhorado do modelo tabular em GPUs
Os modelos tabulares do TensorFlow são normalmente publicados em CPUs porque não conseguem usar aceleradores de forma eficaz. O tempo de execução do TensorFlow otimizado resolve este problema executando partes do modelo computacionalmente caras em GPUs. O resto do modelo é executado em CPUs, o que minimiza a comunicação entre o anfitrião e o acelerador. A execução das partes dispendiosas do modelo em GPUs e o resto em CPUs torna a publicação de modelos tabulares mais rápida e menos dispendiosa.
O tempo de execução do TensorFlow otimizado otimiza a publicação dos seguintes tipos de modelos tabulares.
Otimização automática de modelos para Cloud TPU
Os contentores de tempo de execução do TensorFlow otimizados pré-criados que suportam as TPUs do Google Cloud podem particionar e otimizar automaticamente os seus modelos para serem executados em TPUs. Para mais informações, consulte o artigo Implemente no Cloud TPU.
Utilização do tempo de execução do TensorFlow (TFRT)
O tempo de execução do TensorFlow otimizado pode usar o tempo de execução do TensorFlow (TFRT). O TFRT usa de forma eficiente as CPUs do anfitrião com vários processamentos, suporta modelos de programação assíncronos e está otimizado para eficiência de baixo nível.
A CPU do TFRT está ativada em todas as imagens de contentores de CPU do tempo de execução do TensorFlow otimizado, exceto na versão 2.8. Para desativar a CPU do TFRT, defina o sinalizador use_tfrt
como false
.
A GPU do TFRT está disponível em imagens de contentores de GPU do tempo de execução do TensorFlow otimizado noturno e em versões estáveis de imagens de contentores de GPU do tempo de execução do TensorFlow otimizado 2.13 e posteriores. Para ativar a GPU do TFRT,
defina as flags use_tfrt
e allow_precompilation
como true
.
O TFRT numa imagem de contentor de GPU minimiza a sobrecarga de transferência de dados entre a CPU do anfitrião e a GPU. Depois de ativar o TFRT, este funciona em conjunto com a compilação XLA. Uma vez que a pré-compilação da XLA está ativada, pode sentir alguns efeitos secundários, como um aumento da latência no primeiro pedido.
Para mais informações, consulte o artigo Ative a pré-compilação XLA do modelo.
Utilização do tempo de execução da Google
Uma vez que o tempo de execução do TensorFlow otimizado é criado com a pilha interna da Google, pode tirar partido da execução no ambiente de tempo de execução proprietário da Google.
Imagens de contentores do tempo de execução do TensorFlow otimizadas
A Vertex AI fornece dois tipos de imagens de contentores de tempo de execução do TensorFlow otimizadas: estável e noturna.
Imagens de contentores estáveis
Os contentores de tempo de execução do TensorFlow otimizados estáveis estão associados a uma versão específica do TensorFlow, tal como os contentores do TensorFlow Serving pré-criados baseados em código aberto. Os contentores do tempo de execução do TensorFlow otimizado associados a uma versão específica são mantidos durante o mesmo período que a compilação de código aberto associada à mesma versão. As compilações do tempo de execução do TensorFlow otimizado têm as mesmas propriedades que as compilações do TensorFlow de código aberto, exceto que a inferência é mais rápida.
As compilações são retrocompatíveis. Isto significa que deve conseguir executar modelos preparados em versões mais antigas do TensorFlow com um contentor mais recente. Os contentores recentes devem ter um desempenho melhor do que os mais antigos. Em raras exceções, um modelo formado numa versão mais antiga do TensorFlow pode não funcionar com um contentor mais recente.
Imagens de contentores noturnas
As compilações do tempo de execução do TensorFlow otimizadas diariamente incluem as melhorias e as otimizações mais recentes, mas podem não ser tão fiáveis como as compilações estáveis. São usadas principalmente para fins experimentais. Os nomes das compilações noturnas incluem a etiqueta nightly
. Ao contrário das imagens de contentores estáveis, os contentores noturnos não são abrangidos pelo Contrato de Nível de Serviço (SLA) do Vertex AI.
Imagens de contentores disponíveis
Estão disponíveis as seguintes imagens de contentores Docker do tempo de execução do TensorFlow otimizado estáveis e noturnas.
Versão do framework de ML | Aceleradores suportados (e versão CUDA, se aplicável) | Data de fim da aplicação de patches e do apoio técnico | Fim da disponibilidade | Imagens suportadas |
---|---|---|---|---|
por noite | Apenas CPU | Não aplicável | Não aplicável |
|
por noite | GPU (CUDA 12.x) | Não aplicável | Não aplicável |
|
por noite | Cloud TPU | Não aplicável | Não aplicável |
|
2,17 | Apenas CPU | 11 de julho de 2024 | 11 de julho de 2025 |
|
2,17 | GPU (CUDA 12.x) | 11 de julho de 2024 | 11 de julho de 2025 |
|
2,17 | Cloud TPU | 11 de julho de 2024 | 11 de julho de 2025 |
|
2.16 | Apenas CPU | 26 de abril de 2024 | Apr 26, 2025 |
|
2.16 | GPU (CUDA 12.x) | 26 de abril de 2024 | Apr 26, 2025 |
|
2.16 | Cloud TPU | 26 de abril de 2024 | Apr 26, 2025 |
|
2,15 | Apenas CPU | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2,15 | GPU (CUDA 12.x) | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2,15 | Cloud TPU | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2.14 | Apenas CPU | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2.14 | GPU (CUDA 12.x) | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2.13 | Apenas CPU | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2.13 | GPU (CUDA 11.x) | 15 de agosto de 2024 | 15 de agosto de 2025 |
|
2.12 | Apenas CPU | 15 de maio de 2024 | 15 de maio de 2025 |
|
2.12 | GPU (CUDA 11.x) | 15 de maio de 2024 | 15 de maio de 2025 |
|
2.11 | Apenas CPU | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.11 | GPU (CUDA 11.x) | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.10 | Apenas CPU | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.10 | GPU (CUDA 11.x) | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.9 | Apenas CPU | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.9 | GPU (CUDA 11.x) | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.8 | Apenas CPU | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
2.8 | GPU (CUDA 11.x) | 15 de novembro de 2023 | 15 de novembro de 2024 |
|
Use o tempo de execução do TensorFlow otimizado com um ponto final privado
A utilização de pontos finais privados para publicar inferências online com a Vertex AI oferece uma ligação segura e de baixa latência ao serviço de inferência online da Vertex AI, que é mais rápida do que a utilização de pontos finais públicos. O tempo de execução do TensorFlow otimizado serve provavelmente modelos sensíveis à latência, pelo que pode considerar usá-lo com pontos finais privados. Para mais informações, consulte o artigo Use pontos finais privados para inferência online.
Implemente um modelo com o tempo de execução do TensorFlow otimizado
O processo de implementação de um modelo para inferência com o tempo de execução do TensorFlow otimizado é quase igual ao processo de implementação de modelos com contentores do TensorFlow Serving pré-criados baseados em código aberto. As únicas
diferenças são que especifica uma imagem do contentor que usa o tempo de execução do TensorFlow otimizado quando
cria o modelo e pode ativar as flags de otimização descritas
anteriormente neste documento. Por exemplo, se implementou o seu modelo com o contentor us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest
, pode publicar o mesmo modelo com o tempo de execução do TensorFlow otimizado através do contentor us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.2-8:latest
.
O exemplo de código seguinte mostra como criar um modelo com o
us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest
contentor de tempo de execução do TensorFlow otimizado. Para implementar este modelo, usa o mesmo processo que usa para implementar um modelo com outros contentores do TensorFlow Serving pré-criados.
Para mais informações acerca do ModelServiceClient
usado neste exemplo, consulte
Class ModelServiceClient.
Para mais informações sobre como implementar modelos com a Vertex AI, consulte o artigo
Implemente um modelo com a API Vertex AI.
Para mais informações sobre as definições allow_precompilation
e allow_compression
, consulte a secção Otimizações de modelos descrita anteriormente neste documento.
from google.cloud.aiplatform import gapic as aip PROJECT_ID = PROJECT_ID REGION = LOCATION API_ENDPOINT = f"{REGION}-aiplatform.googleapis.com" PARENT = f"projects/{PROJECT_ID}/locations/{REGION}" client_options = {"api_endpoint": API_ENDPOINT} model_service_client = aip.ModelServiceClient(client_options=client_options) tf_opt_model_dict = { "display_name": "DISPLAY_NAME", "metadata_schema_uri": "", "artifact_uri": "MODEL_URI", "container_spec": { "image_uri": "us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-cpu.nightly:latest", "args": [ # The optimized TensorFlow runtime includes the following # options that can be set here. # "--allow_precompilation=true" - enable XLA precompilation # "--allow_compression=true" - enable # model compression optimization ], }, } tf_opt_model = model_service_client.upload_model( parent=PARENT, model=tf_opt_model_dict).result(timeout=180).model
Sinalizações de otimização de modelos
Quando implementa um modelo com o tempo de execução do TensorFlow otimizado, pode ativar duas funcionalidades que podem otimizar ainda mais a publicação de modelos do TensorFlow.
Pode ativar a pré-compilação do XLA e a otimização da compressão do modelo ao mesmo tempo. As secções seguintes descrevem como ativar estas opções usando flags durante a implementação.
Ative a pré-compilação da XLA
Para configurar o tempo de execução do TensorFlow otimizado para pré-compilar modelos, defina a flag allow_precompilation
como true
. A pré-compilação do XLA funciona para diferentes tipos de modelos e, na maioria dos casos, melhora o desempenho. A pré-compilação da XLA funciona melhor para pedidos com tamanhos de lotes grandes.
A pré-compilação da XLA do modelo ocorre quando chega o primeiro pedido com o novo tamanho do lote. Para garantir que o tempo de execução é inicializado antes do primeiro pedido, pode incluir um ficheiro de pedidos de preparação. Para mais informações, consulte o artigo Aquecimento do SavedModel na documentação do TensorFlow.
A pré-compilação do XLA demora entre vários segundos e vários minutos a ser concluída, dependendo da complexidade do modelo. Se usar a pré-compilação XLA do modelo, deve ter em atenção o seguinte.
Se usar um ficheiro de preparação, tente incluir pedidos com tamanhos de lotes que representem os tamanhos de lotes que espera que o seu modelo receba. O fornecimento de um grande número de pedidos no ficheiro de preparação retarda o início do servidor do modelo.
Se espera que o seu modelo receba pedidos com tamanhos de lotes diferentes, pode querer ativar o processamento em lote do lado do servidor com um conjunto de valores fixos para
allow_batch_sizes
. Para mais informações sobre como ativar a etiquetagem do lado do servidorem lote, consulte o artigo Ative o processamento em lote de pedidos do lado do servidor para o TensorFlow na documentação do TensorFlow.
Uma vez que a pré-compilação da XLA adiciona sobrecarga de memória, alguns modelos grandes podem falhar com um erro de falta de memória na GPU.
Recomendamos que teste a pré-compilação da XLA no seu modelo antes de ativar esta funcionalidade em produção.
Ative a otimização da compressão de modelos
Para configurar o tempo de execução do TensorFlow otimizado para usar a otimização de compressão de modelos, defina a respetiva flag allow_compression
como true
. Teste como a ativação desta flag afeta a precisão do seu modelo e, em seguida, determine se quer ativá-la na produção.
Desative as otimizações
Para configurar o tempo de execução do TensorFlow otimizado para executar modelos sem otimização, defina a respetiva flag disable_optimizer
como true
.
Limites de tempo de execução do TensorFlow otimizados
O tempo de execução do TensorFlow otimizado tem as seguintes limitações:
- O tempo de execução do TensorFlow otimizado não é compatível com GPUs NVIDIA mais antigas, como a Tesla P4 e a Tesla P100.
- Atualmente, o tempo de execução do TensorFlow otimizado só suporta a capacidade de explicação amostrada de Shapley.
Preços
A implementação de modelos com o tempo de execução do TensorFlow otimizado não acarreta custos adicionais. O custo é o mesmo que o de outras implementações de inferência em que lhe é cobrado um valor com base no número de VMs e aceleradores usados. Para mais informações, consulte os preços do Vertex AI.