错误代码:E2002

类别:编译时:马赛克输入/输出块和平铺错位

当内核输入或输出的块形状与所用特定 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 会对每个内核输入/输出的次要维度和次次要维度强制执行以下限制:

  1. 可分性:块维度必须是底层张量中平铺维度的倍数,或者
  2. 完整形状例外情况:如果块维度不可分割,则必须等于底层张量中相应维度的完整大小

如果某个块同时违反了这两个条件,就会触发此错误。例如,从形状为 (8, 1024) 的输入加载形状为 (8, 100) 的块在形状为 (8, 128) 的硬件上平铺失败,因为 100 不能被 128100 != 1024 整除。但如果输入形状为 (32, 100),则允许。

调试

如需解决此错误,请确保内核的块形状与当前的硬件平铺对齐。修改内核代码,使块大小与所需的平铺对齐。

  • 示例:如果错误指出平铺是 (16, 128),但您的块形状是 (8, 128),请更改块规范,使形状与 (16, 128) 匹配。