libreyolo profile

Grupa poleceń, która mierzy, na co schodzi czas w kroku trenowania lub w wywołaniu inferencji, zapisuje samodzielny profil i odczytuje go z powrotem przez kilka ujęć.

Polecenie
libreyolo profile
Wyjście
profile.json i profile_trace.json w runs/profile

Składnia

bash
libreyolo profile <subcommand> [<positional>] [--flag value ...]

Ta grupa nie przyjmuje argumentów key=value. Jej podpolecenia korzystają z argumentów pozycyjnych i flag POSIX, więc jest to --weights LibreYOLO9t.pt, a nie weights=LibreYOLO9t.pt. Uruchomienie libreyolo profile bez podpolecenia wypisuje ich listę.

Dwa podpolecenia mierzą i zapisują profil; pozostałe go odczytują. run i infer emitują ten sam samodzielny plik profile.json, więc każde podpolecenie odczytujące działa z dowolnym z nich.

profile run

Uruchamia krótkie profilowane trenowanie i zapisuje profil.

bash
libreyolo profile run <data> [--flag value ...]
ArgumentDomyślnieZnaczenie
dataPozycyjny. Plik YAML zbioru danych lub nazwa, np. coco128. Wymagany
--weightsLibreYOLO9t.ptPlik wag modelu lub nazwa
--sizetWariant rozmiaru modelu
--batch16Mikro-batch. -1 automatycznie dobiera około 70% VRAM
--imgsz640Rozmiar obrazu przy trenowaniu
--workers8Procesy robocze dataloadera
--amptrueUżycie ścieżki AMP danej rodziny. --no-amp to wyłącza
--steps20Kroki profilowane, czyli mierzone
--warmup5Kroki rozgrzewki przed pomiarem
--repeat1Powtórzenie N razy dla średniej i odchylenia standardowego
--device0Urządzenie
--projectruns/profileKatalog główny wyników
--jsonfalseWyjście JSON na stdout

Mierzone okno to --warmup plus --steps iteracji. Zbiór danych zbyt mały, aby je wypełnić, nie daje profilu, a polecenie kończy się kodem 3 i wskazuje trzy wyjścia: większy zbiór danych, mniej kroków lub mniejszy batch.

--repeat powyżej 1 zapisuje zagregowany plik runs/profile/profile_repeat.json, w którym metryki skalarne są uśredniane po próbach, a listy kerneli pochodzą z ostatniej próby. Jest to również warunek konieczny werdyktu o istotności w compare: pojedynczy przebieg nie może go dostarczyć.

profile infer

Profiluje ścieżkę inferencji i zapisuje profil.

bash
libreyolo profile infer [<source>] [--flag value ...]
ArgumentDomyślnieZnaczenie
sourcePozycyjny. Obraz lub katalog. Po pominięciu dołączony przykładowy obraz
--weightsLibreYOLO9t.ptPlik wag modelu lub nazwa
--sizetWariant rozmiaru modelu
--batch1Liczba obrazów na jedno przejście w przód
--imgsz640Rozmiar obrazu wejściowego
--halffalsePrzejście w przód z autocastem, tylko CUDA. --no-half to wyłącza
--amp-dtypefloat16Typ danych autocastu CUDA: float16 lub bfloat16
--warmup20Iteracje rozgrzewki przed pomiarem
--runs100Mierzone iteracje
--repeat1Powtórzenie N razy dla średniej i odchylenia standardowego
--conf0.25Próg pewności, który zmienia ilość pracy NMS
--iou0.45Próg IoU dla NMS
--max-det300Maksymalna liczba detekcji na obraz, co zmienia ilość pracy NMS
--device0Urządzenie
--tracetrueEmisja śladu Chrome do analizy kerneli i operacji. --no-trace to pomija
--projectruns/profileKatalog główny wyników
--jsonfalseWyjście JSON na stdout

Raportuje opóźnienie na poziomie p50, p90 i p99, przepustowość w obrazach na sekundę oraz podział na etapy: preprocess, forward i postprocess. Trzy argumenty progowe są tutaj dlatego, że zmieniają wartość dla postprocess.

profile summary

bash
libreyolo profile summary <trace> [--json]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do pliku profile.json lub profile_trace.json. Wymagana
--jsonfalseWyjście JSON na stdout

Odczyt ogólny: czas kroku, przepustowość, wykorzystanie GPU, udział Tensor Core, szczytowe zużycie VRAM, narzut hosta, liczba uruchomień kerneli na krok, werdykt o wąskim gardle wraz z uzasadnieniem, rozkład kerneli według kategorii oraz najkosztowniejsze kernele na krok. Dla profilu inferencji wypisuje dodatkowo percentyle opóźnienia i podział na etapy.

Profil zebrany w warunkach przeciążenia pamięci VRAM jest oznaczany, ponieważ zmierzonemu tam wykorzystaniu i przepustowości nie można ufać.

profile get

bash
libreyolo profile get <trace> [<field>] [--json]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do profilu. Wymagana
fieldPozycyjny. Nazwa metryki. Pominięcie wypisuje dostępne metryki
--jsonfalseWyjście JSON na stdout

Wypisuje jedną metrykę i nic więcej, z myślą o pętlach w skryptach. Nieznane pole kończy się kodem 2 i wskazuje formę wypisującą listę.

