Fehlercode: E3001

Kategorie:CompileTime: SparseCore No Viable Logical Replica Count

Dieser Fehler tritt auf, wenn der Compiler XLA:SparseCore keine gültige Konfiguration für die Anzahl logischer Replikate ermitteln kann, mit der die Arbeitslast in den lokalen Scratchpad-Speicher (Tilespmem) des SparseCore passt.

Beispiel für Fehlermeldungen :

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

XLA-Back-Ends:TPU

Übersicht

Dieser Fehler tritt nur bei SparseCore -Anwendungsfällen auf, insbesondere bei Large Embedding Models (LEMs).

Die Anzahl logischer Replikate ist ein interner Compilerparameter, der bestimmt, wie Eingabe-Batches partitioniert werden, um den Druck auf die Scratchpad-Zuweisung zu verwalten. Der Compiler versucht, die Arbeitslast in kleinere Teile (Replikate) aufzuteilen, damit die für jeden Teil erforderlichen Zwischenpuffer in den begrenzten Scratchpad-Speicher des SparseCore passen. Im Allgemeinen reduziert eine höhere Anzahl logischer Replikate den Zuweisungsdruck, da jeweils kleinere Daten-Batches verarbeitet werden.

Dieser Fehler gibt an, dass der Compiler auch nach dem Ausprobieren verschiedener Aufteilungskonfigurationen keine Konfiguration gefunden hat, bei der die erforderlichen Puffer in den Tilespmem-Speicher passen. Die Zuweisungsgröße wird durch eine Kombination aus folgenden Faktoren bestimmt:

  • sample_count: Die Anzahl der Einbettungs-Lookup-IDs, die jedem SparseCore zugewiesen sind (abgeleitet von der Batchgröße).
  • feature_width: Die Größe der Einbettungsdimension.
  • max_nz_per_row: Die maximale Anzahl nicht eindeutiger Einbettungs-Lookup-IDs für alle SparseCores.
  • max_unique_nz_per_row: Die maximale Anzahl eindeutiger Einbettungs-Lookup-IDs.

Debugging

Um diesen Fehler zu beheben, müssen Sie den Speicherbedarf des SparseCore-Scratchpads reduzieren.

1. Metadatenschätzungen verbessern

Der Compiler weist Speicher basierend auf max_nz_per_row und max_unique_nz_per_row zu. Wenn diese Werte konservativ geschätzt werden (d.h. viel höher als für die tatsächlichen Daten erforderlich), reserviert der Compiler unnötigen Speicherplatz, was zu diesem Fehler führt. Achten Sie darauf, dass diese Parameter die tatsächliche ID-Verteilung Ihres Datasets genau widerspiegeln.

Sie können Feedback-Directed Optimization (FDO) anwenden, um optimale Werte für diese Parameter zu ermitteln.

2. Batchgröße reduzieren

Die sample_count wird direkt von der globalen Batchgröße abgeleitet. Wenn Sie die Batchgröße reduzieren, verringert sich die Datenmenge, die jeder SparseCore pro Schritt verarbeiten muss. Dadurch wird auch die Größe der erforderlichen Scratchpad-Puffer reduziert.