数据格式描述#
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
是图像的宽度。忽略始终在这些之前的批次大小,C
、H
和 W
通常排序为 CHW
或 HWC
。
以下图像被划分为 HxW
矩阵,每个通道一个矩阵,并且这些矩阵按顺序存储;所有通道值都连续存储。
图像存储为单个 HxW 矩阵,其值是 C 元组,每个通道一个值;一个点(像素)的所有值都连续存储。
定义了更多格式来将通道值打包在一起并使用降低的精度以实现更快的计算。因此,TensorRT 也支持像 NC
、2HW2
和 NHWC8
这样的格式。
在 NC
、2HW2 (TensorFormat::kCHW2)
中,成对的通道值被打包在每个 HxW
矩阵中(如果通道数为奇数,则使用空值)。结果是一种格式,其中 ⌈C/2⌉ HxW 矩阵的值是两个连续通道的值对;请注意,这种排序会交错维度,如果通道在同一对中,则步幅为 1
,否则步幅为 2xHxW
。
成对的通道值被打包在每个 HxW
矩阵中。结果是一种格式,其中 ⌈C/2⌉ HxW 矩阵的值是两个连续通道的值对。
在 NHWC8 (TensorFormat::kHWC8)
中,HxW 矩阵的条目包括所有通道的值。此外,这些值被打包在 ⌈C/8⌉ 个 8 元组中,并且 C
向上舍入到最接近 8 的倍数。
在这种 NHWC8 格式中,HxW 矩阵的条目包括所有通道的值。
其他 TensorFormat
遵循与之前提到的 TensorFormat::kCHW2
和 TensorFormat::kHWC8
类似的规则。