Ferramentas do Cloud TPU

Neste documento, abordamos como configurar e executar ferramentas de criação de perfil. Para isso, capturamos um perfil e o usamos para identificar e analisar o desempenho do programa no Cloud TPU pelo console TensorBoard do TensorFlow. Neste documento, também descrevemos como monitorar continuamente seu job de TPU na linha de comando (consulte Como monitorar seu job).

Pré-requisitos

Para poder usar as ferramentas de criação de perfil do Cloud TPU descritas neste guia, é preciso concluir as seguintes etapas:

Como usar as ferramentas do Cloud TPU no TensorBoard

O TensorBoard é um conjunto de ferramentas projetadas para apresentar visualmente os dados do TensorFlow. Fornecemos um conjunto de ferramentas de criação de perfil do Cloud TPU que você acessa a partir do TensorBoard depois de instalar o plug-in criador de perfil do Cloud TPU. O plug-in aceita a visualização de desempenho de nós do Cloud TPU de todos os tamanhos.

O seletor de ferramentas do Cloud TPU fica disponível na guia Perfil, na barra de menu do TensorBoard, somente após a coleta das informações de trace de um modelo do TensorFlow em execução.

Nas seções a seguir, veja instruções sobre como configurar seu ambiente de computação, executar seu modelo e capturar um perfil do Cloud TPU e executar o TensorBoard a partir de uma linha de comando da VM para poder usar as ferramentas. Para detalhes sobre como invocar o TensorBoard pelo código, consulte os guias de programação do TensorBoard.

Como criar recursos do Cloud TPU

Nas instruções de início rápido do Cloud TPU, saiba como criar uma VM do Compute Engine e recursos do Cloud TPU.

Se você planeja continuar com os procedimentos deste guia imediatamente após criar seus recursos, não execute a seção de limpeza correspondente. Ao encerrar a execução do modelo e terminar de usar seus recursos, siga as etapas de instruções de limpeza para evitar incorrer em cobranças indesejadas.

Como executar o cloud_tpu_profiler

Execute o cloud-tpu-profiler 1.14 para fornecer um plug-in de criação de perfil do Cloud TPU no TensorBoard e um script, capture-tpu-profile. É possível executar o script para capturar um perfil que possa ser exibido no TensorBoard ou para monitorar seus jobs de TPU na linha de comando (consulte Como monitorar seu job).

No TensorBoard, a guia Perfil aparece depois que você executa um modelo e, em seguida, executa as informações de perfil de captura (trace) enquanto o modelo está em execução.

Para conferir a versão do seu criador de perfil, use pip. Se não tiver a versão mais recente, use o segundo comando para instalá-la:

(vm)$ pip freeze | grep cloud-tpu-profiler
(vm)$ pip install --upgrade "cloud-tpu-profiler>=1.14"

Também é preciso definir a variável de ambiente PATH da seguinte maneira:

(vm)$ export PATH="$PATH:`python -m site --user-base`/bin"

Sobre o capture_tpu_profile

Quando você usa o capture_tpu_profile para capturar um perfil, um arquivo .tracetable é salvo no seu intervalo do Google Cloud Storage. O arquivo contém um grande número de eventos de trace que é possível visualizar no visualizador de traces e no visualizador de traces em streaming no TensorBoard.

Para capturar um perfil ou rastrear dados, execute seu modelo, execute capture_tpu_profile e, em seguida, inicie o TensorBoard antes do término da execução do modelo. Exemplo:

(vm)$ 
capture_tpu_profile --tpu=$TPU_NAME --logdir=${MODEL_DIR}

Os parâmetros, configurados quando você executa o modelo, têm os seguintes significados:

  • --tpu=$TPU_NAME: nome atribuído quando você cria o Cloud TPU. Se você usou ctpu up para iniciar a VM do Compute Engine e o Cloud TPU, o padrão será seu nome de usuário. Se você usou gcloud ou o Console do Cloud para configurar sua VM e sua TPU, é o nome que você especificou ao criá-las.
  • --logdir=${MODEL_DIR}: um local do Cloud Storage em que seu modelo e os pontos de verificação são armazenados. O diretório do modelo geralmente é definido como
    export STORAGE_BUCKET=gs://[YOUR-BUCKET-NAME]
    export MODEL_DIR=${STORAGE_BUCKET}/OUTPUT DIRECTORY
    Por exemplo, se você estiver executando o modelo MNIST, o diretório de saída poderá ser definido como:
    export STORAGE_BUCKET=gs://[YOUR-BUCKET-NAME]
    export MODEL_DIR=${STORAGE_BUCKET}/mnist

À medida que o modelo é executado, a conta de serviço do Cloud TPU cria um diretório (objeto) e grava dados no seu intervalo do Compute Engine. É preciso definir permissões para essa conta no intervalo antes de executar o modelo.

Por padrão, capture_tpu_profile captura um trace de dois segundos. Para definir a duração do trace, use a opção de linha de comando duration_ms ou seu programa ao executar o modelo.

Como capturar um perfil

Nas etapas desta seção, descrevemos como capturar um perfil executando seu modelo, executando capture_tpu_profile e iniciando o TensorBoard antes do término da execução do modelo. A execução do TensorBoard, conforme descrito aqui, dá acesso a todas as ferramentas de Perfil, exceto o visualizador de rastros em streaming.

Se preferir monitorar seus jobs de TPU na linha de comando, consulte Como monitorar seu job.

