Aby korzystać z Xprof, musisz najpierw włączyć przechwytywanie profilu w kodzie obciążenia modelu. Profile można rejestrować na 2 sposoby, które opisujemy poniżej.
Automatyzacja
W przypadku programowego przechwytywania musisz dodać adnotacje do kodu modelu, aby określić, w którym miejscu kodu chcesz przechwytywać profile. Zwykle użytkownicy zbierają profile przez kilka kroków w pętli trenowania lub profilują określony blok w modelu. W różnych platformach JAX, PyTorch XLA i TensorFlow ślady można rejestrować na różne sposoby – za pomocą interfejsu API do uruchamiania i zatrzymywania śledzenia lub za pomocą menedżera kontekstu.
Przechwytywanie na żądanie (czyli ręczne przechwytywanie)
Przechwytywanie profili na żądanie jest używane, gdy chcesz przechwytywać profile ad hoc podczas działania programu w okresach, w których nie włączono automatycznego przechwytywania profili. Jest to zwykle używane, gdy podczas działania modelu wystąpi problem z jego danymi i chcesz zarejestrować profile w danym momencie przez pewien czas, aby zdiagnozować problem.
Aby włączyć przechwytywanie profilu na żądanie, nadal musisz uruchomić serwer xprof w kodzie. Na przykład w JAX włączenie
jax.profiler.start_server
spowoduje uruchomienie serwera xprof w przypadku obciążenia uczeniem maszynowym, który nasłuchuje wyzwalacza przechwytywania na żądanie, aby rozpocząć przechwytywanie profili.
Wiele sesji w ramach jednego uruchomienia
Podczas rejestrowania profili możesz rejestrować profile dla jednego przebiegu jako wiele sesji. Załóżmy, że w trakcie trenowania w krokach 1–3 rejestrujesz profile, a później w krokach 8–10. Są to profile tego samego biegu, ale pierwsze dane z kroków 1–3 będą należeć do sesji 1, a drugie dane z kroków 8–10 będą należeć do sesji 2. Poszczególne sesje będą oznaczone różnymi datami pod każdym uruchomieniem. Profile możesz rejestrować w różnych sesjach programowo, na żądanie lub w sposób łączony.
Zrzuty profilowania ciągłego
Zrzuty profilowania ciągłego służą do rejestrowania profilu kończącego się w dowolnym momencie, w przeciwieństwie do profilowania na żądanie, w którym rejestrujesz profile w późniejszym czasie. Jest to przydatne w przypadku długotrwałych zadań, w których chcesz zarejestrować profil w momencie zdiagnozowania problemu.
Aby włączyć ciągłe migawki profilowania, musisz uruchomić serwer xprof w kodzie. Na przykład w JAX włączenie
jax.profiler.start_server
spowoduje uruchomienie serwera xprof w obciążeniu ML, który będzie nasłuchiwać wyzwalacza profilowania migawek, aby rozpocząć rejestrowanie profili.
XProf i Tensorboard w Google Cloud
W Google Cloud zalecamy używanie biblioteki cloud-diagnostics-xprof, która ułatwia hostowanie TensorBoard i XProf. Oto niektóre z głównych korzyści wynikających z używania tej biblioteki w GCP:
- łatwa konfiguracja i pakowanie zależności XProf i TensorBoard;
- przechowywać profile w GCS, co może być przydatne w przypadku długoterminowego przechowywania i analizy po zakończeniu badania (lokalne profile zostaną usunięte po zakończeniu badania przez badacza);
- szybkie wczytywanie dużych i wielu profili przez udostępnianie TensorBoard na maszynie wirtualnej GCE lub podzie GKE z możliwością zmiany typu maszyny w zależności od potrzeb użytkownika w zakresie szybkości wczytywania i kosztów;
- tworzyć linki, aby łatwo udostępniać profile i współpracować z członkami zespołu oraz inżynierami Google;
- Łatwiejsze profilowanie na żądanie zbiorów zadań w GKE i GCE, które umożliwia wybór dowolnego hosta z uruchomionym zbiorem zadań do przechwytywania profili.
Instrukcje dotyczące konkretnych platform
Dowiedz się, jak włączyć profilowanie automatyczne i profilowanie na żądanie w różnych platformach:
Rozwiązywanie problemów
Profilowanie GPU
Programy działające na GPU powinny generować ślady strumieni GPU w górnej części przeglądarki śladów. Jeśli widzisz tylko ślady hosta, sprawdź dzienniki programu lub dane wyjściowe pod kątem tych komunikatów o błędach.
Jeśli pojawi się błąd podobny do tego: Could not load dynamic library 'libcupti.so.10.1'
Pełny komunikat o błędzie:
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.
Dodaj ścieżkę do libcupti.so do zmiennej środowiskowej LD_LIBRARY_PATH.
(Spróbuj locate libcupti.so, aby znaleźć ścieżkę). Na przykład:
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
Jeśli po wykonaniu tych czynności nadal widzisz komunikat Could not load dynamic library, sprawdź, czy ślad GPU jest widoczny w przeglądarce śladów. Ten komunikat
czasami pojawia się nawet wtedy, gdy wszystko działa prawidłowo, ponieważ biblioteka libcupti jest wyszukiwana w wielu miejscach.
Jeśli pojawi się błąd podobny do tego: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Pełny komunikat o błędzie:
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
Uruchom te polecenia (wymagają ponownego uruchomienia):
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
Więcej informacji znajdziesz w dokumentacji firmy NVIDIA na temat tego błędu.
Profilowanie na komputerze zdalnym
Jeśli program, który chcesz profilować, działa na komputerze zdalnym, możesz wykonać wszystkie powyższe instrukcje na tym komputerze (w szczególności uruchomić na nim serwer XProf), a następnie użyć przekierowania lokalnego portu SSH, aby uzyskać dostęp do interfejsu internetowego XProf na komputerze lokalnym. Aby przekierować domyślny port XProf 8791 z komputera lokalnego na zdalny, użyj tego polecenia SSH:
ssh -L 8791:localhost:8791 <remote server address>
lub jeśli korzystasz z Google Cloud:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
Wiele instalacji TensorBoard
Jeśli uruchomienie TensorBoard nie powiedzie się i pojawi się błąd podobny do tego: ValueError: Duplicate
plugins for name projector
Często jest to spowodowane tym, że zainstalowane są 2 wersje TensorBoard lub TensorFlow (np. pakiety pip tensorflow, tf-nightly, tensorboard i tb-nightly
zawierają TensorBoard). Odinstalowanie pojedynczego pakietu pip może spowodować usunięcie pliku wykonywalnego tensorboard, który trudno jest potem zastąpić. W takiej sytuacji może być konieczne odinstalowanie wszystkiego i ponowne zainstalowanie pojedynczej wersji:
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
Rozwiązywanie problemów z uprawnieniami
Podczas profilowania za pomocą CUDA® Toolkit w środowisku Docker lub w systemie Linux możesz napotkać problemy związane z niewystarczającymi uprawnieniami CUPTI (CUPTI_ERROR_INSUFFICIENT_PRIVILEGES). Więcej informacji o tym, jak rozwiązać te problemy w systemie Linux, znajdziesz w dokumentacji dla deweloperów NVIDIA.
Aby rozwiązać problemy z uprawnieniami CUPTI w środowisku Dockera, uruchom
docker run option '--privileged=true'