Narzędzie do wyświetlania logów czasu
Za pomocą narzędzia Trace Viewer możesz wizualizować osi czasu zdarzeń, które miały miejsce podczas sesji profilowania. Pokazuje on czas trwania operacji wykonywanych przez model w różnych częściach systemu, takich jak host (procesor CPU) i akceleratory (procesory graficzne GPU lub procesory tensorowe TPU). Dzięki temu możesz się dowiedzieć, jak model wykorzystuje zasoby sprzętowe, zidentyfikować wąskie gardła w wydajności i zoptymalizować model pod kątem szybszego wykonywania. Interfejs narzędzia do wyświetlania dzienników jest oparty na interfejsie używanym w chrome://tracing
, dlatego wymaga korzystania z przeglądarki Chrome.
Obsługiwane platformy
TPU: obsługiwane
GPU: obsługiwany
W przypadku kart graficznych narzędzie Trace Viewer grupowało zdarzenia na osi czasu według poszczególnych układów GPU i przepływów danych w ich obrębie, a w przypadku TPU – według poszczególnych układów TPU i rdzeni. W obu przypadkach narzędzie Trace Viewer wyświetla też zdarzenia na osi czasu dla każdego wątku na procesorze hosta, z którym połączone są akceleratory.
Interakcja z osią czasu
Narzędzie Trace Viewer udostępnia kilka narzędzi i metod nawigacji i analizy osi czasu:
- Nawigacja: możesz używać tych skrótów klawiszowych:
- W: powiększanie.
- S: poszerz perspektywę.
- Odpowiedź: przesuń w lewo.
- D: przesuń w prawo.
- Selektor narzędzi: możesz kliknąć narzędzie w selektorze narzędzi lub użyć odpowiedniego skrótu klawiszowego:
- Narzędzie do zaznaczania (1 lub !): kliknij zdarzenie, aby je zaznaczyć i wyświetlić jego szczegóły w panelu Szczegóły. Aby wybrać kilka zdarzeń, kliknij Ctrl+klik, aby wyświetlić podsumowanie.
- Narzędzie do panoramowania (2 lub @): przeciągnij, aby przesunąć oś czasu w poziomie lub w pionie.
- Narzędzie Zoom (3 lub #): przeciągnij, aby powiększyć określony obszar na osi czasu.
- Narzędzie do ustawiania czasu (4 lub $): przeciągnij, aby zaznaczyć przedział czasu. Wyświetli się czas trwania zaznaczonego przedziału. Możesz też użyć klawisza „m”, aby zaznaczyć fragment i określić jego łączny czas trwania.
- Powiększenie wybranych zdarzeń (f): wybierz co najmniej 1 zdarzenie i naciśnij klawisz „f”, aby szybko powiększyć tę część osi czasu. Jest to przydatne, gdy chcesz skupić się na konkretnym kroku treningu.
Podczas obsługi dużej liczby zdarzeń śladu narzędzie Trace Viewer działa w trybie strumieniowym. Oznacza to, że dane są wczytywane na żądanie, gdy przesuwasz i powiększasz widok osi czasu, podobnie jak w przypadku aplikacji mapowych. Jeśli powiększysz mapę szybciej niż dane mogą się wczytać, możesz zobaczyć dane w niskiej rozdzielczości, dopóki się nie wczytają.
Komponenty interfejsu narzędzia Trace Viewer
Oto główne elementy interfejsu przeglądarki Trace Viewer:
- Oś czasu biegnie poziomo u góry i pokazuje czas w stosunku do początku śledzenia.
- Oś czasu jest uporządkowana według sekcji i ścieżek, a etykiety znajdują się na lewej osi pionowej. Każda sekcja reprezentuje element przetwarzania (np. węzeł urządzenia lub wątki hosta) i może być rozwinięta lub zwinięta. W każdym z tych sekcji znajdują się ścieżki, czyli ścieżki czasowe dotyczące konkretnych działań.
- Zdarzenia to kolorowe prostokątne bloki na ścieżkach osi czasu, które wskazują czas trwania operacji lub metazdarzenia, np. kroku treningowego. Kolor zdarzeń nie ma określonego znaczenia.
- Na panelu szczegółów znajdziesz dodatkowe informacje o wybranych na panelu osi czasu zdarzeniach, takie jak ich nazwa, godzina rozpoczęcia i czas trwania.
Typowe sekcje i ścieżki
Narzędzie Trace Viewer zawiera te sekcje i ścieżki.
- Po jednej sekcji dla każdego węzła TPU z tymi ścieżkami:
- Moduł XLA: wykonywany program XLA.
- XLA Ops: pokazuje operacje XLA HLO, które zostały wykonane na procesorze TPU. Każda operacja na wyższym poziomie (np. JAX, TensorFlow lub PyTorch) jest tłumaczona na jedną lub kilka operacji XLA, które są następnie kompilowane do uruchomienia na TPU. Po kliknięciu operacji XLA w przeglądarce Graph Viewer zobaczysz linki do niej oraz dodatkowe informacje, takie jak czas rozpoczęcia i zakończenia, czas trwania i śledzenie źródeł (jeśli jest dostępne przez framework i kompilator).
- XLA TraceMe: adnotacje określone przez użytkownika w kodzie, opisujące logiczne jednostki pracy, które zamierza on śledzić. Dane te mogą być widoczne nawet wtedy, gdy nie dodano żadnych adnotacji. Są one zwykle dodawane przez XLA (np. rdzenie bariery) lub przez samą XProf (np. opuszczone wpisy w śladzie).
- Krok: pokazuje czas trwania kroków treningu wykonywanych na tym rdzeniu TPU, jeśli są odpowiednio oznaczone w programie użytkownika lub w ramach.
- Operacje platformy: wyświetla operacje platformy (np. JAX, Tensorflow lub PyTorch) wykonywane na procesorze TPU, jeśli są odpowiednio oznaczone w programie lub platformie użytkownika.
- Nazwa platformy: wizualizacja ścieżki wywołań dla każdej operacji platformy. Ze względu na zwiększenie przejrzystości ścieżka ta pojawia się tylko na jednym urządzeniu.
- Kod źródłowy: ścieżka do kodu źródłowego, który ma być wykonywany (jeśli jest dostępna w profilu).
- Jednostka skalarna: w przypadku TPU są to zdarzenia wykonywane na jednostce skalarnej, które są wyświetlane, jeśli są obecne w profilu.
- Flagi synchronizacji TensorCore: mechanizm synchronizacji na TPU, przedstawiony, jeśli jest obecny w profilu.
- Host Offload: operacje asynchronicznie przenoszą dane między pamięcią hosta a pamięcią akceleratora. W linii XLA Ops zwykle występują operacje startu i zatrzymania, które wskazują, że akcelerator przygotowuje się do przenoszenia danych (np. oznacza regiony pamięci źródłowej i docelowej jako „w użyciu” przez czas trwania przenoszenia). Jeśli równolegle wykonywane są liczne operacje przenoszenia, w pliku mogą się znajdować liczne wiersze przenoszenia hosta, co wymaga od przeglądarki dzienników wyświetlania wielu zdarzeń jednocześnie.
- Jedna sekcja na każdy węzeł Sparsecore: niektóre generacje TPU (np. TPU v5p i TPU v6e) są wyposażone w co najmniej 1 jednostkę SparseCore oprócz gęstych jednostek obliczeniowych MXU. W tej sekcji będą się pojawiać moduły, operacje i obiekty TraceMe powiązane z tymi rdzeniami.
- Po jednej sekcji na każdy węzeł GPU z tymi informacjami:
- XLA Modules, Framework Ops, Framework Name Scope, Steps, Source code. Wszystkie są podobne do sekcji TPU.
- Jeden utwór na strumień, przy czym nazwa strumienia zawiera też informacje o typach operacji wykonywanych na strumieniu (Memcpy, Compute itp.).
- XLA TraceMe nie jest obsługiwana w przypadku procesorów graficznych.
- Operacje XLA są widoczne w sekcji GPU, ale obecnie nie zawsze są dokładne, ponieważ pochodzą z danych strumienia. Dlatego nie uwzględniają one w pełni modelu wykonywania przez GPU, w którym może występować mapowanie N:M operacji XLA na rzeczywiste rdzenie, które są wykonywane na różnych strumieniach, oraz dynamiczne planowanie wielu strumieni na różne SM na sprzęcie.
- Jedna sekcja na każdy komponent (np. jeden zbiornik wątków) działający na procesorze hosta, z jednym śladem na wątek w przypadku zbiorników wątków. Tutaj też zobaczysz ścieżki Pythona, jeśli zostały one włączone podczas zbierania profilu.
Pamiętaj, że tylko operacje XLA dla TPU i dane strumieniowe dla GPU są bezpośrednio związane z zebranym profilem. Wszystkie inne wiersze są „wierszami pochodnej”, które zawierają opcjonalne informacje „boczne” udostępniane przez kompilator, opcjonalne adnotacje użytkownika lub heurystyki zastosowane przez XProf. Dlatego te wyprowadzone kolumny mogą się pojawiać lub nie pojawiać w różnych profilach.
Inne funkcje
- Konkretne nazwy zdarzeń możesz wyszukać za pomocą paska wyszukiwania „Znajdź zdarzenia”. Obecnie wyszukiwanie obejmuje tylko widoczne okno czasowe na ekranie, a nie cały ślad.
- Zdarzenia przepływu: jej włączenie przez kliknięcie przycisku „Zdarzenia przepływu” na górnym pasku powoduje dodanie wizualizacji, które łączą zdarzenia w jednym wątku lub na jednej linii z zdarzeniami w innym wątku. Może na przykład występować strzałka od operacji na hoście, która ustawia zadanie w kolejce lub uruchamia pracę akceleratora, do operacji na akceleratorze, która wykonuje tę pracę. XProf określa te powiązania, korzystając z kombinacji adnotacji użytkownika, wbudowanych heurystycznych metod i post-processingu informacji otrzymywanych z różnych komponentów (np. Sterowniki CUPTI, identyfikatory uruchamiania jądra, informacje o środowisku wykonawczym TPU itp.
- Kliknięcie opcji XLA powoduje wyświetlenie dodatkowych informacji w panelu szczegółów. Na przykład link do opcji w narzędziu Graph Viewer. Może też zawierać wskazówki do kodu źródłowego lub ścieżki wywołania w Pythonie, frameworka, który spowodował wygenerowanie tej operacji XLA itp. (jeśli są obecne w profilu). Może też wyświetlać FLOPS (liczbę operacji zmiennoprzecinkowych wykonanych przez operację) i bajty, do których operacja sięga. Informacje te są pobierane statycznie z XLA podczas kompilacji, a nie z profilu w czasie wykonywania.