profile phases

bash
libreyolo profile phases <trace> [--json]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do profilu. Wymagana
--jsonfalseWyjście JSON na stdout

Milisekundy GPU, milisekundy zegarowe, liczba kerneli i liczba operacji na fazę: forward, backward, dataload, to_device, optimizer.

profile kernels

bash
libreyolo profile kernels <trace> [--flag value ...]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do profilu. Wymagana
--top20Pokazanie N pozycji o najdłuższym czasie GPU
--categoryFiltrowanie po fragmencie nazwy kategorii: gemm, layout, norm, elementwise
--grepFiltrowanie wyrażeniem regularnym po nazwie kernela
--tensorcorefalseTylko kernele Tensor Core
--sorttimetime, count lub name
--phaseOgraniczenie do jednej fazy: forward, backward, dataload, to_device, optimizer
--jsonfalseWyjście JSON na stdout

Najniższy poziom analizy: pojedyncze kernele GPU wraz z ich udziałem w czasie GPU, milisekundami na krok, liczbą wywołań na krok i kategorią. Nieznana wartość --phase kończy się kodem 2 i wypisuje fazy obecne w profilu.

profile ops

bash
libreyolo profile ops <trace> [--flag value ...]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do profilu. Wymagana
--top20Pokazanie N pozycji o najdłuższym czasie CPU
--phaseOgraniczenie do jednej fazy
--jsonfalseWyjście JSON na stdout

Widok frameworku zamiast widoku urządzenia: operacje aten i autograd uszeregowane według czasu CPU, w którym ujawnia się koszt uruchamiania po stronie hosta.

profile compare

bash
libreyolo profile compare <before> <after> [--json]
ArgumentDomyślnieZnaczenie
beforePozycyjny. Profil bazowy. Wymagany
afterPozycyjny. Nowy profil. Wymagany
--jsonfalseWyjście JSON na stdout

Porównuje przepustowość, milisekundy na obraz, wykorzystanie GPU, narzut hosta, liczbę uruchomień kerneli na krok i werdykt o wąskim gardle.

Ocena istotności wymaga, aby obie strony zmierzono z --repeat co najmniej 2. Przy takim pomiarze różnicę uznaje się za istotną, gdy przekracza dwukrotność łącznego błędu standardowego, a wyjście wypisuje wykonane porównanie. Bez tego w tym wierszu widnieje informacja, że pojedynczy przebieg nie pozwala na taką ocenę.

profile what-if

bash
libreyolo profile what-if <trace> [--flag value ...]
ArgumentDomyślnieZnaczenie
tracePozycyjny. Ścieżka do profilu. Wymagana
--remove-categoryPrognoza usunięcia kategorii kerneli: gemm, layout, norm, elementwise
--remove-launchesPrognoza usunięcia N uruchomień kerneli na krok, na przykład zysku z fuzji operacji
--jsonfalseWyjście JSON na stdout

Szacuje, co dałaby zmiana, zanim zostanie ona napisana. Jedna z dwóch opcji jest wymagana; brak którejkolwiek kończy się kodem 2.

Prognoza podąża za werdyktem samego profilu. Poniżej 80% wykorzystania GPU modeluje oszczędność jako mniejszą liczbę uruchomień pomnożoną przez zmierzony koszt hosta na jedno uruchomienie; powyżej tego progu jako mniejszą pracę GPU. Wynik zawiera pole z zastrzeżeniem, ponieważ koszt na jedno uruchomienie jest przybliżeniem, a jedynym dowodem pozostaje drugi pomiar.

Przykłady

Pomiar inferencji
# Brak argumentu source oznacza dołączony przykładowy obraz.libreyolo profile infer --device cpu --warmup 5 --runs 20
Odczyt werdyktu
libreyolo profile summary runs/profile/infer/profile.json
Porównanie dwóch pomiarów
libreyolo profile infer --device cpu --warmup 5 --runs 20 --project runs/profile/alibreyolo profile infer --device cpu --warmup 5 --runs 20 --batch 4 --project runs/profile/b libreyolo profile compare runs/profile/a/infer/profile.json \  runs/profile/b/infer/profile.json

Uwagi

Profiler mierzy i raportuje. Niczego nie zmienia: odczyt werdyktu, edycja konfiguracji lub kodu, ponowne uruchomienie i porównanie to pętla, do której został zbudowany.

--device domyślnie ma wartość 0, czyli urządzenie CUDA 0. Podanie --device cpu wykonuje pomiar na CPU i daje profil, który podpolecenia odczytujące nadal przyjmują, ale bez szczegółów dotyczących kerneli GPU.

Każde podpolecenie obsługuje --json, a te odczytujące wypisują wyłącznie na stdout, co czyni tę grupę użyteczną w skrypcie.

Kody wyjścia są tutaj własne dla tej grupy: 2 dla nieistniejącego pliku lub argumentu, którego nie da się rozwiązać, 3 gdy run nie wyprodukował profilu, oraz 1 gdy śladu nie da się przeanalizować.

Powiązane: libreyolo train, którego argumenty zwykle stroi się na podstawie profilu trenowania.

Zweryfikowano z LibreYOLO v1.5.0.