Criar perfil do modelo em VMs do Cloud TPU

A criação de perfil permite otimizar a performance de treinamento do modelo em Cloud TPUs. Use o TensorBoard e a Plug-in do TensorBoard do Cloud TPU para criar o perfil do modelo.

Para mais informações sobre como usar o TensorBoard com um dos frameworks aceitos, consulte os seguintes documentos:

Pré-requisitos para criar o perfil de um script de treinamento

Antes de usar as ferramentas de criação de perfil da TPU, você precisa:

  1. Iniciar uma sessão de treinamento de modelo

    1. Configure uma TPU v4-8 para treinar um modelo. O procedimento de criação de perfil descrito neste documento usa um modelo ResNet, mas é possível usar outro modelo, desde que ele treine em uma TPU v4.
    2. Na VM da TPU, adicione uma linha para iniciar o servidor do criador de perfil ao script de treinamento.

      Para o treinamento do ResNET, o script de treinamento está em: /usr/share/tpu/tensorflow/resnet50_keras/resnet50.py:

      Insira as linhas destacadas em resnet50.py. Na parte de cima do arquivo, adicione a seguinte importação:

      import tensorflow.compat.v2 as tf2
      

      Logo antes de os scripts iniciarem o loop de treinamento, adicione o linha destacada:

      if name == 'main':
       tf.logging.set_verbosity(tf.logging.INFO)
       tf2.profiler.experimental.server.start(6000)
       app.run(main)
      

      O servidor de criação de perfil do TensorFlow é iniciado na VM da TPU quando você executa o script.

    3. Inicie o treinamento de modelo.

      Execute o script de treinamento e aguarde até que a saída indique seu modelo está treinando ativamente. A saída depende no seu código e modelo. Procure uma saída como Epoch 1/100. Como alternativa, navegue até a página do Cloud TPU no console do Google Cloud, selecione sua TPU e confira o gráfico de utilização da CPU. o gráfico de utilização da CPU não mostra a utilização da TPU, é uma boa indicação de que a TPU está treinando o modelo.

Comece a criar o perfil do treinamento de modelo

Quando o modelo estiver em treinamento, abra uma janela de terminal separada ou o Cloud Shell. Siga as etapas abaixo para começar a criar o perfil do treinamento do modelo.

  1. Na nova janela ou shell, conecte-se à VM da TPU com o encaminhamento de portas.

    gcloud compute tpus tpu-vm ssh your-vm --zone=us-central2-b --ssh-flag="-4 -L 9001:localhost:9001"

    O encaminhamento de portas permite que seu navegador local se comunique com o TensorBoard servidor em execução na VM da TPU.

  2. Instale os requisitos do TensorFlow.

    Sua VM da TPU tem o TensorBoard instalado por padrão. Você também é possível instalar o TensorFlow manualmente. De qualquer forma, algumas dependências adicionais podem ser necessárias. Instalar estes dependências na VM da TPU executando:

    pip3 install -r /usr/share/tpu/models/official/requirements.txt
  3. Instale o plug-in do TensorBoard do Cloud TPU.

    Na VM da TPU, execute os seguintes comandos:

     pip3 install --upgrade "cloud-tpu-profiler>=2.3.0"
     pip3 install tensorflow
     pip3 install tensorboard_plugin_profile
  4. Iniciar o servidor do TensorBoard

    Execute o TensorBoard e crie um diretório de registro (logdir) na VM do TPU em que o TensorBoard pode gravar dados de criação de perfil. Especifique o usando a sinalização --logdir. Exemplo:

    mkdir log-directory
    TPU_LOAD_LIBRARY=0 tensorboard --logdir log-directory --port 9001

O TensorBoard inicia um servidor da Web e exibe o URL dele:

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.3.0 at http://localhost:9001 (Press CTRL+C to quit)

Abra um navegador da Web e acesse o URL exibido na saída do TensorBoard. Selecionar Perfil no menu suspenso no canto superior direito da página do TensorBoard. A lista de ferramentas de criação de perfil disponíveis é mostrada no menu suspenso ferramentas na barra lateral esquerda.

