Criar o perfil do modelo nas VMs do Cloud TPU
A criação de perfil permite otimizar a performance de treinamento do modelo em Cloud TPUs. Você usa o TensorBoard e o plug-in do TensorBoard para Cloud TPU para criar o perfil do modelo.
Para mais informações sobre como usar o TensorBoard com uma das estruturas compatíveis, 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:
Iniciar uma sessão de treinamento de modelo
- Configure uma TPU v4-8 para treinar um modelo. O procedimento de criação de perfil descrito neste documento usa um modelo ResNet, mas você pode usar outro modelo, desde que ele seja treinado em uma TPU v4.
Na VM da TPU, adicione uma linha para iniciar o servidor do criador de perfil ao script de treinamento.
Para o treinamento da 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 dos scripts iniciarem o ciclo 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 de criador de perfil do TensorFlow é iniciado na VM da TPU quando você executa o script.
Inicie o treinamento de modelo.
Execute o script de treinamento e aguarde até que a saída indique 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 confira o gráfico de utilização da CPU. Embora o gráfico de utilização da CPU não mostre a utilização da TPU, ele é uma boa indicação de que a TPU está treinando o modelo.
Começar a criar o perfil do treinamento de modelo
Quando o modelo estiver sendo treinado, abra uma janela de terminal separada ou o Cloud Shell. Siga as etapas abaixo para começar a criar o perfil do treinamento de modelo.
Na nova janela ou shell, conecte-se à VM do 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 do TPU.
Instale os requisitos do TensorFlow.
A VM de 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 do TPU executando:
pip3 install -r /usr/share/tpu/models/official/requirements.txt
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
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 diretório de registro usando a flag--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.
Capturar um perfil em VMs de TPU
- Selecione o botão CAPTURE PROFILE.
- Selecione o botão de opção Endereço IP.
- Digite HOSTNAME:6000 no campo
Profile Service URL
. - Selecione o botão CAPTURE.
Conferir dados de perfil com o TensorBoard
Depois de capturar um perfil, o TensorBoard mostra a página overview_page. A lista de ferramentas de criação de perfil que você pode usar é exibida no painel à esquerda.
Perfil
A guia Perfil é exibida depois que você captura alguns dados do modelo. Pode ser necessário clicar no botão "Atualizar" na página do TensorBoard. Quando os dados ficam disponíveis, clicar na guia Perfil apresenta uma seleção de ferramentas que ajudam na análise de desempenho. Você pode usar qualquer uma das ferramentas a seguir para criar o perfil do modelo.
- Página de visão geral
- Analisador do pipeline de entrada
- Perfil de operação do XLA
- Visualizador de traces (somente navegador Chrome)
- Visualizador de memória
Página de visão geral do perfil
A página de visão geral (overview_page), disponível na página Perfil, mostra uma visão de nível superior de como o modelo se saiu 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:
Resumo de desempenho
- Utilização de FLOPS: a porcentagem de utilização das unidades de matriz da TPU.
10 principais operações do TensorFlow na TPU. Mostra as 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 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 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:
- leitura de arquivos
- Pré-processamento de arquivos (opcional)
- 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 no 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 etapa do dispositivo aguardando 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.
- Outras leituras ou processamentos de dados Tempo gasto em outras operações relacionadas à entrada
que não usam
tf.data
.
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:
Cada entrada da tabela contém as seguintes informações:
- Operação de entrada: mostra o nome da operação de entrada do TensorFlow.
- Contagem: mostra o número total de instâncias da operação executada durante o período de criação de perfil.
- Tempo total (em ms): mostra a soma cumulativa do tempo gasto em cada uma das instâncias de operação.
- Porcentagem do tempo total: mostra o tempo total gasto na operação como uma fração do tempo total gasto no processamento das entradas.
- 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 porIterator::PaddedBatch::Filter
, portanto, o tempo próprio total da primeira é excluído do tempo próprio total da segunda. - Porcentagem de tempo próprio total: mostra o tempo próprio total como uma fração do tempo total gasto no processamento das entradas.
- 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 alvos 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 "Op Profile" 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:
- Seção de visão geral: mostra a utilização do Cloud TPU e fornece sugestões para otimização.
- 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 elas são classificadas.
- Tabela de operações Lista as principais categorias de operações do TensorFlow associadas às operações do XLA. Essas operações são classificadas por porcentagem de uso do Cloud TPU.
- Cards de detalhes da operação: mostram 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 na ordem do maior uso para o menor uso do Cloud TPU, em porcentagem. 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 triângulo ao lado do nome da categoria na tabela.
- Tempo: mostra a porcentagem total de tempo gasto por todas as operações da categoria. Clique para expandir a entrada e ver o detalhamento do tempo gasto por cada operação individual.
- Top ten Ops: o botão de alternância ao lado do nome de uma categoria que mostra ou oculta as dez operações mais 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 ver as operações elementares, que não são de fusão, que ela contém.
- Operação do TensorFlow: mostra o nome da operação do TensorFlow associada à operação do XLA.
- FLOPS: mostra a utilização de FLOPS, que é o número medido de FLOPS expresso como 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 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:
- 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 a expressão do XLA que contém a operação.
- Utilização da memória: mostra 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 preenchimento realizado pelo compilador XLA.
Como interpretar resultados
Para operações de convolução, a baixa utilização de FLOPS de TPU pode ser devido a um ou ambos dos seguintes motivos:
- Preenchimento (as unidades da matriz são usadas parcialmente).
- A 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.
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 deste exemplo com %convolution.340 do exemplo 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 de modelo real.
Com o visualizador de traces, é possível identificar problemas de desempenho do modelo e tomar providências para resolvê-los. Por exemplo, de modo geral, é possível identificar se a entrada ou treinamento de modelo está tomando a maior parte do tempo. Em uma análise mais detalhada, é possível identificar quais operações do TensorFlow estão demorando mais para serem executadas.
O visualizador de rastros está limitado a um 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:
Essa tela contém os seguintes elementos principais (marcados com números na captura de tela anterior):
- Menu suspenso "Runs": contém todas as execuções para as quais você capturou informações de trace. A visualização padrão é a execução mais recente, mas é possível abrir o menu suspenso para selecionar outra execução.
- Menu suspenso "Tools": seleciona diferentes ferramentas de criação de perfil.
- Lista suspensa "Host": seleciona um host que contém um conjunto da Cloud TPU.
- Painel de linha do tempo: mostra as operações que o Cloud TPU e a máquina host executaram ao longo do tempo.
- 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:
O painel da linha do tempo contém os seguintes elementos:
- Barra superior: contém vários controles auxiliares.
- Eixo do tempo: mostra o tempo em relação ao início do trace.
- 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.
- Seletor de ferramentas: contém várias ferramentas para interagir com o visualizador de rastros.
- Eventos: mostra o tempo de execução de uma operação ou a duração dos metaeventos, como as etapas de treinamento.
- Barra de guia vertical: não tem uma finalidade útil para a 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 executadas 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 é convertida 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 botão do mouse, clique na visualização da linha do tempo para desativar a ferramenta. |
|
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 que você visualize o pico de uso de memória e as tendências de uso de memória do programa.
A interface do usuário do visualizador de memória tem esta aparência:
- Menu suspenso Host: seleciona um host de TPU e módulos do otimizador de alto nível (HLO, na sigla em inglês) do XLA para visualização.
- Visão geral da memória: mostra a alocação de memória de pico e o tamanho sem preenchimento.
- Gráfico de espaço de trabalho: mostra o uso de memória de pico e um gráfico das tendências de uso de memória do programa. Aponte para um buffer em um dos gráficos de buffer para mostrar mais informações no cartão de alocação de buffer.
- 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.
- 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.
Gráfico do espaço de trabalho
Esse gráfico mostra o uso de memória de pico e um gráfico das tendências de uso de memória do programa. A linha vertical indica a utilização da memória de pico do programa. Esse gráfico mostra se o programa pode se ajustar ao espaço de memória global disponível.
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 aparece no gráfico do espaço de trabalho mostrando o ciclo de vida do buffer.
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.
Por ordem de programa: mostra os buffers da esquerda para a direita na ordem 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:
- Nome: nome da operação do XLA.
- Categoria: a categoria da operação.
- Tamanho: o tamanho da alocação do buffer (incluindo preenchimento).
- Tamanho sem preenchimento: o tamanho da alocação do buffer sem preenchimento.
- Expansão: a magnitude relativa do tamanho do buffer preenchido em relação ao tamanho não preenchido.
- Memória extra: indica quanta memória extra é usada para preenchimento.
- Forma: descreve a classificação, o tamanho e o tipo de dados da matriz de N dimensões.
- Nome da operação do TensorFlow: mostra o nome da operação do TensorFlow associada à alocação do buffer.
- 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 um erro de "memória insuficiente", use as diretrizes deste 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.