Como capturar perfis

Para usar o Xprof, primeiro ative a captura de perfil no código de carga de trabalho do modelo. Há duas maneiras de capturar perfis, detalhadas abaixo.

Captura programática

Com a captura programática, é necessário anotar o código do modelo para especificar onde nele você quer capturar perfis. Normalmente, os usuários coletam perfis para algumas etapas durante o loop de treinamento ou criam um perfil de um bloco específico no modelo. Há diferentes maneiras de capturar traces nos frameworks JAX, PyTorch/XLA e TensorFlow: início ou interrupção de trace com base em API ou em gerenciador de contexto.

Captura on demand (também chamada de captura manual)

A captura de perfil on demand é usada quando você quer capturar perfis ad hoc durante a execução, por períodos em que não ativou a captura de perfil programática. Isso normalmente é usado quando você encontra um problema com as métricas do modelo durante a execução e quer capturar perfis por algum período para diagnosticar o problema.

Para ativar a captura de perfil on demand, ainda é necessário iniciar o servidor xprof no código. No JAX, por exemplo, ao ativar jax.profiler.start_server um servidor xprof será iniciado na carga de trabalho de ML para detectar o gatilho de captura on demand e começar a capturar perfis.

Várias sessões por execução

Ao capturar perfis, é possível capturar perfis para uma única execução como várias sessões. Suponha que você capture perfis em uma execução de treinamento das etapas 1 a 3 e, em seguida, das etapas 8 a 10. Esses são perfis da mesma execução, mas a primeira captura das etapas 1 a 3 será "session1", e a segunda, das etapas 8 a 10, será "session2". As diferentes sessões serão marcadas com carimbos de data diferentes em cada execução. É possível capturar perfis em diferentes sessões de maneira programática, on demand ou usando uma combinação das duas.

XProf e Tensorboard no Google Cloud

No Google Cloud, recomendamos usar a biblioteca cloud-diagnostics-xprof para facilitar a hospedagem do Tensorboard e do XProf. Alguns dos principais benefícios de usar essa biblioteca no GCP:

  • Configuração e empacotamento fáceis das dependências do XProf e do TensorBoard.
  • Armazenamento dos perfis no GCS, o que pode ser útil para retenção de longo prazo e análise pós-execução. Os perfis locais capturados serão excluídos depois que o pesquisador concluir a execução.
  • Carregamento rápido de vários perfis grandes ao provisionar o TensorBoard em uma VM do GCE ou em um pod do GKE, com a opção de mudar o tipo de máquina com base nas necessidades do usuário para velocidade de carregamento e custo.
  • Criação de um link para compartilhar perfis e colaborar com membros da equipe e engenheiros do Google.
  • Criação de perfil on demand facilitada para cargas de trabalho no GKE e no GCE para escolher qualquer host que execute a carga de trabalho para capturar perfis.

Instruções específicas do framework

Saiba como ativar a criação de perfil programática e on demand em diferentes frameworks:

Solução de problemas

Criação de perfil da GPU

Os programas em execução na GPU precisam produzir rastreamentos para os fluxos de GPU perto da parte superior do visualizador de rastreamento. Se você estiver vendo apenas os rastreamentos do host, verifique os registros e/ou a saída do programa para as seguintes mensagens de erro.

Se você receber um erro como: Could not load dynamic library 'libcupti.so.10.1'
Erro completo:

W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.

Adicione o caminho para libcupti.so à variável de ambiente LD_LIBRARY_PATH. (Tente locate libcupti.so para encontrar o caminho.) Exemplo:

export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH

Se a mensagem Could not load dynamic library ainda aparecer depois disso, verifique se o rastreamento da GPU aparece no visualizador de rastreamento. Essa mensagem às vezes aparece mesmo quando tudo está funcionando, já que ela procura a biblioteca libcupti em vários lugares.

Se você receber um erro como: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Erro completo:

E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED

Execute os comandos a seguir (isso exige uma reinicialização):

echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now

Consulte a documentação da NVIDIA sobre esse erro para mais informações.

Como criar um perfil em uma máquina remota

Se o programa que você quer criar um perfil estiver sendo executado em uma máquina remota, uma opção é executar todas as instruções acima na máquina remota (em particular, iniciar o servidor XProf na máquina remota) e usar o encaminhamento de portas SSH local para acessar a interface da Web do XProf na máquina local. Use o seguinte comando SSH para encaminhar a porta padrão do XProf 8791 da máquina local para a remota:

ssh -L 8791:localhost:8791 <remote server address>

ou se você usa o Google Cloud:

$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791

Várias instalações do TensorBoard

Se o TensorBoard não iniciar e mostrar um erro como: ValueError: Duplicate plugins for name projector

Isso geralmente acontece porque há duas versões do TensorBoard e/ou do TensorFlow instaladas. Por exemplo, os pacotes pip tensorflow, tf-nightly, tensorboard e tb-nightly incluem o TensorBoard. A desinstalação de um único pacote pip pode resultar na remoção do executável tensorboard, que é difícil de substituir. Por isso, talvez seja necessário desinstalar tudo e reinstalar uma única versão:

pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof

Resolver problemas de privilégios

Ao executar o perfil com o CUDA® Toolkit em um ambiente Docker ou no Linux, você pode encontrar problemas relacionados a privilégios insuficientes do CUPTI (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Acesse os NVIDIA Developer Docs para saber mais sobre como resolver esses problemas no Linux.

Para resolver problemas de privilégio do CUPTI em um ambiente do Docker, execute

docker run option '--privileged=true'