Criar perfil do modelo em VMs do Cloud TPU

A criação de perfil permite otimizar o desempenho do treinamento do modelo nas Cloud TPUs. Use o TensorBoard e o 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 documentos a seguir:

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

Antes de usar as ferramentas de criação de perfil da TPU, é preciso:

  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 seja treinado em uma TPU v4.
    2. Na VM da TPU, adicione uma linha para iniciar o servidor do criador de perfil no 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 o script iniciar o loop de treinamento, adicione a linha destacada:

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

      O servidor do criador 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é ver a saída indicando que o modelo está sendo treinado ativamente. A saída depende do código e do 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 veja o gráfico de utilização da CPU. O gráfico de utilização da CPU não mostra a utilização da TPU, mas é 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. Use as etapas a seguir para começar a criar o perfil do treinamento de 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 o navegador local se comunique com o servidor do TensorBoard em execução na VM da TPU.

  2. Instale os requisitos do TensorFlow {: id="install-tensorboard"}.

    Sua VM da TPU tem o TensorBoard instalado por padrão. Também é possível instalar o TensorFlow manualmente. De qualquer forma, algumas dependências adicionais podem ser necessárias. Instale essas 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 {: id="install-plugin"}.

    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. Inicie o servidor do TensorBoard

    Execute o TensorBoard e crie um diretório de registros (logdir) na VM da TPU em que o TensorBoard possa gravar dados de criação de perfil. Especifique o diretório de registros 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. Selecione 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 tools, na barra lateral esquerda.

imagem

Capturar um perfil em VMs da 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

Ver dados de perfil com o TensorBoard

Depois que você captura um perfil, o TensorBoard exibe a overview_page. A lista de ferramentas de criação de perfil que podem ser usadas é exibida no painel esquerdo.

imagem

Perfil

A guia Perfil será exibida depois que você capturar alguns dados do modelo. Talvez seja necessário clicar no botão "Atualizar" na página do TensorBoard. Quando os dados estiverem disponíveis, clicar na guia Perfil apresenta uma seleção de ferramentas para ajudar na análise de desempenho. É possível usar qualquer uma das ferramentas a seguir para criar o perfil do modelo.

Página de visão geral do perfil

Na página de visão geral (overview_page), disponível na página Perfil, você tem uma visã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:

imagem

  • 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 as operações do TensorFlow que consumiram mais tempo:

    Cada linha exibe 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 alcançada.

  • 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 e pode orientar a análise do dispositivo e do host para depurar qualquer estágio do pipeline que esteja 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 do 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 um estágio é a entrada para o próximo. 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 de 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, input_pipeline_analyzer na lista suspensa 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 tempo 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 do host divididos 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 descompactação da imagem.
  • 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 sob 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 à entrada que não usam tf.data.

imagem

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

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

imagem

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

  1. Op. de entrada mostra o nome da operação do TensorFlow referente à operação de entrada.
  2. Contagem: mostra o número total de instâncias da operação executadas durante o período de criação de perfil.
  3. Tempo total (em ms): mostra a soma cumulativa do tempo gasto em cada instância de operação.
  4. Porcentagem de tempo total: mostra o tempo total gasto em uma operação como uma fração do tempo total gasto no processamento de 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, o Iterator::PaddedBatch::Filter::ForeverRepeat::Map é chamado por Iterator::PaddedBatch::Filter, portanto, o tempo próprio total é excluído do tempo próprio total desta.
  6. Porcentagem de tempo próprio total: mostra o tempo próprio total como uma fração do tempo total gasto no processamento das 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ção 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. Para ver os dados do Perfil das operações no TensorBoard, clique na guia Perfil na parte superior da tela e selecione 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 sugestões de 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 são classificadas.
  3. Tabela de operações: lista as principais categorias de operação do TensorFlow associadas às operações do XLA. Essas operações são classificadas por porcentagem de uso do Cloud TPU.
  4. Cards de detalhes da operação: mostra detalhes sobre as 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 de uso do Cloud TPU. A tabela mostra a porcentagem de tempo gasto, o nome da categoria de operação, o nome da operação do TensorFlow associada e a porcentagem de utilização de FLOPS da categoria. Para exibir (ou ocultar) as dez operações XLA mais demoradas de uma categoria, clique no triângulo ao lado do nome da categoria na tabela.

imagem

  1. Tempo mostra a porcentagem total de tempo gasto por todas as operações na categoria. Clique para expandir a entrada e ver o detalhamento do tempo gasto por cada operação individual.
  2. Dez principais operações: o botão ao lado do nome de uma categoria que exibe ou oculta as dez principais operações demoradas da categoria. Se uma entrada de operação de fusão for exibida na lista de operações, será possível expandi-la para conferir as operações que não são de fusão, com elementos que ela contém.
  3. Operações 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 expresso como uma porcentagem de FLOPS de pico do 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 da tabela, é exibido um cartão exibindo detalhes sobre a operação do XLA ou a categoria da operação. Um cartão costuma ter a seguinte aparência:

