类别:编译时:马赛克输入/输出块和平铺错位
当内核输入或输出的块形状与所用特定 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 中的张量核心 (TC) 具有二维向量寄存器。这两个维度分别称为子车道和车道。由于 TPU 计算单元(例如,MXU)以向量寄存器为粒度运行,XLA 数组以平铺方式布局在 TPU 内存中。
这种平铺(例如,8x128) 在向计算单元馈送数据时,尽可能减少数据转换。确切的平铺维度(子通道数 × 通道数)取决于硬件代系和数据类型。例如,大多数类型的常见平铺为 8×128。
在编译时,XLA 会对每个内核输入/输出的次要维度和次次要维度强制执行以下限制:
- 可分性:块维度必须是底层张量中平铺维度的倍数,或者
- 完整形状例外情况:如果块维度不可分割,则必须等于底层张量中相应维度的完整大小。
如果某个块同时违反了这两个条件,就会触发此错误。例如,从形状为 (8, 1024) 的输入加载形状为 (8, 100) 的块在形状为 (8, 128) 的硬件上平铺失败,因为 100 不能被 128 和 100 != 1024 整除。但如果输入形状为 (32, 100),则允许。
调试
如需解决此错误,请确保内核的块形状与当前的硬件平铺对齐。修改内核代码,使块大小与所需的平铺对齐。
- 示例:如果错误指出平铺是
(16, 128),但您的块形状是(8, 128),请更改块规范,使形状与(16, 128)匹配。