imagem

Capturar um perfil em VMs de TPU

  1. Selecione o botão CAPTURE PROFILE.
  2. Selecione o botão de opção Endereço IP.
  3. Digite HOSTNAME:6000 no campo Profile Service URL.
  4. Selecione o botão CAPTURE.

imagem

Conferir dados de perfil com o TensorBoard

Depois que você capturar um perfil, o TensorBoard exibirá a overview_page. A lista de ferramentas de criação de perfil que você pode usar é exibida no painel à esquerda.

imagem

Perfil

A guia Perfil aparece depois que você captura alguns dados do modelo. Você clique no botão "Atualizar" na página do TensorBoard. Assim que os dados estiverem disponíveis, clique na guia Perfil. apresenta uma seleção de ferramentas para ajudar na análise de desempenho. Você pode use qualquer uma das seguintes ferramentas para criar o perfil do modelo.

Página de visão geral do perfil

A página de visão geral (overview_page), disponível na página Perfil, oferece uma visualização de nível superior do desempenho do modelo durante uma execução de captura. A página mostra uma visão geral agregada de todas as TPUs e uma análise geral do pipeline de entrada. Há uma opção para selecionar TPUs individuais na lista suspensa Host.

A página mostra dados nos seguintes painéis:

image

  • Resumo de desempenho

    • Utilização de FLOPS: a porcentagem de utilização das unidades de matriz da TPU.
  • As dez principais operações do TensorFlow na TPU mostram a Operações do TensorFlow que consumiram mais tempo:

    Cada linha mostra o tempo próprio de uma operação (como a porcentagem do tempo gasto por todas as operações), o tempo cumulativo, a categoria, o nome e a taxa de FLOPS atingida.

  • Ambiente de execução

    • O número de hosts usados
    • O tipo de TPU usado
    • O número de núcleos de TPU

Analisador do pipeline de entrada

O analisador de pipeline de entrada fornece insights sobre seus resultados de desempenho. A ferramenta informa imediatamente se o programa é limitado pela entrada. Além disso, ela pode orientar você na análise do dispositivo e do host para depurar os estágios do pipeline que estão criando gargalos.

Consulte a orientação em desempenho do pipeline de entrada para ver mais insights sobre a otimização do desempenho do pipeline.

Canal de entrada

Quando um programa TensorFlow lê dados de um arquivo, o processo de leitura é dividido em vários estágios de processamento de dados conectados em série. A saída de uma etapa é a entrada da próxima. Esse sistema de leitura é chamado de pipeline de entrada.

Um pipeline típico para leitura de registros de arquivos tem os seguintes estágios:

  1. leitura de arquivos
  2. Pré-processamento de arquivos (opcional)
  3. Transferência de arquivos da máquina host para o dispositivo

Um canal de entrada ineficiente pode tornar o aplicativo drasticamente lento. Um aplicativo é considerado limitado pela entrada quando passa uma parte significativa do tempo no pipeline de entrada. Use o Analisador do pipeline de entrada para entender onde o pipeline de entrada é ineficiente.

Painel de pipeline de entrada

Para abrir o analisador de pipeline de entrada, selecione Perfil e, em seguida, selecione input_pipeline_analyzer no menu suspenso Ferramentas.

O painel mostra detalhes da análise do lado do dispositivo e do host.

Análise no lado do dispositivo: mostra detalhes sobre os tempos de etapa do dispositivo.

  • Estatísticas de duração da etapa do dispositivo
  • % do tempo de espera do dispositivo para os dados de entrada

Análise no lado do host

Esta seção mostra os detalhes da análise no lado do host dividida em várias categorias:

  • Enfileiramento de dados que serão transferidos para o dispositivo. Tempo gasto para colocar dados em uma fila de entrada antes de transferi-los para o dispositivo.
  • Pré-processamento de dados: tempo gasto em operações de pré-processamento, como a descompactação de imagens.
  • Leitura antecipada de dados de arquivos Tempo gasto na leitura de arquivos, incluindo armazenamento em cache, pré-busca e intercalação.
  • Leitura de dados de arquivos por demanda: tempo gasto na leitura de dados de arquivos sem armazenamento em cache, pré-busca e intercalação.
  • Leitura ou processamento de outros dados: tempo gasto em outras operações relacionadas a entradas. que não usam tf.data.

