数据格式描述#

TensorRT 支持不同的数据格式。 有两个方面需要考虑:数据类型和布局。

数据类型格式

数据类型是每个值的表示。其大小决定了值的范围和表示的精度,包括:

  • FP32(32 位浮点或单精度)

  • FP16(16 位浮点或半精度)

  • BF16(1 位符号位,8 位指数位,7 位尾数位)

  • FP8(1 位符号位,4 位指数位,3 位尾数位)

  • INT64(64 位整数)

  • INT32(32 位整数)

  • INT8(8 位整数)

  • UINT8(无符号 8 位整数)

  • INT4(4 位整数)

布局格式

布局格式决定了值的存储顺序。通常,批次维度是最左边的维度,而其他维度指的是每个数据项的方面,例如 C 是通道,H 是高度,W 是图像的宽度。忽略始终在这些之前的批次大小,CHW 通常排序为 CHWHWC

以下图像被划分为 HxW 矩阵,每个通道一个矩阵,并且这些矩阵按顺序存储;所有通道值都连续存储。

Layout Format for CHW

图像存储为单个 HxW 矩阵,其值是 C 元组,每个通道一个值;一个点(像素)的所有值都连续存储。

Layout format for HWC

定义了更多格式来将通道值打包在一起并使用降低的精度以实现更快的计算。因此,TensorRT 也支持像 NC2HW2NHWC8 这样的格式。

NC2HW2 (TensorFormat::kCHW2) 中,成对的通道值被打包在每个 HxW 矩阵中(如果通道数为奇数,则使用空值)。结果是一种格式,其中 ⌈C/2⌉ HxW 矩阵的值是两个连续通道的值对;请注意,这种排序会交错维度,如果通道在同一对中,则步幅为 1,否则步幅为 2xHxW

成对的通道值被打包在每个 HxW 矩阵中。结果是一种格式,其中 ⌈C/2⌉ HxW 矩阵的值是两个连续通道的值对。

Values of ⌈C/2⌉ HxW Matrices are Pairs of Values of Two Consecutive Channels

NHWC8 (TensorFormat::kHWC8) 中,HxW 矩阵的条目包括所有通道的值。此外,这些值被打包在 ⌈C/8⌉ 个 8 元组中,并且 C 向上舍入到最接近 8 的倍数。

在这种 NHWC8 格式中,HxW 矩阵的条目包括所有通道的值。

In NHWC8 Format, the Entries of an HxW Matrix Include the Values of all the Channels

其他 TensorFormat 遵循与之前提到的 TensorFormat::kCHW2TensorFormat::kHWC8 类似的规则。