類別: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_row 和 max_unique_nz_per_row 分配記憶體。如果保守估算這些值 (即設定的值遠高於實際資料需求),編譯器就會保留不必要的空間,導致發生這個錯誤。請確保這些參數能如實反映資料集的實際 ID 分布。
您可以考慮套用回饋導向最佳化 (FDO),判斷這些參數的最佳值。
2. 縮減批次大小
sample_count 是直接從全域批次大小衍生而來。減少批次大小可降低每個 SparseCore 在每個步驟中必須處理的資料量,進而減少所需暫存緩衝區的大小。