類別:編譯時間:馬賽克輸入/輸出內容的區塊和分塊未對齊
如果核心輸入或輸出的區塊形狀,與所用特定 TPU 硬體上資料類型的預設分塊不一致,就會發生這個錯誤。
錯誤訊息示例:
UNIMPLEMENTED: Mosaic failed to compile TPU kernel: Failed to set window params
for input 0: Operand of shape (..., 256, 8192) has tiling (16, 128), but its
block shape (..., 8, 8192) is not divisible by tiling evenly nor matches the
full shape.
XLA 後端:TPU
總覽
TPU 中的 Tensor Core (TC) 具有二維向量暫存器。這兩個維度分別稱為「子車道」和「車道」。由於 TPU 運算單元 (例如MXU) 是以向量暫存器的精細度運作,XLA 陣列則以圖塊形式配置在 TPU 記憶體中。
這種平鋪 (例如8x128) 盡量減少資料轉換,以提供給運算單元。確切的切片尺寸 (子車道 × 車道) 取決於硬體世代和資料類型。舉例來說,大多數類型的常見分塊為 8×128。
在編譯期間,XLA 會對每個核心輸入/輸出的次要和第 2 次要維度強制執行下列限制:
- 可整除性:區塊維度必須是基礎張量中圖塊維度的倍數,或
- 完整形狀例外狀況:如果區塊維度無法整除,則必須等於基礎張量中該維度的完整大小。
如果區塊同時違反這兩項條件,就會觸發這項錯誤。舉例來說,從形狀為 (8, 1024) 的輸入內容載入形狀為 (8, 100) 的區塊,在形狀為 (8, 128) 的硬體上進行分塊時會失敗,因為 100 無法除以 128 和 100 != 1024。但如果輸入形狀為 (32, 100),則會允許。
偵錯
如要解決這項錯誤,請確認核心的區塊形狀與目前的硬體分塊對齊。修改核心程式碼,使區塊大小與必要分塊對齊,成為後者的倍數。
- 示例:如果錯誤訊息指出圖塊是
(16, 128),但你的圖塊形狀是(8, 128),請變更圖塊規格,使形狀符合(16, 128)。