Kategoria: CompileTime: SparseCore No Viable Logical Replica Count
Ten błąd występuje, gdy kompilator XLA:SparseCore nie może określić prawidłowej konfiguracji liczby replik logicznych, która umożliwia dopasowanie obciążenia do lokalnej pamięci podręcznej SparseCore (Tilespmem).
Przykładowe komunikaty o błędach:
XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...
Backendy XLA: TPU
Przegląd
Ten błąd występuje w przypadku SparseCore, zwłaszcza w przypadku dużych modeli osadzania (LEMs).
Liczba replik logicznych to wewnętrzny parametr kompilatora, który określa, jak partie wejściowe są dzielone na partycje w celu zarządzania obciążeniem związanym z przydzielaniem pamięci podręcznej. Kompilator próbuje podzielić zbiór zadań na mniejsze części (repliki), aby bufory pośrednie wymagane dla każdej części mieściły się w ograniczonej pamięci podręcznej SparseCore. Zwykle większa liczba replik logicznych zmniejsza presję alokacji, ponieważ przetwarza mniejsze partie danych naraz.
Ten błąd oznacza, że nawet po wypróbowaniu różnych konfiguracji podziału kompilator nie mógł znaleźć ustawienia, w którym wymagane bufory zmieściłyby się w pamięci Tilespmem. Wielkość przydziału jest określana na podstawie połączenia:
sample_count: liczba identyfikatorów wyszukiwania osadzania przypisanych do każdego SparseCore (pochodna rozmiaru partii).feature_width: rozmiar wymiaru wektora dystrybucyjnego.max_nz_per_row: maksymalna liczba niepowtarzalnych identyfikatorów wyszukiwania osadzania we wszystkich rdzeniach SparseCore.max_unique_nz_per_row: maksymalna liczba unikalnych identyfikatorów wyszukiwania osadzania.
Debugowanie
Aby rozwiązać ten problem, musisz zmniejszyć obciążenie pamięci w pamięci podręcznej SparseCore.
1. Ulepszanie szacunków metadanych
Kompilator przydziela pamięć na podstawie max_nz_per_row i max_unique_nz_per_row. Jeśli te wartości są szacowane w sposób zachowawczy (tzn. ustawione znacznie wyżej niż wymagają tego rzeczywiste dane), kompilator zarezerwuje niepotrzebne miejsce, co spowoduje ten błąd. Upewnij się, że te parametry dokładnie odzwierciedlają rzeczywisty rozkład identyfikatorów w zbiorze danych.
Możesz rozważyć zastosowanie optymalizacji opartej na opiniach (FDO), aby określić optymalne wartości tych parametrów.
2. Zmniejsz rozmiar wsadu
Wartość sample_count jest bezpośrednio powiązana z globalnym rozmiarem partii. Zmniejszenie rozmiaru partii zmniejsza ilość danych, które każdy SparseCore musi przetworzyć w każdym kroku, a tym samym zmniejsza rozmiar wymaganych buforów roboczych.