imagem

Para conferir as estatísticas de operações de entrada individuais e respectivas categorias divididas por tempo de execução, abra a seção Show Input Op statistics.

Será exibida uma tabela de dados de origem como a seguinte:

image

Cada entrada da tabela contém as seguintes informações:

  1. Operação de entrada mostra o nome da operação de entrada do TensorFlow.
  2. Contagem: mostra o número total de instâncias da operação executada durante o período de criação de perfil.
  3. Tempo total (em ms): mostra a soma cumulativa do tempo gasto em cada uma das instâncias de operação.
  4. Porcentagem do tempo total: mostra o tempo total gasto em uma operação como uma fração do o tempo total gasto no processamento das entradas.
  5. Tempo próprio total (em ms): mostra o tempo acumulado em todas as instâncias da função. O tempo próprio mede o tempo gasto no corpo da função, excluindo o tempo gasto em qualquer função chamada. Por exemplo, Iterator::PaddedBatch::Filter::ForeverRepeat::Map é chamada por Iterator::PaddedBatch::Filter, portanto, o tempo próprio total da primeira é excluído do tempo próprio total da segunda.
  6. Porcentagem de tempo próprio total: mostra o total de tempo próprio como uma fração do total. tempo gasto no processamento de entradas.
  7. Categoria: mostra a categoria de processamento da operação de entrada.

Perfil de operações

O perfil de operações é uma ferramenta do Cloud TPU que exibe as estatísticas de desempenho das operações do XLA executadas durante um período de criação de perfil. O perfil de operação mostra:

  • o uso que o aplicativo faz do Cloud TPU, com a porcentagem do tempo gasto em operações por categoria e de utilização de FLOPS de TPU;
  • as operações mais demoradas, que são alvos potenciais de otimização;
  • detalhes de operações individuais, incluindo forma, preenchimento e expressões que usam a operação.

É possível usar o perfil de operações para encontrar destinos de otimização. Por exemplo, é possível usar o perfil de operações para identificar quais operações do XLA estão demorando mais para ser executadas e quantos FLOPS de TPU elas consomem.

Como usar o perfil de operações

A ferramenta de Perfil das operações contém estatísticas de desempenho das operações do XLA. É possível acessar os dados do perfil de operação no TensorBoard clicando na guia Perfil na parte de cima da tela e selecionando op_profile no menu suspenso Ferramentas. Você verá uma tela como esta:

imagem

  1. Seção de visão geral: mostra a utilização do Cloud TPU e fornece sugestões para otimização.
  2. Painel de controle: contém controles que permitem definir o número de operações exibidas na tabela, quais operações são exibidas e como eles serão classificados.
  3. Tabela de operações Lista a principal operação do TensorFlow categorias associadas às operações do XLA. Essas operações são classificadas por porcentagem de uso do Cloud TPU.
  4. Cards de detalhes das operações: mostra os detalhes das operações. que aparecem quando você aponta para uma operação na tabela. Esses detalhes incluem a utilização de FLOPS, a expressão em que a operação é usada e o layout da operação (ajuste).

Tabela de operações do XLA

A tabela de operações lista as categorias de operações do XLA em ordem decrescente a porcentagem de uso do Cloud TPU. A tabela mostra a porcentagem de tempo gasto, o nome da categoria da operação, o nome da operação do TensorFlow associada e a porcentagem de utilização de FLOPS da categoria. Para mostrar (ou ocultar) as dez operações XLA mais demoradas de uma categoria, clique no botão ao lado do nome da categoria na tabela.

