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 przechwytywania programowego 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. Ślady w różnych platformach JAX, Pytorch XLA i Tensorflow 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, w okresach, w których nie włączono automatycznego przechwytywania profili. Jest to zwykle używane, gdy podczas działania modelu zauważysz problem z jego danymi i chcesz w tym momencie zarejestrować profile 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 będzie nasłuchiwać wyzwalacza przechwytywania na żądanie, aby rozpocząć przechwytywanie profili.
Wiele sesji w ramach jednego uruchomienia
Podczas rejestrowania profili możesz rejestrować profile w ramach jednego przebiegu jako wiele sesji. Załóżmy, że w ramach trenowania w krokach 1–3 zbierasz profile, a później w krokach 8–10. Są to profile tego samego przebiegu, ale pierwsze przechwytywanie z kroków 1–3 będzie sesją 1, a drugie przechwytywanie z kroków 8–10 będzie sesją 2. Poszczególne sesje będą oznaczone różnymi datami w ramach każdego uruchomienia. Profile możesz rejestrować w różnych sesjach programowo, na żądanie lub w sposób łączony.
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 działania (lokalne profile zostaną usunięte po zakończeniu działania 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;
- utworzyć link, który ułatwi udostępnianie profili i współpracę 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, np. Could not load dynamic library 'libcupti.so.10.1'
Pełna treść błędu:
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ż szuka biblioteki libcupti w wielu miejscach.
Jeśli pojawi się błąd, np. failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
Pełna treść błędu:
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 dzieje się tak, ponieważ 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 zastąpić. W takim przypadku 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'