Acquisizione dei profili

Per utilizzare Xprof, devi prima abilitare l'acquisizione del profilo all'interno del codice del carico di lavoro del modello. Esistono due modi per acquisire i profili, descritti di seguito.

Acquisizione programmatica

Con l'acquisizione programmatica, devi annotare il codice del modello per specificare in quale punto del codice vuoi acquisire i profili. In genere, gli utenti raccolgono i profili per alcuni passaggi durante il ciclo di addestramento o profilano un blocco specifico all'interno del modello. Esistono diversi modi per acquisire le tracce nei diversi framework JAX, Pytorch XLA e Tensorflow: avvio/interruzione della traccia basati su API o basati su context manager.

Acquisizione on demand (nota anche come acquisizione manuale)

L'acquisizione di profili on demand viene utilizzata quando vuoi acquisire profili ad hoc durante la corsa, per periodi di tempo in cui non hai attivato l'acquisizione programmatica dei profili. Questo viene in genere utilizzato quando si riscontra un problema con le metriche del modello durante l'esecuzione e si vogliono acquisire profili in quel momento per un determinato periodo di tempo al fine di diagnosticare il problema.

Per attivare l'acquisizione dei profili on demand, devi comunque avviare il server xprof all'interno del codice. In JAX, ad esempio, l'attivazione di jax.profiler.start_server avvierà un server xprof sul tuo workload ML che è in ascolto del trigger di acquisizione on demand per iniziare ad acquisire i profili.

Più sessioni per esecuzione

Quando acquisisci i profili, puoi acquisire i profili per una singola corsa come più sessioni. Supponiamo di acquisire i profili in una sessione di allenamento dai passaggi 1-3 e successivamente acquisire i profili dai passaggi 8-10. Quindi questi sono profili per la stessa corsa, ma la prima acquisizione dei passaggi 1-3 sarà sessione1 e la seconda acquisizione dei passaggi 8-10 sarà sessione2. Le diverse sessioni saranno indicate con timestamp diversi per ogni corsa. Puoi acquisire profili in sessioni diverse in modo programmatico o on demand oppure una combinazione di entrambi.

XProf e Tensorboard su Google Cloud

Su Google Cloud, ti consigliamo di utilizzare la libreria cloud-diagnostics-xprof per semplificare l'hosting di TensorBoard e XProf. Ecco alcuni dei principali vantaggi dell'utilizzo di questa libreria su GCP:

  • Configurazione e packaging semplici delle dipendenze di XProf e TensorBoard.
  • Archivia i tuoi profili in GCS, il che può essere utile per la conservazione a lungo termine e l'analisi post-esecuzione (i profili locali acquisiti verranno eliminati al termine dell'esecuzione da parte del ricercatore).
  • Caricamento rapido di profili di grandi dimensioni e di più profili mediante il provisioning di TensorBoard su VM GCE o pod GKE, con la possibilità di modificare il tipo di macchina in base alle esigenze dell'utente per velocità di caricamento e costi.
  • Crea un link per condividere facilmente i profili e collaborare con i membri del team e gli ingegneri di Google.
  • Profilazione on demand più semplice dei carichi di lavoro su GKE e GCE per scegliere qualsiasi host che esegue il carico di lavoro per acquisire i profili.

Istruzioni specifiche per il framework

Scopri come attivare la profilazione programmatica e on demand in diversi framework:

Risoluzione dei problemi

Profilazione GPU

I programmi in esecuzione sulla GPU devono produrre tracce per gli stream della GPU vicino alla parte superiore del visualizzatore di tracce. Se visualizzi solo le tracce dell'host, controlla i log e/o l'output del programma per i seguenti messaggi di errore.

Se ricevi un errore come: Could not load dynamic library 'libcupti.so.10.1'
Errore 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.

Aggiungi il percorso a libcupti.so alla variabile di ambiente LD_LIBRARY_PATH. (Prova locate libcupti.so per trovare il percorso.) Ad esempio:

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

Se continui a ricevere il messaggio Could not load dynamic library dopo aver eseguito questa operazione, controlla se la traccia della GPU viene comunque visualizzata nel visualizzatore di tracce. Questo messaggio a volte viene visualizzato anche quando tutto funziona, perché cerca la libreria libcupti in più posizioni.

Se ricevi un errore come: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Errore 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

Esegui questi comandi (tieni presente che è necessario riavviare il sistema):

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

Per saperne di più, consulta la documentazione di NVIDIA su questo errore.

Profilazione su un computer remoto

Se il programma che vuoi profilare è in esecuzione su una macchina remota, una possibilità è eseguire tutte le istruzioni riportate sopra sulla macchina remota (in particolare, avvia il server XProf sulla macchina remota), quindi utilizza il port forwarding SSH locale per accedere alla UI web di XProf dalla tua macchina locale. Utilizza il seguente comando SSH per inoltrare la porta XProf predefinita 8791 dalla macchina locale a quella remota:

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

o se utilizzi Google Cloud:

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

Più installazioni di TensorBoard

Se l'avvio di TensorBoard non va a buon fine e viene visualizzato un errore come: ValueError: Duplicate plugins for name projector

Spesso il problema è dovuto alla presenza di due versioni di TensorBoard e/o TensorFlow installate (ad esempio, i pacchetti pip tensorflow, tf-nightly, tensorboard e tb-nightly includono tutti TensorBoard). La disinstallazione di un singolo pacchetto pip può comportare la rimozione dell'eseguibile tensorboard, che è poi difficile da sostituire, quindi potrebbe essere necessario disinstallare tutto e reinstallare una singola versione:

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

Risolvere i problemi relativi ai privilegi

Quando esegui la profilazione con CUDA® Toolkit in un ambiente Docker o su Linux, potresti riscontrare problemi relativi a privilegi CUPTI insufficienti (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Consulta la documentazione per sviluppatori NVIDIA per scoprire di più su come risolvere questi problemi su Linux.

Per risolvere i problemi relativi ai privilegi CUPTI in un ambiente Docker, esegui

docker run option '--privileged=true'