Para usar Xprof, primero debes habilitar la captura de perfiles en el código de la carga de trabajo del modelo. A continuación, se detallan las dos formas de capturar perfiles.
Captura programática
En la captura programática, debes anotar el código del modelo para especificar en qué parte del código quieres capturar perfiles. Por lo general, los usuarios recopilan perfiles durante algunos pasos de su ciclo de entrenamiento o perfilan un bloque específico dentro de su modelo. Existen diferentes maneras de capturar registros en los distintos frameworks de JAX, PyTorch XLA y TensorFlow, ya sea con el inicio o la detención de registros basados en la API o con el administrador de contexto.
Captura bajo demanda (también conocida como “captura manual”)
La captura de perfiles bajo demanda se usa cuando deseas capturar perfiles de forma ad hoc durante la ejecución, en períodos en los que no habilitaste la captura de perfiles programática. Por lo general, se usa cuando detectas un problema con las métricas del modelo durante la ejecución y quieres capturar perfiles en ese instante durante un período para diagnosticar el problema.
Para habilitar la captura de perfiles bajo demanda, aún debes iniciar el servidor de xprof
en el código. En JAX, por ejemplo, habilitar jax.profiler.start_server iniciará un servidor de xprof en tu carga de trabajo de AA que escuchará el activador de captura bajo demanda para comenzar a capturar perfiles.
Varias sesiones por ejecución
Cuando capturas perfiles, puedes hacerlo para una sola ejecución como varias sesiones. Supongamos que capturas perfiles en una ejecución de entrenamiento de los pasos 1 a 3 y, luego, capturas perfiles de los pasos 8 a 10. Por lo tanto, estos son perfiles de la misma ejecución, pero la primera captura de los pasos 1 a 3 será session1 y la segunda captura de los pasos 8 a 10 será session2. Las distintas sesiones se indicarán con marcas de fecha y hora diferentes en cada ejecución. Los perfiles se pueden capturar en distintas sesiones de forma programática, bajo demanda o a través de una combinación de ambas.
XProf y TensorBoard en Google Cloud
En Google Cloud, te recomendamos usar la biblioteca cloud-diagnostics-xprof para facilitar el alojamiento de TensorBoard y XProf. Estos son algunos de los principales beneficios de usar esta biblioteca en GCP:
- Configuración y empaquetado sencillos de las dependencias de XProf y TensorBoard
- Almacenamiento de tus perfiles en GCS, lo que puede ser útil para la retención a largo plazo y el análisis posterior a la ejecución (los perfiles locales capturados se borrarán después de que el investigador termine la ejecución)
- Carga rápida de perfiles grandes y de varios perfiles aprovisionando TensorBoard en una VM de GCE o un Pod de GKE, con la opción de cambiar el tipo de máquina según las necesidades del usuario en cuanto a la velocidad de carga y el costo
- Crear un vínculo para compartir perfiles fácilmente y colaborar con miembros del equipo y con ingenieros de Google
- Generación de perfiles bajo demanda más sencilla de las cargas de trabajo en GKE y GCE para elegir cualquier host que ejecute la carga de trabajo y capturar perfiles
Instrucciones específicas del framework
Consulta cómo habilitar la generación de perfiles programática y la generación de perfiles bajo demanda en diferentes frameworks:
Solución de problemas
Generación de perfiles de GPU
Los programas que se ejecutan en la GPU deben producir registros de los flujos de la GPU cerca de la parte superior del visualizador de registros. Si solo ves los registros del host, revisa los registros o la salida de tu programa para ver si aparecen los siguientes mensajes de error.
Si recibes un error como el siguiente: Could not load dynamic library 'libcupti.so.10.1'
Error 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.
Agrega la ruta de acceso a libcupti.so a la variable de entorno LD_LIBRARY_PATH.
(Intenta usar locate libcupti.so para encontrar la ruta). Por ejemplo:
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
Si sigues recibiendo el mensaje Could not load dynamic library después de hacer esto, verifica si el registro de la GPU aparece en el visualizador de registros de todos modos. A veces, este mensaje aparece incluso cuando todo funciona correctamente, ya que busca la biblioteca libcupti en varios lugares.
Si recibes un error como el siguiente: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Error 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
Ejecuta los siguientes comandos (ten en cuenta que esto requiere un reinicio):
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
Consulta la documentación de NVIDIA sobre este error para obtener más información.
Crea perfiles en una máquina remota
Si el programa que deseas analizar se ejecuta en una máquina remota, una opción es ejecutar todas las instrucciones anteriores en la máquina remota (en particular, iniciar el servidor de XProf en la máquina remota) y, luego, usar la redirección de puertos locales SSH para acceder a la IU web de XProf desde tu máquina local. Usa el siguiente comando SSH para reenviar el puerto predeterminado de XProf 8791 de la máquina local a la remota:
ssh -L 8791:localhost:8791 <remote server address>
o si usas Google Cloud:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
Varias instalaciones de TensorBoard
Si no se puede iniciar TensorBoard y aparece un error como el siguiente: ValueError: Duplicate
plugins for name projector
Esto suele deberse a que hay dos versiones de TensorBoard o TensorFlow instaladas (p.ej., los paquetes pip tensorflow, tf-nightly, tensorboard y tb-nightly incluyen TensorBoard). Desinstalar un solo paquete de pip puede provocar que se quite el ejecutable tensorboard, que luego es difícil de reemplazar, por lo que puede ser necesario desinstalar todo y reinstalar una sola versión:
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
Cómo resolver problemas de privilegios
Cuando ejecutas la generación de perfiles con CUDA® Toolkit en un entorno de Docker o en Linux, es posible que encuentres problemas relacionados con privilegios de CUPTI insuficientes (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Ve a la documentación para desarrolladores de NVIDIA para obtener más información sobre cómo resolver estos problemas en Linux.
Para resolver los problemas de privilegios de CUPTI en un entorno de Docker, ejecuta
docker run option '--privileged=true'