Do generowania niektórych jąder GPU używamy OpenAI Triton. Triton umożliwia generowanie szybkich jąder GPU na potrzeby określonych fuzji, ale musimy dostroić pewne parametry do każdej takiej fuzji.
W przypadku wielu takich procesów może to zająć dużo czasu, dlatego umożliwiamy wczytanie wyników automatycznego dostrajania, a inne kroki kompilacji przebiegają w zwykły sposób. Pamięci podręczne z automatycznym dostrajaniem są nadal przydatne, jeśli wprowadzimy kilka zmian: fuzje, które są obecne w pamięci podręcznej, będą z niej korzystać, a pozostałe będą automatycznie dostrajane w standardowy sposób.
Zalecane: katalog pamięci podręcznej
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
Używanie i utrzymywanie w danym katalogu osobnego pliku pamięci podręcznej autotune dla każdej fuzji. Każde połączenie będzie miało swój własny plik.
Główną zaletą tego podejścia jest to, że możesz używać tego samego katalogu pamięci podręcznej do wielu uruchomień XLA (różnych modeli), a pamięć podręczna będzie się powiększać wraz z każdą nową fuzji, co przyspieszy kolejne uruchomienia. Istnieje również podstawowa obsługa jednoczesnego uruchamiania wielu instancji XLA z tym samym katalogiem pamięci podręcznej.
XLA odczytuje istniejące wyniki, gdy są potrzebne, i zapisuje nowe wyniki po ich określeniu.
- Katalog musi istnieć przed uruchomieniem XLA i musi być dostępny do zapisu.
- Unieważnienie pamięci podręcznej musi wykonać użytkownik:
- Użyj pustego katalogu, jeśli chcesz rozpocząć z pustą pamięcią podręczną.
- Sprawdzanie wersji XLA musi wykonać użytkownik:
- Jeśli chcesz używać oddzielnych pamięci podręcznych dla różnych wersji XLA, użyj różnych katalogów.
Domyślnie bufor jest wyłączony (jeśli nie podasz parametru).
Ograniczenie: nie ma gwarancji, że ta metoda będzie działać dobrze w połączeniu z inną metodą buforowania opisaną poniżej.
Alternatywa: wczytywanie lub zrzucanie wszystkich wyników z danego HLO do jednego pliku
Wyniki automatycznego dostosowania można zapisywać/wczytywać za pomocą tych parametrów:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
Jeśli podamy plik o rozszerzeniu .txt lub .textproto, pamięć podręczna zostanie zrzucona w formacie textproto, w przeciwnym razie – w formacie binarnym protobuf.
W trakcie testów
W testach można też używać trwałego automatycznego dostrajania. Jest zalecany, jeśli testy są bardzo duże, zwłaszcza gdy wydajność środowiska testowego jest ograniczona.
Działa ona dobrze tylko wtedy, gdy pamięć podręczna autotuningu zawiera wyniki wygenerowane na tym samym typie procesora graficznego, na którym są wykonywane testy.
Przeprowadzanie testu z trwałym automatycznym dostrajaniem
Zakładamy, że test zawsze używa tego samego typu GPU.
Wyniki automatycznego dostosowania należy wyeksportować z testu, na przykład przez określenie tych parametrów w komendach testu:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabled
Aby uzyskać jedną pamięć podręczną autotuningu dla wszystkich testów, musisz wyłączyć podział na fragmenty.
Następnie musimy przesłać pamięć podręczną do naszego repozytorium kodu.
Następnie musimy dodać pamięć podręczną do zależności danych celu testowego i wczytać ją za pomocą zmiennej środowiskowej.
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},
(można używać podziału w testach, które wczytują wyniki autotuningu).
Zapoznaj się też z przykładowymi testami w xla/service/gpu/tests/BUILD:
- load_autotune_results_using_execpath_test
- load_autotune_results_from_test_workspace_test
- dump_autotune_results_to_test_outputs_test
Nieaktualna pamięć podręczna
Jeśli w modelu wprowadzono wiele zmian, pamięć podręczna może nie zawierać już wszystkich fuzji, co spowoduje spowolnienie testu. W takim przypadku będziemy musieli ponownie wygenerować pamięć podręczną autotuningu.
To samo dotyczy sytuacji, gdy do testów zaczniemy używać nowego typu procesora GPU.
Pamięć podręczna może się też stać przestarzała, jeśli kompilator XLA w dalszym ciągu będzie się rozwijać i generować różne rodzaje fuzji.