imagem

  • Nome e Categoria: mostra o nome e a categoria da operação do XLA destacada.
  • Utilização de FLOPS: exibe a utilização de FLOPS como porcentagem do total de FLOPS possível.
  • Expressão: mostra a expressão XLA que contém a operação.
  • Uso da memória: exibe a porcentagem de pico de uso da memória pelo programa.
  • Layout (somente operações de convolução) mostra a forma e o layout de um tensor, incluindo uma descrição de qualquer padding 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 ambos os motivos a seguir:

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

Nesta seção, apresentamos uma interpretação de algumas métricas de desempenho de um modelo com baixa utilização do FLOP. Neste exemplo, a fusão e a convolução de saída dominaram o tempo de execução. Muitas operações vetoriais ou escalares tinham baixa utilização do 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 para 128 e o tamanho do elemento está sendo preenchido para 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 deste exemplo com %convolution.340 do exemplo anterior, que não usa preenchimento.

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 executadas pelo 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 de modelo real.

Com o visualizador de traces, é possível identificar problemas de desempenho no modelo e tomar medidas para resolvê-los. Por exemplo, em um nível alto, é possível identificar se a entrada ou o treinamento de modelo está levando mais tempo. Com o detalhamento, é possível identificar quais operações do TensorFlow estão demorando mais para serem executadas.

O visualizador de traces está limitado a 1 milhão de eventos para cada Cloud TPU. Se precisar 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 na lista suspensa 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 com capturas de informações de rastreamento. A visualização padrão é a execução mais recente, mas é possível abrir o menu suspenso para selecionar uma execução diferente.
  2. Menu suspenso "Ferramentas": seleciona diferentes ferramentas de criação de perfil.
  3. Lista suspensa de hosts seleciona um host que contém um conjunto de Cloud TPU.
  4. O painel Linha do tempo mostra as operações que o Cloud TPU e a máquina host executaram ao longo do tempo.
  5. Painel de detalhes: mostra mais informações sobre as operações selecionadas no painel da linha do tempo.

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

imagem

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

  1. Barra superior: contém vários controles auxiliares.
  2. Eixo de tempo: mostra o tempo em relação ao início do rastreamento.
  3. Rótulos de seção e faixa. Cada seção contém várias faixas e tem um triângulo à esquerda em que você pode clicar para abrir e fechar 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 traces.
  5. Eventos mostra o tempo de execução de uma operação 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 rastros 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 em execução na TPU.
    • Operações do TensorFlow: mostra as operações do TensorFlow executadas na TPU.
    • Operações do XLA: mostra as operações do XLA 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 linhas de execução na CPU do host, rotulada como "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 botão do mouse, clique na visualização da linha do tempo para desativá-la.

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 permanece marcado.

Visualizador de memória

O visualizador de memória permite visualizar o uso de memória de pico e as tendências de uso de memória do 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 módulos do otimizador de alto nível (HLO, na sigla em inglês) do XLA para visualizar.
  2. Visão geral da memória mostra a alocação e o tamanho de memória de pico sem preenchimento.
  3. Gráfico do espaço de trabalho: exibe o pico de uso da memória e um gráfico das tendências de uso da memória para o programa. Aponte para um buffer em um dos gráficos de buffer para exibir mais informações no cartão de alocação de buffer.
  4. Gráficos de buffer: dois gráficos que exibem a alocação de buffer no pico de uso da memória. Aponte para um buffer em um dos gráficos de buffer para exibir mais informações no card de detalhes do buffer.
  5. Card 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.

imagem

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 da memória para seu programa. A linha vertical indica o pico de utilização da memória para o programa. Este gráfico mostra se seu programa pode caber 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 gráficos de buffer, uma linha horizontal mostrando o ciclo de vida do buffer aparece no gráfico de espaço de trabalho.

imagem

A espessura da linha horizontal indica a magnitude relativa do tamanho 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 de memória no pico de uso.

imagem

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

  • Por tamanho: exibe 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, é exibido um card de detalhes de alocação de buffer. Um cartão de detalhes costuma ter a seguinte aparência:

imagem

  1. Nome: o 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 não preenchido: 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 da operação do TensorFlow associada à alocação do buffer.
  9. Tipo de alocação: indica a categoria de alocação do buffer: parâmetro, saída, linha de execução local e temporária (por exemplo, alocação de buffer em uma fusão).

erros de falta de memória

Se você executar um modelo e receber um erro "falta de memória", use as diretrizes neste documento para capturar um perfil. Aguarde o script treinar o modelo antes de iniciar o criador de perfil. A saída da criação de perfil pode ajudar você a entender o que causou o erro.