O tutorial MNIST é usado como modelo neste exemplo.

  1. Execute ctpu up.

  2. Acesse o painel do Console do Cloud (Página inicial) e selecione Compute Engine > TPUs.

  3. Clique no Cloud TPU que você criou.

  4. Localize o nome da conta de serviço do Cloud TPU e copie-o, por exemplo:

    service-11111111118@cloud-tpu.iam.myserviceaccount.com

  5. No painel Recursos, clique em Cloud Storage. A lista do intervalo de armazenamento é exibida ou você é solicitado a criar um intervalo. Se você ainda não criou um intervalo de armazenamento, clique em CRIAR INTERVALO na parte superior da página e crie um na mesma região da sua TPU.

  6. Clique na caixa de seleção do intervalo de armazenamento que pretende usar. Verifique se o intervalo está na mesma região em que você criou o Cloud TPU.

  7. Com seu intervalo de armazenamento selecionado na lista, selecione Mostrar painel de informações e, em seguida, selecione Editar permissões do intervalo.

  8. Cole seu nome de conta de serviço da TPU no campo adicionar membros desse intervalo.

  9. Selecione Legado do Storage e, em seguida, selecione as permissões Leitor, Gravador e Proprietário de intervalo legado do Storage:

    imagem

  10. No shell da VM, use pip para verificar a versão do TensorBoard.

    (vm)$ pip freeze | grep tensorboard
    
  11. Se sua versão TensorBoard for anterior à 1.14, instale a versão mais recente do TensorFlow para fazer upgrade da versão do TensorBoard.

    (vm)$ pip install --upgrade "tensorboard>=1.14"
  12. Se você ainda não fez isso, defina a variável de ambiente PATH:

    (vm)$ export PATH="$PATH:`python -m site --user-base`/bin" 
  13. Siga o tutorial MNIST para configurar e executar um job de treinamento MNIST, por exemplo:

    (vm)$ python /usr/share/models/official/mnist/mnist_tpu.py \
      --tpu=$TPU_NAME \
      --data_dir=${STORAGE_BUCKET}/data \
      --model_dir=${MODEL_DIR} \
      --use_tpu=True \
      --iterations=500 \
      --train_steps=5000 
  14. Com o job em execução, abra um novo Cloud Shell e execute ctpu up, especificando seu nome de TPU não padrão, se tiver usado um. Depois de fazer login na sua VM, configure as seguintes variáveis ambientais conforme mostrado nas etapas anteriores: STORAGE_BUCKET, MODEL_DIR.

  15. Com o job em execução, abra um terceiro Cloud Shell e execute ssh na VM (substitua $vm no comando pelo nome da VM).

    gcloud compute ssh $vm --ssh-flag=-L6006:localhost:6006 

    Depois de fazer login, configure as seguintes variáveis de ambiente, conforme mostrado nas etapas anteriores: TPU_NAME, STORAGE_BUCKET, MODEL_DIR.

  16. No segundo Cloud Shell, execute capture_tpu_profile para capturar um arquivo .tracetable.

    (vm)$ capture_tpu_profile --tpu=$TPU_NAME --logdir=${MODEL_DIR} 
  17. No terceiro Cloud Shell, execute o TensorBoard e aponte-o para o diretório do modelo:

    (vm)$ tensorboard --logdir=${MODEL_DIR} & 
  18. Clique no botão Visualização da Web no segundo Cloud Shell e abra a porta 8080 para ver a saída do TensorBoard.

Gráficos

O TensorBoard fornece uma variedade de visualizações, ou gráficos, do seu modelo e o desempenho de cada. Use os gráficos junto com as ferramentas de criação de perfil para ajustar seus modelos e melhorar o desempenho deles no Cloud TPU.

Gráfico da estrutura XLA

Durante a compilação do modelo, antes que ele seja executado, o TensorFlow gera um gráfico (XLA) que será executado no Cloud TPU. Os dados do gráfico são armazenados no diretório MODEL_DIR. É possível visualizar esse gráfico sem executar capture_tpu_profile.

Para visualizar o gráfico da estrutura XLA de um modelo, selecione a guia Gráficos no TensorBoard. A seleção padrão de Cor é Estrutura.

imagem

Um único nó no gráfico da estrutura representa uma instrução do XLA. Por exemplo, uma operação de adição do TensorFlow denominada x/y/z, que é mapeada (ou reduzida) para o XLA, aparece como x/y/z/add no gráfico.

Em um gráfico XLA, você vê informações sobre como uma TPU executará um modelo específico. O gráfico também fornece as formas de entradas e saídas de várias operações. Depois de capturar um perfil do seu modelo, use o gráfico XLA com o visualizador de traces ou visualizador de traces em streaming para ver onde a maior parte do tempo está sendo gasto.

Observações:

  • Alguns nós não têm namespaces do TensorFlow porque nem todas as instruções do XLA (como as injetadas pelo compilador XLA) têm operações do TensorFlow correspondentes.
  • A estrutura do programa do TensorFlow é incorporada no gráfico XLA sempre que possível. Porém, como o programa XLA em execução no Cloud TPU é altamente otimizado, a estrutura do gráfico correspondente pode ser muito diferente da estrutura do programa original do TensorFlow.
  • Uma instrução especial do XLA, denominada fusion, pode mesclar várias instruções de diferentes operações do TensorFlow em um único cálculo. A operação do TensorFlow correspondente à instrução raiz na fusão é usada como o namespace da operação de fusão.

Gráfico de compatibilidade com TPU

A guia Gráficos inclui um módulo verificador de compatibilidade que verifica e exibe as operações do TensorFlow que podem causar problemas quando um modelo é executado.

Para visualizar o gráfico de compatibilidade com TPU de um modelo, selecione a guia Gráficos no TensorBoard e, em seguida, selecione a opção Compatibilidade com TPU. No gráfico, vemos as operações compatíveis (válidas) em verde e as operações incompatíveis (inválidas) em vermelho.

imagem

