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, aby zarządzać presją alokacji pamięci podręcznej. Kompilator próbuje podzielić zadanie 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. Ogólnie rzecz biorąc, 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 wielkości wsadu).
  • 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 szacowania 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.

Aby określić optymalne wartości tych parametrów, możesz zastosować optymalizację na podstawie opinii (FDO).

2. Zmniejsz wielkość wsadu

Wartość sample_count jest bezpośrednio powiązana z globalną wielkością wsadu. Zmniejszenie wielkości wsadu zmniejsza ilość danych, które każdy SparseCore musi przetworzyć w jednym kroku, a tym samym zmniejsza rozmiar wymaganych buforów roboczych.