imagem

  1. Tempo mostra a porcentagem total de tempo gasto por de operações nessa categoria. Clique para expandir a entrada e ver o detalhamento do tempo gasto por cada operação individual.
  2. As dez principais operações: o botão ao lado do nome de uma categoria que aparece ou oculta principais 10 operações demoradas na categoria. Se uma entrada de operação de fusão for exibida na lista de operações, será possível expandi-la para ver as operações elementares, que não são de fusão, que ela contém.
  3. Operação do TensorFlow: mostra o nome da operação do TensorFlow associada à operação do XLA.
  4. FLOPS: mostra a utilização de FLOPS, que é o número medido de FLOPS expressos como uma porcentagem dos FLOPS de pico da Cloud TPU. Quanto maior a porcentagem de utilização de FLOPS, mais rápida a execução das operações. A célula da tabela é codificada por cores: verde para alta utilização de FLOPS (boa) e vermelho para baixa utilização de FLOPS (ruim).

Cartões de detalhes de operações

Quando você seleciona uma entrada de tabela, um card aparece mostrando detalhes sobre a operação do XLA ou a categoria de operação. Um cartão costuma ter a seguinte aparência:

imagem

  • Nome e Categoria: mostram o nome e a categoria da operação do XLA em destaque.
  • Utilização de FLOPS: mostra a utilização de FLOPS como uma porcentagem do total de FLOPS possíveis.
  • Expressão: mostra o XLA expressão que contém a operação.
  • Uso de memória: exibe a porcentagem de pico de uso de memória pelo seu neste programa.
  • Layout (somente operações de convolução) mostra a forma e o layout de um tensor, incluindo: uma descrição de qualquer preenchimento realizado pelo compilador XLA.

Como interpretar resultados

Para operações de convolução, a baixa utilização de FLOPS de TPU pode ser causada por um ou pelos dois motivos a seguir:

  • Preenchimento (as unidades da matriz são usadas parcialmente).
  • operação de convolução é limitada pela memória

Esta seção apresenta uma interpretação de algumas métricas de desempenho de um modelo com baixa utilização de FLOP. Neste exemplo, a fusão de saída e a convolução dominaram o tempo de execução. Muitas operações vetoriais ou escalares tiveram baixa utilização de FLOP.

Uma estratégia de otimização para esse tipo de perfil é transformar as operações vetoriais ou escalares em operações de convolução.

No exemplo a seguir, %convolution.399 tem menos FLOPS e utilização de memória do que %convolution.340, do exemplo anterior.

imagem

Neste exemplo, o tamanho do lote está sendo preenchido até 128 e o tamanho do recurso está sendo preenchido até 8. Nesse caso, apenas 5% das unidades da matriz estão sendo usadas de maneira eficaz. A utilização é calculada por (((batch_time * num_of_features) / padding_size ) / num_of_cores). Compare os FLOPS neste exemplo com %convolution.340 no anterior que não usa padding.

Visualizador de traces

O visualizador de traces é uma ferramenta de análise de desempenho do Cloud TPU disponível na página Perfil. Ela usa o visualizador de perfil de evento de trace do Chrome para que funcione apenas no navegador Chrome.

O visualizador de traces contém uma linha do tempo que mostra:

  • As durações das operações que foram executadas pelo seu modelo do TensorFlow.
  • qual parte do sistema (TPU ou máquina host) executou uma operação. Normalmente, a máquina host executa operações de entrada, que pré-processam os dados de treinamento e os transferem para a TPU, enquanto a TPU executa o treinamento do modelo real.

O visualizador de traces permite identificar problemas de desempenho no modelo e, tomar medidas para resolvê-los. Por exemplo, de modo geral, é possível identificar se a entrada ou o treinamento do modelo está tomando a maior parte do tempo. Perfuração é possível identificar quais operações do TensorFlow mais demorada para ser executada.

O visualizador de traces está limitado a 1 milhão de eventos para cada Cloud TPU. Se for preciso avaliar mais eventos, use o visualizador de rastros em streaming.

Interface do visualizador de traces