As duas cores podem aparecer para um determinado nó, cada uma como uma porcentagem das operações de compatibilidade do Cloud TPU. Consulte Como interpretar os resultados de compatibilidade para ver um exemplo.

O painel de resumo de compatibilidade exibido à direita do gráfico contém a porcentagem de todas as operações compatíveis com o Cloud TPU, os respectivos atributos e uma lista de operações incompatíveis com um nó selecionado.

Clique em qualquer operação no gráfico para exibir os respectivos atributos no painel de resumo.

imagem

Observe que o verificador de compatibilidade não avalia qualquer operação explicitamente atribuída a um dispositivo não TPU usando o posicionamento manual de dispositivo. Além disso, como o verificador não compila o modelo para execução, certifique-se de interpretar os resultados como uma estimativa de compatibilidade.

Pré-requisitos
  • Configure seu modelo para que grave os dados do próprio gráfico em um arquivo definindo a propriedade model_dir da API tf.estimator ou o TPUEstimator.
  • Remova quaisquer atribuições manuais em seu código para GPUs ou CPUs referentes a operações que você pretende executar no Cloud TPU. Quando usado com a opção Compatibilidade com TPU, o verificador de compatibilidade ignora qualquer operação explicitamente atribuída a não TPUs.
Como interpretar os resultados de compatibilidade

No diagrama a seguir, do modelo Abalone, temos um exemplo de resumo de compatibilidade com várias operações indisponíveis observadas:

imagem

Nenhum posicionamento manual de dispositivo foi especificado para esse modelo, portanto, todas as operações foram verificadas, mesmo as que sempre devem ser executadas na CPU, como as operações "save" e "report_uninitialized_variables" mostradas.

Duas operações AssignAdd em root_mean_squared_error são problemas possíveis.

No código-fonte, veja que root_mean_squared_error é usado apenas como uma métrica de avaliação extra:

    # Calculate root mean squared error as additional eval metric
    eval_metric_ops = {
        "rmse": tf.metrics.root_mean_squared_error(
            tf.cast(labels, tf.float64), predictions)
    }

A menos que ocorra dentro de um loop de treinamento, essa operação costuma ser executada na CPU, então é possível desconsiderar o relatório de erros. Concluímos, então, que o modelo está pronto para ser executado em uma TPU.

Perfil

A guia Perfil, criada quando você executou capture_tpu_profile, aparece no TensorBoard somente após a captura de alguns dados do modelo. Quando os dados ficam disponíveis, clicar na guia Perfil apresenta uma seleção de ferramentas que ajudam na análise de desempenho:

Página de visão geral do perfil

Na página de visão geral (overview_page), disponível em Perfil, você tem uma visão de nível superior de como foi o desempenho do seu modelo durante uma execução de captura. Na página, há uma página de visão geral agregada para todas as TPUs, bem como uma análise geral do pipeline de entrada. Há a opção de selecionar TPUs individuais na lista suspensa Host.

Na página, há dados nos seguintes painéis:

