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 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, é preciso:

  1. Iniciar uma sessão de treinamento de modelo

    1. Configurar 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
      

      Pouco antes dos 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 do criador de perfil do TensorFlow é iniciado na VM da TPU quando você executar 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, acesse a página do Cloud TPU No console do Google Cloud, selecione seu TPU e conferir o gráfico de utilização da CPU. o gráfico de utilização de CPU não mostra o uso de 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. 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 seu navegador local se comunique com o TensorBoard servidor 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. 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 {: 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

    Executar o TensorBoard e criar um diretório de registros (logdir) na VM da TPU, onde 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 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 é exibida 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 um a análise do pipeline de entrada. Há uma opção para selecionar TPUs individuais no menu suspenso 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 exibe o tempo próprio de uma operação (como a porcentagem do tempo gasto por todas as operações), tempo cumulativo, categoria, nome e taxa de FLOPS alcançado.

  • 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 você por meio da análise do dispositivo e do host para depurar qualquer estágio do pipeline é criar 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 um é a entrada para a 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 de pipeline de entrada para entender em que o pipeline de entrada é ineficiente.

Painel de pipeline de entrada

Para abrir o analisador de pipeline de entrada, selecione Perfil e clique em 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 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 processamento descompressão.
  • 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 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 ver as estatísticas de operações de entrada individuais e suas categorias detalhados por tempo de execução, expanda 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. 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 do perfil.
  3. Tempo total (em ms): mostra a soma cumulativa do tempo gasto em cada um as 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, o Iterator::PaddedBatch::Filter::ForeverRepeat::Map é chamado por Iterator::PaddedBatch::Filter. Portanto, seu total o tempo próprio é excluído do tempo próprio total dos últimos.
  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ção para identificar quais operações do XLA estão demorando mais para 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. Você pode ver os dados do Perfil das operações no TensorBoard clicando na guia Perfil no parte superior da tela e, em seguida, selecione op_profile em Ferramentas no menu suspenso. Você verá uma tela como esta:

imagem

  1. Seção de visão geral: mostra a utilização da Cloud TPU e fornece 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 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 informações 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 a porcentagem de uso do Cloud TPU. A tabela mostra a porcentagem de tempo gasto, o nome da categoria de operação, operação do TensorFlow associada nome e a porcentagem de utilização de FLOPS da categoria. Para exibir (ou oculte) 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 operações nessa 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 aparece ou oculta principais 10 operações demoradas na categoria. Se uma operação de fusão entrada é exibida na lista de operações, você pode expandi-la para ver o que não são de fusão e que contém.
  3. Operações do TensorFlow mostra o nome da operação do TensorFlow associados à 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 da tabela, um card aparece 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 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 fornece uma interpretação de algumas métricas de desempenho de um modelo com baixa utilização de FLOP. Neste exemplo, fusão e convolução de saída dominou 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 para 128 e tamanho do recurso está sendo preenchido para 8. Nesse caso, apenas 5% da matriz e como as unidades 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 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 TensorFlow; um modelo de machine learning.
  • qual parte do sistema (TPU ou máquina host) executou uma operação. Normalmente, a máquina host executa operações de entrada, e os transfere para a TPU, enquanto a TPU executa treinamento real do modelo.

O visualizador de traces permite identificar problemas de desempenho no modelo e, tomar medidas para resolvê-los. Por exemplo, é possível identificar se a alimentação ou treinamento de modelo levam 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 precisar avaliar mais eventos, use o visualizador de rastros em streaming como alternativa.

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 "Ferramentas": seleciona diferentes ferramentas de criação de perfil.
  3. Lista suspensa de hosts seleciona um host que contém uma Cloud TPU definido.
  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 mais informações das operações. selecionados no painel 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 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 no qual você pode clicar para expandir e recolher nesta 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 rastros de uso geral fornecida pelo Chrome que é usado 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ó de TPU, rotulada com o número do chip de TPU; e o núcleo da TPU no chip (por exemplo, "Chip 2: TPU Core 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.
    • Operações do XLA mostra o XLA operações 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 para linhas de execução em execução na CPU do host chamado "Host Threads". 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 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 permanecerá 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 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 preenchimento.
  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 do buffer na memória de pico. uso. Aponte para um buffer em um dos gráficos de buffer para exibir 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.

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. O mostra como o uso de memória do seu programa muda com o tempo.

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

Quando você aponta para um buffer em gráficos de buffer, uma imagem horizontal linha mostrando que o tempo de vida do buffer aparece no gráfico do espaço de trabalho.

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 de 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: exibe os buffers que estavam ativos durante a execução do programa. em ordem decrescente de tamanho.

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

Quando você aponta para um buffer exibido em um dos gráficos de buffer, um buffer o card de detalhes de alocação é exibido. 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 versus o não preenchido tamanho.
  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 do N-dimensional matriz.
  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 do buffer: Parâmetro, saída, thread-local e temporária (por exemplo, buffer alocação 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. Aguardar até que o script esteja treinando o modelo antes de iniciar o criador de perfil. A saída da criação de perfil pode ajudar você a entender causou o erro.