Para abrir o visualizador de traces, acesse o TensorBoard, clique na guia Perfil na parte superior da tela e escolha trace_viewer no menu suspenso Ferramentas. O visualizador é exibido com a execução mais recente:

imagem

Essa tela contém os seguintes elementos principais (marcados com números na captura de tela anterior):

  1. Menu suspenso "Execuções": contém todas as execuções em que você informações de rastreamento capturadas. A visualização padrão é a mais recente ser executada, mas é possível abrir o menu suspenso para selecionar uma execução diferente.
  2. Menu suspenso "Tools": seleciona diferentes ferramentas de criação de perfil.
  3. Lista suspensa "Host": seleciona um host que contém um conjunto de Cloud TPUs.
  4. O painel Linha do tempo mostra as operações realizadas pelo Cloud TPU e pelo máquina host executada ao longo do tempo.
  5. Painel de detalhes: mostra outras informações das operações selecionadas no painel da linha do tempo.

Esta é uma visão mais detalhada do painel da linha do tempo:

image

O painel da linha do tempo contém os seguintes elementos:

  1. Barra superior: contém vários controles auxiliares.
  2. Eixo do tempo: mostra o tempo em relação ao início do trace.
  3. Rótulos de seção e faixa: cada seção contém várias faixas e um triângulo à esquerda que, quando clicado, expande e recolhe a seção. Há uma seção para cada elemento de processamento do sistema.
  4. Seletor de ferramentas Contém várias ferramentas para interagir com o visualizador de rastros.
  5. Eventos: mostra o tempo durante o qual uma operação foi executada ou a duração dos metaeventos, como as etapas de treinamento.
  6. Barra de guias vertical: essa barra não tem uma finalidade útil para o Cloud TPU. A barra faz parte da ferramenta visualizador de traces de uso geral fornecida pelo Chrome, usada em várias tarefas de análise de desempenho.

Seções e linhas

O visualizador de traces contém as seguintes seções:

  • Uma seção para cada nó da TPU, rotulada com o número do chip da TPU e o núcleo da TPU dentro do chip (por exemplo, "Chip 2: núcleo da TPU 1"). Cada seção de nó da TPU contém as seguintes faixas:
    • Etapa mostra a duração das etapas de treinamento que foram em execução na TPU.
    • Operações do TensorFlow: mostra as operações do TensorFlow executadas na TPU.
    • XLA Ops mostra as operações do XLA que foram executadas na TPU. Cada operação é traduzida em uma ou várias operações do XLA. O compilador XLA converte as operações do XLA em código que é executado na TPU.
  • Uma seção de threads em execução na CPU do host, denominada "Threads de host". Esta seção contém uma faixa para cada thread da CPU. Observação: é possível ignorar as informações exibidas ao lado dos rótulos da seção.

Seletor de ferramenta da linha do tempo

É possível interagir com a visualização da linha do tempo usando o seletor de ferramentas da linha do tempo no TensorBoard. Clique em uma ferramenta da linha do tempo para ativar e destacar uma ferramenta. Para mover o seletor de ferramentas da linha do tempo, clique na área pontilhada na parte superior e arraste o seletor até o local desejado.

Use as ferramentas da linha do tempo da seguinte maneira:

Ferramenta de seleção
Clique em um evento para selecioná-lo ou arraste para selecionar vários eventos. O painel de detalhes exibe mais informações sobre os eventos selecionados (nome, horário de início e duração).

Ferramenta de panorama
Arraste para movimentar a visualização da linha do tempo na horizontal e na vertical.

Ferramenta de zoom
Arraste para cima ou para baixo para, respectivamente, aumentar ou diminuir o zoom ao longo do eixo horizontal (tempo). A posição horizontal do cursor do mouse determina o centro da área onde o zoom será aplicado.

Observação:se a ferramenta de zoom permanecer ativa depois que você soltar o clique na visualização da linha do tempo para desativar a ferramenta de zoom.

Ferramenta de tempo
Arraste horizontalmente para marcar um intervalo de tempo. A duração do intervalo aparece no eixo do tempo. Para ajustar o intervalo, arraste as extremidades. Para limpar o intervalo, clique em qualquer lugar dentro da visualização da linha do tempo.

