Kod błędu: E3001

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_rowmax_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.