imagem

  • Resumo de desempenho

    • Duração média da etapa abrangendo todas as etapas da amostra
    • Porcentagem de tempo em que o host ficou ocioso
    • Porcentagem de tempo em que a TPU ficou ociosa
    • Porcentagem de utilização das unidades da matriz de TPU
  • Gráfico de duração da etapa. Exibe um gráfico da duração da etapa do dispositivo (em milissegundos) que abrange todas as etapas da amostra. A área azul corresponde à parte da duração em que as TPUs permaneceram ociosas aguardando os dados de entrada do host. A área laranja corresponde ao tempo em que o Cloud TPU realmente funcionou.

  • 10 principais operações do TensorFlow na TPU. Exibe as operações do TensorFlow que consumiram mais tempo. Clicar no botão Mostrar tabela exibe uma tabela como a seguinte:

    imagem

    Cada linha exibe a duração própria de uma operação (como 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

    • Número de hosts usados
    • Tipo de TPU usada
    • Número de núcleos de TPU
    • Tamanho do lote de treinamento
  • Recomendação para as próximas etapas. Informa quando um modelo é limitado pela entrada e sempre que ocorrem problemas com o Cloud TPU. Sugere ferramentas para localizar gargalos de desempenho.

Analisador do pipeline de entrada

O analisador de pipeline de entrada fornece insights sobre seus resultados de desempenho. A ferramenta exibe resultados de desempenho do arquivo input_pipeline.json, coletado pela ferramenta capture_tpu_profile.

A ferramenta informa imediatamente se o programa é limitado pela entrada, podendo orientá-lo na análise nos lados 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 (em inglês) para ter um insight mais profundo sobre como otimizar o desempenho do pipeline.

Pipeline de entrada

Quando um programa do TensorFlow lê dados de um arquivo, ele começa na parte superior do gráfico do TensorFlow e prossegue de maneira segmentada. O processo de leitura é dividido em vários estágios de processamento de dados conectados em série, em que a saída de um estágio é a entrada do 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 pipeline 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 detectar o local em que 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 na lista suspensa Ferramentas.

O painel contém três seções:

imagem

  1. Resumo. Resume o pipeline de entrada geral, informando se o aplicativo é limitado pela entrada e, em caso afirmativo, até que ponto.
  2. Análise no lado do dispositivo. Exibe os resultados detalhados da análise no lado do dispositivo, incluindo a duração de etapa do dispositivo e o tempo gasto por ele na espera pelos dados de entrada nos núcleos de cada etapa.
  3. Análise no lado do host. Mostra uma análise detalhada no lado do host, incluindo um detalhamento do tempo de processamento de entrada no host.
Resumo do pipeline de entrada

Na seção 1, ficamos sabendo se o programa é limitado por entrada observando a porcentagem de tempo gasto pelo dispositivo na espera pela entrada do host. Se você estiver usando um pipeline de entrada padrão que tenha sido instrumentado, a ferramenta informará onde será gasta a maior parte do tempo de processamento de entrada. Exemplo:

imagem

Análise no lado do dispositivo

Na seção 2, veja os detalhes da análise no lado do dispositivo, com insights sobre o tempo gasto no dispositivo em relação ao host e quanto tempo de dispositivo foi gasto na espera pelos dados de entrada do host.

imagem

  1. Duração da etapa traçada em relação ao número de etapas. Exibe um gráfico da duração da etapa do dispositivo (em milissegundos) que abrange todas as etapas da amostra. A área azul corresponde à parte da duração da etapa em que as TPUs permaneceram ociosas esperando pelos dados de entrada do host. A área laranja corresponde ao tempo em que o Cloud TPU realmente funcionou.
  2. Estatísticas de duração da etapa. Informa a média, o desvio padrão e o intervalo ([mínimo, máximo]) da duração da etapa do dispositivo.
  3. Tempo gasto pelo dispositivo nos núcleos à espera de dados de entrada, por número de etapas. Exibe um gráfico de linhas com a quantidade de tempo do dispositivo (expresso como porcentagem do tempo total da etapa do dispositivo) gasto na espera pelo processamento de dados de entrada. Como a fração do tempo gasto varia de núcleo para núcleo, o intervalo de frações de cada núcleo também é traçado para cada etapa. Como o tempo gasto por uma etapa é determinado pelo núcleo mais lento, convém que o intervalo seja o menor possível.
  4. Fração do tempo de espera pelos dados de entrada. Informa a média, o desvio padrão e o intervalo ([mínimo, máximo]) da fração de tempo gasto pelo dispositivo à espera dos dados de entrada normalizados em relação à duração total das etapas do dispositivo.
Análise no lado do host

Na seção 3, veja os detalhes da análise no lado do host, com o detalhamento do tempo de processamento de entrada (o tempo gasto nas operações da API Dataset) no host em várias categorias:

  • 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 antecipada de dados de arquivos. Tempo gasto na leitura de arquivos, incluindo armazenamento em cache, pré-busca e intercalação.
  • Pré-processamento de dados. Tempo gasto em operações de pré-processamento, como descompactação de imagens.
  • Enfileiramento de dados a serem transferidos para o dispositivo. Tempo gasto para colocar dados em uma fila de entrada antes de transferi-los para o dispositivo.

imagem

Para ver as estatísticas de operações de entrada individuais e respectivas categorias divididas por tempo de execução, clique no botão "Mostrar estatísticas das operações de entrada".

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

imagem

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 executadas durante o período de criação de perfil.
  3. Tempo total (em ms). Mostra a soma cumulativa do tempo gasto em cada uma dessas instâncias.
  4. Porcentagem do tempo total. Mostra o tempo total gasto em uma operação como fração do tempo total gasto no processamento da entradas.
  5. Tempo próprio total (em ms). Mostra a soma cumulativa do tempo próprio gasto em cada uma das instâncias. O tempo próprio mede o tempo gasto no corpo da função, excluindo o tempo gasto na função chamada. Por exemplo, Iterator::PaddedBatch::Filter::ForeverRepeat::Map é chamada por Iterator::PaddedBatch::Filter, portanto, o tempo próprio total daquela é 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 (op_profile) é 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ções mostra:

  • o uso que o aplicativo faz do Cloud TPU, como 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 bons alvos de otimização. Por exemplo, se o modelo atingir apenas 5% de FLOPS de pico da TPU, será possível usar a ferramenta para identificar quais operações do XLA são mais demoradas na execução e quantos FLOPS de TPU elas consomem.

Como usar o perfil de operações

Durante a coleta de perfil, capture_tpu_profile também coleta um arquivo op_profile.json que contém as estatísticas de desempenho das operações do XLA.

É possível visualizar os dados do op_profile no TensorBoard clicando na guia Perfil na parte superior da tela e selecionando op_profile na lista suspensa Ferramentas. Você verá uma tela como esta:

imagem

  1. Seção de visão geral. Mostra a porcentagem usada do potencial computacional do Cloud TPU e fornece sugestões para otimização.
  2. Painel de controle. Contém um controle deslizante de configurações que controla o número de operações exibidas na tabela correspondente e um botão de alternância que faz a tabela listar as operações que compõem os primeiros 90% do tempo total de execução.
  3. Tabela de operações. Lista as principais categorias de operações do TensorFlow associadas às operações do XLA divididas pelo tempo total (expresso como porcentagem de uso do Cloud TPU) gasto na execução de todas as operações da categoria.
  4. Cartões de detalhes das operações. Detalhes sobre a operação exibidos quando você passa o cursor sobre uma operação da tabela. Inclui 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. Inicialmente, a tabela mostra a porcentagem de tempo gasto, o nome da categoria da operação, o nome associado da operação do TensorFlow e a porcentagem de utilização de FLOPS da categoria. Para exibir (ou ocultar) as 10 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 da categoria. Clique para expandir a entrada e ver o detalhamento do tempo gasto por cada operação individual.
  2. Barra horizontal. Mostra a distribuição de tempo entre as categorias.
  3. 10 primeiras operações. O botão de alternância ao lado do nome de uma categoria exibe/oculta as 10 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.
  4. Operações do TensorFlow. Mostra o nome da operação do TensorFlow associada à operação do XLA.
  5. 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ê passa o cursor sobre uma entrada da tabela, aparece um cartão à esquerda exibindo detalhes sobre a operação do XLA ou a categoria de operação. Um cartão costuma ter a seguinte aparência:

imagem

  1. Nome. Mostra o nome da operação do XLA realçada.
  2. Categoria. Mostra a categoria da operação.
  3. Utilização de FLOPS. Exibe a utilização de FLOPS como porcentagem total de FLOPS possíveis.
  4. Expressão. Mostra a expressão do XLA que contém a operação.
  5. Uso de memória. Exibe a memória de pico usada pelo programa como porcentagem do total possível.
  6. Layout (somente operações de convolução). Mostra a forma e o layout de um tensor, incluindo se a forma do tensor é um ajuste exato das unidades da matriz e como a matriz é preenchida.
Como interpretar resultados

Para operações de convolução, a utilização de FLOPS de TPU pode ser baixa 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.

Nesta seção, veja uma interpretação de alguns números de outro modelo em que os FLOPS eram baixos. Neste exemplo, a fusão e a convolução de saída dominaram o tempo de execução e houve uma cauda longa de operações vetoriais ou escalares que tiveram FLOPS muito baixos.

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

Examine o layout e observe que o tamanho do lote 16 está sendo preenchido até 128 e o tamanho do recurso 3 está sendo preenchido até 8, o que indica que apenas 5% das unidades da matriz são efetivamente usadas. O cálculo dessa instância de porcentagem de utilização é multiplicar os tempos de lote do recurso (16 por 3) e depois dividir o resultado pelo preenchimento, 128 e depois por 8. Compare os FLOPS deste exemplo com %convolution.340 do exemplo anterior, que tem um ajuste exato à matriz.

Visualizador de pod

A ferramenta visualizador de pod fornece visualizações de desempenho de cada núcleo em um pod e exibe o status dos canais de comunicação entre os núcleos de um pod. O visualizador de pod é capaz de identificar e destacar possíveis gargalos e áreas que precisam de otimização. A ferramenta funciona para pods completos e para todas as frações de pod v2 e v3.

Para exibir a ferramenta visualizador de pod, faça o seguinte:

  1. Selecione Perfil no botão de menu no canto superior direito da janela do Tensorboard.
  2. imagem
  3. Clique no menu Ferramentas no lado esquerdo da janela e selecione pod_viewer.
  4. imagem

A interface do usuário do visualizador de pod inclui:

  1. Um controle deslizante de etapa, que permite selecionar a etapa a examinar.
  2. Um gráfico de topologia, que visualiza interativamente seus núcleos de TPU em todo o sistema de TPU.
  3. Um gráfico de links de comunicação, que visualiza os canais de envio e recebimento (recv) no gráfico da topologia.
  4. Um gráfico de barras referente à latência de canais de envio e recebimento. Passar o cursor sobre uma barra desse gráfico ativa os links de comunicação no gráfico de links de comunicação. Um cartão de detalhes do canal aparece na barra à esquerda, fornecendo informações detalhadas do canal, como tamanho dos dados transferidos, latência e largura de banda.
  5. Um gráfico de detalhamento de etapas, que visualiza o detalhamento de uma etapa para todos os núcleos. Ele pode ser usado para rastrear os gargalos do sistema e se um determinado núcleo está atrasando o sistema.

Controle deslizante de etapa

imagem

Use o controle deslizante para selecionar uma etapa. O restante da ferramenta exibe estatísticas, como detalhamento da etapa e links de comunicação, referente à etapa em questão.

Gráfico de topologia

O gráfico de topologia é organizado de forma hierárquica por host, chip e núcleo. Os retângulos menores são núcleos de TPU. Dois núcleos juntos indicam um chip de TPU e quatro chips juntos indicam um host.

imagem

O gráfico de topologia também é um mapa de calor com cores que representam a porcentagem de duração de um segmento específico (por exemplo, cálculo de flops altos, entrada, envio etc.) na etapa selecionada. A barra logo abaixo do gráfico de topologia (mostrada no gráfico a seguir) mostra um código de cores referente ao uso do núcleo e do chip. A cor dos núcleos mostra a utilização variando de amarelo a azul. Para cálculo de flops altos, números maiores (cor mais escura) indicam mais tempo gasto no cálculo. Para todos os outros detalhamentos, números menores (cores mais claras) indicam menores tempos de espera. Áreas com problemas potenciais, ou pontos de acesso, são indicados quando um núcleo é mais escuro que os outros.

Clique no seletor do menu suspenso ao lado do nome do sistema (destacado no diagrama) para escolher o tipo específico de detalhamento que você quer examinar.

Passe o mouse sobre qualquer um dos retângulos pequenos (núcleos simples) para exibir uma dica que mostra a posição do núcleo no sistema, o código global do chip e o nome de host. A dica também inclui a duração da categoria de detalhamento selecionada, por exemplo, flops altos, e respectiva porcentagem de utilização em uma etapa.

imagem

Canais de comunicação

Essa ferramenta ajuda a visualizar os links de envio e recebimento, caso seu modelo os use na comunicação entre os núcleos. Quando seu modelo contém operações de envio e recebimento, é possível usar um seletor de código de canal para selecionar um código de canal. Um link do núcleo de origem (src) e do núcleo de destino (dst) representa o canal de comunicação. Para renderizá-lo no gráfico de topologia, passe o mouse sobre as barras do gráfico que mostram a latência dos canais de envio e recebimento.

imagem

Um cartão aparece na barra à esquerda, com mais detalhes sobre o canal de comunicação. Um cartão costuma ter a seguinte aparência:

imagem

  1. Dados transferidos, que mostra os dados transferidos pelo canal de envio e recebimento em memibytes (MiB).
  2. Latência, que mostra o tempo, em microssegundos, desde o início do evento de envio até o final do evento de recebimento concluído.
  3. LB, que mostra a quantidade de dados transferidos, em gibibites (GiB), do núcleo de origem para o núcleo de destino durante o tempo contado.
  4. Atraso de envio, que é o tempo desde o início do recebimento concluído até o início do envio, em microssegundos. Se a operação de recebimento concluído começar após o início da operação de envio, o atraso é zero.
  5. Nomes de Hlo, que exibe os nomes de operações hlo do XLA associados a este canal. Esses nomes estão associados às estatísticas exibidas em outras ferramentas do TensorBoard, como op_profile e memory_viewer.

Latência do gráfico de canais de envio e recebimento

Este gráfico fornece detalhes sobre os canais de comunicação de envio e recebimento. Passar o cursor sobre uma barra dele exibe os links de envio e recebimento no gráfico de topologia acima.

imagem

Gráfico de detalhamento das etapas

Este gráfico fornece detalhes de cada etapa de treinamento ou avaliação.

O eixo x é o código global do chip e o eixo y é o tempo em microssegundos. A partir deste gráfico, você vê onde o tempo é usado em uma determinada etapa de treinamento, onde há gargalos e se há um desequilíbrio de carga entre todos os chips.

imagem

Um card aparece na barra do lado esquerdo, com mais detalhes sobre o detalhamento da etapa. Um cartão costuma ter a seguinte aparência:

imagem

Os campos do cartão especificam o seguinte:

  1. Cálculo de flops altos, que é o tempo gasto em operações de convolução ou fusão de saída (ops).
  2. Cálculo de flops baixos, que é feito com a dedução de todos os outros detalhamentos da duração total.
  3. Entrada, que é o tempo que a TPU gasta à espera do host.
  4. Saída, que é o tempo que o host gasta à espera da saída da TPU.
  5. Sincronização AllReduce, que é a fração de tempo gasta em operações CrossReplicaSum aguardando para sincronizar com outros núcleos. As operações CrossReplicaSum calculam a soma entre as réplicas.
  6. Cálculo AllReduce, que é o tempo de cálculo real gasto em operações CrossReplicaSum.
  7. Operações de envio de chip para chip, que é o tempo gasto nas operações de envio.
  8. Operações de recebimento concluído de chip para chip, que é o tempo gasto nas operações de recebimento.

Visualizador de traces

O visualizador de traces é uma ferramenta de análise de desempenho do Cloud TPU disponível em 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. A máquina host costuma executar operações de entrada, realiza o pré-processamento dos dados de treinamento e os transfere para a TPU, enquanto a TPU executa o treinamento do modelo de fato.

Com o visualizador de traces, é possível identificar problemas de desempenho do modelo e tomar providências para solucioná-los. Por exemplo, de modo geral, é possível identificar se a entrada ou o treinamento do 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 traces está limitado a um milhão de eventos por Cloud TPU. Se for preciso avaliar mais eventos, use o visualizador de traces em streaming.

Interface do visualizador de traces

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

imagem

Essa tela contém os seguintes elementos principais (marcados acima com números):

  1. Lista suspensa Execuções. Contém todas as execuções de que você capturou informações de trace. A visualização padrão é a execução mais recente, mas é possível abrir a lista suspensa para selecionar outra execução.
  2. Lista suspensa Ferramentas. Seleciona diferentes ferramentas de criação de perfil.
  3. Lista suspensa de hosts. Seleciona um host que contém um conjunto de TPUs.
  4. Painel da linha do tempo. Mostra operações que o Cloud TPU e a máquina host executaram 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:

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 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 traces.
  5. Eventos. Mostra a duração da execução de uma operação ou a duração dos metaeventos, como as etapas de treinamento.
  6. Barra de guias verticais. 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 faixas

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ó 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.
    • Operações do XLA. Mostra as operações do XLA que foram executadas na TPU. Cada operação do TensorFlow é 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 da máquina 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 ou usar os seguintes atalhos de teclado 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. Mais informações sobre os eventos selecionados (nome, horário de início e duração) serão exibidas no painel de detalhes.

Ferramenta de movimentação
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 de onde o zoom será aplicado.

Observação: a ferramenta Zoom tem um bug conhecido que deixa o zoom ativado se o botão do mouse for liberado enquanto o cursor estiver do lado de fora da visualização da linha do tempo. Se isso acontecer, basta clicar brevemente na visualização da linha de tempo para parar o 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.

Observe que o intervalo permanece marcado se você selecionar uma das outras ferramentas.
Eventos

Os eventos na linha do tempo são exibidos em cores diferentes, que não têm significado específico.

Barra superior da linha do tempo

A barra superior do painel de linha do tempo contém vários controles auxiliares:

imagem

  1. Exibição de metadados. Não usado para TPUs.
  2. Opções de visualização. Não usado para TPUs.
  3. Caixa de pesquisa. Insira um texto para procurar todos os eventos com esse texto no nome. Clique nos botões de seta à direita da caixa de pesquisa para avançar e recuar pelos eventos correspondentes, selecionando cada um por vez.
  4. Botão do console. Não usado para TPUs.
  5. Botão de ajuda. Clique para exibir um resumo da ajuda.
Atalhos do teclado

Veja a seguir os atalhos de teclado que é possível usar no visualizador de traces. Clique no botão de ajuda (?) na barra superior para ver mais atalhos de teclado.

    w Zoom in
    s Zoom out
    a Pan left
    d Pan right
    f Zoom to selected event(s)
    m Mark time interval for selected event(s)
    1 Activate selection tool
    2 Activate pan tool
    3 Activate zoom tool
    4 Activate timing tool

O atalho f pode ser muito útil. Selecione uma etapa e pressione f para ampliar a etapa rapidamente.

Eventos característicos

A seguir, veja alguns tipos de eventos que podem ser muito úteis na análise de desempenho da TPU.

imagem

  • InfeedDequeueTuple. Essa operação do TensorFlow é executada em uma TPU e recebe dados de entrada provenientes do host. Quando a entrada demora muito, isso pode significar que as operações do TensorFlow que pré-processam os dados na máquina host não conseguem acompanhar a taxa de consumo de dados da TPU. Veja os eventos correspondentes nos traces do host denominados InfeedEnqueueTuple. Para visualizar uma análise mais detalhada do pipeline de entrada, use a ferramenta analisador do pipeline de entrada.

  • CrossReplicaSum. Essa operação do TensorFlow é executada em uma TPU e calcula uma soma entre as réplicas. Como cada réplica corresponde a um nó de TPU diferente, a operação precisa aguardar a conclusão de todos os nós da TPU em uma etapa. Se essa operação estiver demorando muito, talvez não seja porque a operação de soma seja lenta, mas que um nó da TPU esteja aguardando outro nó da TPU com uma entrada lenta de dados.

imagem

  • Operações do conjunto de dados. O visualizador de traces visualiza as operações de conjunto de dados executadas no carregamento dos dados usando a API Dataset. No exemplo, Iterator::Filter::Batch::ForeverRepeat::Memory é compilado e corresponde à operação dataset.map(). Use o visualizador de traces para examinar as operações de carregamento enquanto você faz a depuração e a mitigação dos gargalos do pipeline de entrada.

imagem

  • Threads de pré-busca. O uso de dataset.prefetch() para armazenar em buffer os dados de entrada pode evitar atrasos esporádicos no acesso a arquivos, o que cria gargalos no pipeline de entrada.
O que pode dar errado

Veja alguns problemas possíveis a serem observados ao usar o visualizador de traces:

  • Limite de exibição de eventos. O visualizador de traces exibe, no máximo, um milhão de eventos. Se você capturou mais eventos, apenas o primeiro milhão de eventos será exibido. Os eventos posteriores são descartados. Para capturar mais eventos da TPU, é possível usar a sinalização --include_dataset_ops=False para exigir explicitamente que capture_tpu_profile exclua as operações do conjunto de dados.
  • Eventos muito longos. Os eventos que começam antes do início de uma captura ou que terminam após a conclusão de uma captura não são visíveis no visualizador de traces. Consequentemente, eventos muito longos podem não aparecer.
  • Quando iniciar a captura de traces. Certifique-se de iniciar a captura de traces depois de verificar que o Cloud TPU está em execução. Se você começar antes disso, poderá ver apenas alguns eventos ou nenhum evento no visualizador de traces. É possível aumentar o tempo do perfil usando a sinalização --duration_ms e definir tentativas automáticas usando a sinalização --num_tracing_attempts. Exemplo:

    (vm)$ capture_tpu_profile --tpu=$TPU_NAME
    --logdir=${MODEL_DIR} --duration_ms=60000 --num_tracing_attempts=10
    

Visualizador de memória

O visualizador de memória permite que você visualize o pico de uso de memória do programa e as tendências de uso de memória durante o ciclo de vida do programa.

A IU do visualizador de memória tem esta aparência:

imagem

  1. Lista suspensa de hosts. Seleciona para um host de TPU e módulos do otimizador de alto nível (HLO, na sigla em inglês) do XLA para visualização.
  2. Visão geral da memória. Exibe a alocação de memória de pico e o tamanho sem preenchimento.
  3. Gráfico do espaço de trabalho. Exibe o uso de memória de pico e um traçado das tendências de uso de memória durante o ciclo de vida do programa. Passar o cursor sobre um buffer em um dos gráficos de buffer adiciona uma anotação ao ciclo de vida do buffer e ao cartão de detalhes do buffer.
  4. Gráficos de buffer. Dois gráficos que exibem a alocação do buffer no ponto de pico de uso da memória, conforme indicado pela linha vertical no traçado do espaço de trabalho. Passar o cursor sobre um buffer em um dos gráficos de buffer exibe a barra do ciclo de vida do buffer no gráfico de espaço de trabalho e um cartão de detalhes à esquerda.
  5. Cartão de detalhes de alocação de buffer. Exibe 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

Esse gráfico exibe o uso de memória de pico e um traçado das tendências de uso de memória durante o ciclo de vida do programa. A barra vertical no gráfico indica a utilização da memória de pico do programa. Esse ponto determina se um programa pode ou não se ajustar ao espaço de memória global disponível.

imagem

Cada ponto no traçado de linhas sobrepostas representa um "ponto do programa" HLO do XLA, conforme programado pelo compilador. A barra fornece uma noção da progressão de picos antes e depois do uso máximo.

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

Quando você passa o cursor sobre um buffer exibido em um dos gráficos de buffer abaixo do gráfico do espaço de trabalho, aparece uma linha horizontal do ciclo de vida desse buffer no gráfico do espaço de trabalho. A linha horizontal tem a mesma cor do buffer destacado.

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 corresponde ao ciclo de vida do buffer, iniciando no ponto do programa em que o espaço do buffer foi alocado e terminando onde o espaço foi liberado.

Gráficos de buffer

Dois gráficos mostram o desmembramento do uso de memória no ponto de pico de uso (indicado pela linha vertical no traçado acima dos gráficos).

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. Os buffers ativos por mais tempo estão no lado esquerdo do gráfico.

  • Por tamanho. Exibe os buffers que estavam ativos durante a execução do programa em ordem de tamanho decrescente. Os buffers que tiveram o maior impacto no ponto de pico de uso de memória estão à esquerda.

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

Quando você passa o cursor sobre um buffer exibido em um dos gráficos de buffer, aparece um cartão de detalhes de alocação de buffer (além da linha do ciclo de vida exibida no gráfico de trabalho). Um cartão de detalhes costuma ter a seguinte aparência:

imagem

  1. Nome. Nome da operação do XLA.
  2. Categoria. Categoria da operação.
  3. Tamanho. Tamanho da alocação do buffer (incluindo preenchimento).
  4. Tamanho sem preenchimento. Tamanho da alocação do buffer sem preenchimento.
  5. Expansão. 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. Os tipos são: parâmetro, saída, thread-local e temporário (por exemplo, alocação de buffer em uma fusão).
Erros de "memória insuficiente"

Se você executar um modelo e receber um "erro de memória insuficiente", use o seguinte comando para capturar um perfil de memória e visualizá-lo no visualizador de memória. Certifique-se de definir duration_ms adequadamente para que o período de criação de perfil se sobreponha ao tempo de compilação do programa. A saída pode ajudar você a entender o que causou o erro:

(vm)$ capture_tpu_profile --tpu=$TPU_NAME --logdir=${MODEL_DIR} --duration_ms=60000

Visualizador de traces em streaming

O visualizador de traces em streaming (trace_viewer) é uma ferramenta de análise de desempenho do Cloud TPU, disponível para o TensorFlow 1.14 ou posterior, que fornece renderizações de trace dinâmico. Ela usa o visualizador de perfil de evento de trace do Chrome para que funcione apenas no navegador Chrome.

Quando você usa capture_tpu_profile 1.14 para capturar um perfil, um arquivo .tracetable é salvo no seu intervalo do Google Cloud Storage. O arquivo contém um grande número de eventos de trace que é possível visualizar no visualizador de traces e no visualizador de traces em streaming.

Como usar o visualizador de traces em streaming

Para usar o visualizador de traces de streaming, trace_viewer, é preciso encerrar sua sessão existente do TensorBoard e, em seguida, reiniciar o TensorBoard usando o endereço IP da TPU a ser examinada. O visualizador de traces em streaming requer uma conexão do TensorBoard feita de uma chamada de procedimento remoto do Google (GRPC, na sigla em inglês) para um endereço IP do Cloud TPU. O canal GRPC não é criptografado.

Para encontrar o endereço IP de um host do Cloud TPU no Console do GCP, abra a página de TPUs e procure na tabela exibida o nome do Cloud TPU correspondente aos traces que você quer visualizar.

imagem

A coluna IP interno de cada TPU contém um endereço IP, [TPU_IP].

imagem

Na sua VM, execute o TensorBoard da seguinte maneira:

(vm)$ tensorboard --logdir=${MODEL_DIR} --master_tpu_unsecure_channel=[TPU_IP]

A ferramenta trace_viewer é exibida na lista suspensa Ferramentas.

imagem

Na linha do tempo, é possível aumentar e diminuir o zoom para ver o carregamento dinâmico dos eventos de trace no navegador.

imagem

Como monitorar seu job do Cloud TPU

Nesta seção, descrevemos como usar capture_tpu_profile para capturar um único perfil ou monitorar continuamente o job do Cloud TPU na interface de linha de comando em tempo real. Ao definir a opção --monitoring_level como 0 (padrão), 1 ou 2, você recebe um único perfil, monitoramento básico ou monitoramento detalhado, respectivamente.

  1. Abra um novo Cloud Shell e execute ssh na VM (substitua $vm no comando pelo nome da VM):

    gcloud compute ssh $vm --ssh-flag=-L6006:localhost:6006
    
  2. No novo Cloud Shell, execute capture_tpu_profile com a sinalização --monitoring_level definida como 1 ou 2. Por exemplo:

    (vm)$ capture_tpu_profile --tpu=$TPU_NAME  --monitoring_level=1
    

A definição de monitoring_level=1 produz uma saída semelhante a esta:

    TPU type: TPU v2
    Utilization of TPU Matrix Units is (higher is better): 10.7%

Definir monitoring_level=2 exibe informações mais detalhadas:

    TPU type: TPU v2
    Number of TPU Cores: 8
    TPU idle time (lower is better): 0.091%
    Utilization of TPU Matrix Units is (higher is better): 10.7%
    Step time: 1.95 kms (avg), 1.90kms (minute), 2.00 kms (max)
    Infeed percentage: 87.5% (avg). 87.2% (min), 87.8 (max)

Como monitorar sinalizações

  • --tpu (obrigatória): especifica o nome da TPU que você quer monitorar.
  • --monitoring_level: altera o comportamento de capture_tpu_profile, deixando de produzir um único arquivo para fazer monitoramento básico ou contínuo detalhado. Há três níveis disponíveis: nível 0 (padrão) - produz um único arquivo e sai, nível 1 - mostra a versão da TPU e o uso da TPU, nível 2 - mostra o uso da TPU, o tempo ocioso da TPU e o número de núcleos de TPU usados. Também fornece as durações máxima, mínima e média das etapas, juntamente com a contribuição percentual de entrada.
  • --duration_ms (opcional, o padrão é 1.000ms): especifica por quanto tempo criar perfil do host de TPU durante cada ciclo. Em geral, essa duração deve ser suficiente para capturar dados de pelo menos uma etapa de treinamento. 1 segundo captura uma etapa de treinamento na maioria dos modelos, mas se a duração de etapa do modelo for muito grande, é possível definir o valor como 2x step_time (em ms).
  • --num_queries: especifica por quantos ciclos executar capture_tpu_profile. Para monitorar continuamente o job da TPU, defina o valor com um número alto. Para verificar rapidamente a duração da etapa do modelo, defina o valor com um número baixo.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…