Se você selecionar outra ferramenta, o intervalo vai permanecer marcado.

Visualizador de memória

O visualizador de memória permite visualizar o pico de uso da memória e as tendências de uso de memória para o seu programa.

A interface do usuário do visualizador de memória tem esta aparência:

imagem

  1. Menu suspenso de hosts: seleciona um host de TPU e o otimizador de alto nível do XLA. (HLO) para visualizar.
  2. Visão geral da memória: mostra a alocação e o tamanho de memória de pico sem padding.
  3. Gráfico do espaço de trabalho: mostra o pico de uso da memória e um gráfico do uso da memória. tendências para seu programa. Apontar para um buffer em um dos buffers gráficos para exibir mais informações no card de alocação do buffer.
  4. Gráficos de buffer: dois gráficos que mostram a alocação de buffer no pico de uso da memória. Aponte para um buffer em um dos gráficos de buffer para mostrar mais informações no cartão de detalhes do buffer.
  5. Cartão de detalhes de alocação de buffer: mostra detalhes de alocação de um buffer.

Painel de visão geral da memória

O painel de visão geral da memória (superior) mostra o nome do módulo e a alocação de memória de pico definida quando o tamanho total de alocação do buffer atinge o máximo. O tamanho da alocação de pico sem preenchimento também é mostrado para comparação.

image

Gráfico do espaço de trabalho

Este gráfico exibe o uso máximo de memória e um gráfico das tendências de uso de memória para seu neste programa. A linha vertical indica o pico de utilização da memória para o programa. Isso os gráficos mostram se o programa cabe no espaço de memória global disponível.

imagem

Cada ponto no gráfico representa um "ponto do programa" no programa HLO do XLA. A linha mostra como o uso da memória do programa muda ao longo do tempo.

Interação com elementos do gráfico de buffer

Quando você aponta para um buffer em um gráfico de buffer, uma linha horizontal aparecendo no gráfico do espaço de trabalho mostra o ciclo de vida do buffer.

imagem

A espessura da linha horizontal indica a magnitude relativa do buffer em relação à alocação de memória de pico. O comprimento da linha indica o ciclo de vida do buffer.

Gráficos de buffer

Dois gráficos mostram o detalhamento do uso da memória no pico de uso.

imagem

  • Por ordem de programa: exibe os buffers da esquerda para a direita na ordem em em que eles estavam ativos durante a execução do programa.

  • Por tamanho: mostra os buffers que estavam ativos durante a execução do programa em ordem de tamanho decrescente.

Cartão de detalhes de alocação de buffer

Quando você aponta para um buffer exibido em um dos gráficos de buffer, aparece um cartão de detalhes de alocação de buffer. Um cartão de detalhes costuma ter a seguinte aparência:

imagem

  1. Nome: nome da operação do XLA.
  2. Categoria: a categoria da operação.
  3. Tamanho: o tamanho da alocação do buffer (incluindo preenchimento).
  4. Tamanho sem preenchimento: o tamanho da alocação do buffer sem preenchimento.
  5. Expansão: a magnitude relativa do tamanho do buffer preenchido em relação ao tamanho não preenchido.
  6. Memória extra: indica quanta memória extra é usada para preenchimento.
  7. Forma: descreve a classificação, o tamanho e o tipo de dados da matriz de N dimensões.
  8. Nome da operação do TensorFlow: mostra o nome do TensorFlow. operação associada com a alocação do buffer.
  9. Tipo de alocação: indica a categoria de alocação de buffer: parâmetro, saída, thread-local e temporário (por exemplo, alocação de buffer em uma fusão).

erros de falta de memória

Se você executar um modelo e receber a mensagem de "falta de memória" por erro, use as diretrizes neste documento para capturar um perfil. Aguarde até que o script esteja treinando o modelo antes de iniciar o perfilador. A saída de perfil pode ajudar a entender o que causou o erro.