錯誤代碼:E3001

類別:CompileTime:SparseCore No Viable Logical Replica Count

如果 XLA:SparseCore 編譯器無法判斷有效的邏輯副本計數設定,導致工作負載無法納入 SparseCore 的本機暫存記憶體 (Tilespmem),就會發生這個錯誤。

錯誤訊息示例:

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 後端:TPU

總覽

這項錯誤專屬於 SparseCore 用途,特別是大型嵌入模型 (LEM)。

邏輯副本計數是內部編譯器參數,可決定如何分割輸入批次,以管理暫存空間分配壓力。編譯器會嘗試將工作負載分割成較小的區塊 (副本),讓每個區塊所需的中間緩衝區能放入 SparseCore 有限的暫存記憶體。一般來說,邏輯副本數量越多,每次處理的資料批次越小,分配壓力就越小。

這項錯誤表示編譯器嘗試各種分割設定後,仍找不到可將所需緩衝區放入 Tilespmem 記憶體的設定。分配大小取決於下列因素的組合:

  • sample_count:指派給每個 SparseCore 的嵌入式查閱 ID 數量 (衍生自批次大小)。
  • feature_width:嵌入維度的大小。
  • max_nz_per_row:所有 SparseCore 中非專屬嵌入式搜尋 ID 的數量上限。
  • max_unique_nz_per_row:不重複嵌入式搜尋 ID 的數量上限。

偵錯

如要解決這項錯誤,請減少 SparseCore 暫存區的記憶體壓力。

1. 改善中繼資料估算值

編譯器會根據 max_nz_per_rowmax_unique_nz_per_row 分配記憶體。如果保守估算這些值 (即設定的值遠高於實際資料需求),編譯器就會保留不必要的空間,導致發生這個錯誤。請確保這些參數能如實反映資料集的實際 ID 分布。

您可以考慮套用回饋導向最佳化 (FDO),判斷這些參數的最佳值。

2. 縮減批次大小

sample_count 是直接從全域批次大小衍生而來。減少批次大小可降低每個 SparseCore 在每個步驟中必須處理的資料量,進而減少所需暫存緩衝區的大小。