类型#
TensorList#
TensorList 表示张量批次。TensorList 是 Pipeline.run()
、Pipeline.outputs()
或 Pipeline.share_outputs()
的返回值。
后续调用提到的函数(或 Pipeline.release_outputs()
)会使 TensorList(以及从中获得的任何 DALI 张量)失效,并向 DALI 指示内存可以用于其他用途。
TensorList 包装当前迭代的输出,并且仅在迭代期间有效。移动到下一次迭代后,不允许使用 TensorList。如果您希望保留数据,则需要在指示 DALI 您已释放它之前复制它。
对于典型的用例,例如当 DALI 通过 DL 框架插件 使用时,无需额外的内存簿记。
TensorListCPU#
- class nvidia.dali.tensors.TensorListCPU#
- __getitem__(self: TensorListCPU, i: int) TensorCPU #
返回列表中给定位置 i 的张量。
- __init__(*args, **kwargs)#
重载函数。
__init__(self: nvidia.dali.tensors.TensorListCPU, object: capsule, layout: str = ‘’) -> None
驻留在 CPU 内存中的张量列表。
- objectDLPack 对象
表示 TensorList 的 Python DLPack 对象
- layoutstr
数据布局
__init__(self: nvidia.dali.tensors.TensorListCPU, tl: nvidia.dali.tensors.TensorListCPU, layout: object = None) -> None
__init__(self: nvidia.dali.tensors.TensorListCPU, b: Buffer, layout: str = ‘’, is_pinned: bool = False) -> None
驻留在 CPU 内存中的张量列表。
- bobject
要包装到 TensorListCPU 对象中的缓冲区
- layoutstr
数据布局
- is_pinnedbool
如果提供的内存是页锁定的(pinned)
__init__(self: nvidia.dali.tensors.TensorListCPU, list_of_tensors: list, layout: str = ‘’) -> None
驻留在 CPU 内存中的张量列表。
- list_of_tensors[TensorCPU]
TensorCPU 对象的 Python 列表
- layoutstr
数据布局
- as_array(self: TensorListCPU) numpy.ndarray #
将 TensorList 作为 numpy 数组返回。TensorList 必须是密集的。
- as_cpu(self: TensorListCPU) TensorListCPU #
直通,因为它已经是 TensorListCPU 的实例。
- as_reshaped_tensor(self: TensorListCPU, arg0: list[int]) TensorCPU #
返回一个张量,该张量是将此 TensorList 强制转换为给定形状的视图。
只有当 TensorList 在内存中是连续的,并且请求的 Tensor 和 TensorList 的体积匹配时,才能调用此函数。
- as_tensor(self: TensorListCPU) TensorCPU #
返回一个张量,该张量是此 TensorList 的视图。
只有当 is_dense_tensor 返回 True 时,才能调用此函数。
- at(self: TensorListCPU, arg0: int) numpy.ndarray #
返回列表中给定位置的张量。
- copy_to_external(self: TensorListCPU, arg0: object) None #
将此 TensorList 的内容复制到驻留在 CPU 内存中的外部指针(类型为 ctypes.c_void_p)。
此函数由插件在内部使用,以连接来自受支持的深度学习框架的张量。
- data_ptr(self: TensorListCPU) object #
返回 TensorList 的第一个元素的地址。
- property dtype#
TensorListCPU 元素的数据类型。
- Type:
- is_dense_tensor(self: TensorListCPU) bool #
检查此 TensorList 中的所有张量是否具有相同的形状(因此列表本身可以视为张量)。
例如,如果 TensorList 包含 N 个张量,每个张量的形状为 (H,W,C)(具有相同的 H、W 和 C 值),则列表可以视为形状为 (N, H, W, C) 的张量。
- layout(self: TensorListCPU) str #
- reset(self: TensorListCPU) None #
- shape(self: TensorListCPU) list[tuple] #
张量列表的形状。
TensorListGPU#
- class nvidia.dali.tensors.TensorListGPU#
- __getitem__(self: TensorListGPU, i: int) TensorGPU #
返回列表中给定位置 i 的张量。
- __init__(*args, **kwargs)#
重载函数。
__init__(self: nvidia.dali.tensors.TensorListGPU, object: capsule, layout: str = ‘’) -> None
驻留在 GPU 内存中的张量列表。
- objectDLPack 对象
表示 TensorList 的 Python DLPack 对象
- layoutstr
数据布局
__init__(self: nvidia.dali.tensors.TensorListGPU, tl: nvidia.dali.tensors.TensorListGPU, layout: object = None) -> None
__init__(self: nvidia.dali.tensors.TensorListGPU, list_of_tensors: list, layout: str = ‘’) -> None
驻留在 GPU 内存中的张量列表。
- list_of_tensors[TensorGPU]
TensorGPU 对象的 Python 列表
- layoutstr
数据布局
__init__(self: nvidia.dali.tensors.TensorListGPU, object: object, layout: str = ‘’, device_id: int = -1) -> None
驻留在 GPU 内存中的张量列表。
- objectobject
实现 CUDA Array Interface 的 Python 对象
- layoutstr
数据布局
- device_idint
此张量所在的设备。如果未提供,则使用当前设备。
__init__(self: nvidia.dali.tensors.TensorListGPU) -> None
驻留在 GPU 内存中的张量列表。
- as_cpu(self: TensorListGPU) TensorListCPU #
返回 TensorListCPU 对象,该对象是此 TensorListGPU 的副本。
- as_reshaped_tensor(self: TensorListGPU, arg0: list[int]) TensorGPU #
返回一个张量,该张量是将此 TensorList 强制转换为给定形状的视图。
只有当 TensorList 在内存中是连续的,并且请求的 Tensor 和 TensorList 的体积匹配时,才能调用此函数。
- as_tensor(self: TensorListGPU) TensorGPU #
返回一个张量,该张量是此 TensorList 的视图。
只有当 is_dense_tensor 返回 True 时,才能调用此函数。
- at(self: TensorListGPU, arg0: int) TensorGPU #
返回列表中给定位置的张量。已弃用,请使用 __getitem__()。
- copy_to_external(self: TensorListGPU, ptr: object, cuda_stream: object = None, non_blocking: bool = False, use_copy_kernel: bool = False) None #
将此 TensorList 的内容复制到驻留在 GPU 内存中的外部指针。
此函数由插件在内部使用,以连接来自受支持的深度学习框架的张量。
- ptrctypes.c_void_p
复制目标。
- cuda_streamctypes.c_void_p
在其上调度复制的 CUDA 流(如果未提供,则为默认流)。
- non_blockingbool
异步复制。
- data_ptr(self: TensorListGPU) object #
返回 TensorList 的第一个元素的地址。
- device_id(self: TensorListGPU) int #
- property dtype#
TensorListGPU 元素的数据类型。
- Type:
- is_dense_tensor(self: TensorListGPU) bool #
检查此 TensorList 中的所有张量是否具有相同的形状(因此列表本身可以视为张量)。
例如,如果 TensorList 包含 N 个张量,每个张量的形状为 (H,W,C)(具有相同的 H、W 和 C 值),则列表可以视为形状为 (N, H, W, C) 的张量。
- layout(self: TensorListGPU) str #
- reset(self: TensorListGPU) None #
- shape(self: TensorListGPU) list[tuple] #
张量列表的形状。
Tensor#
TensorCPU#
- class nvidia.dali.tensors.TensorCPU#
表示驻留在主机内存中的 Tensor 的类。它可用于访问
TensorListCPU
的单个样本,或用于包装旨在作为 DALI 输入传递的 CPU 内存。它与 Python Buffer Protocol 和 NumPy Array Interface 兼容。
- dtype(self: TensorCPU) str #
表示 Tensor 的 NumPy 类型的字符串。
Warning
此方法已弃用。请使用
TensorCPU.dtype
代替。
- property __array_interface__#
返回 TensorCPU 的 Array Interface 表示。
- __init__(*args, **kwargs)#
重载函数。
__init__(self: nvidia.dali.tensors.TensorCPU, object: capsule, layout: str = ‘’) -> None
包装驻留在 CPU 内存中的 DLPack Tensor。
- objectDLPack 对象
Python DLPack 对象
- layoutstr
数据布局
__init__(self: nvidia.dali.tensors.TensorCPU, b: Buffer, layout: str = ‘’, is_pinned: bool = False) -> None
包装驻留在 CPU 内存中的 Tensor。
- bobject
要包装到 TensorListCPU 对象中的缓冲区
- layoutstr
数据布局
- is_pinnedbool
如果提供的内存是页锁定的(pinned)
- property dtype#
TensorCPU 元素的数据类型。
- Type:
TensorGPU#
- class nvidia.dali.tensors.TensorGPU#
表示驻留在 GPU 内存中的 Tensor 的类。它可用于访问
TensorListGPU
的单个样本,或用于包装旨在作为 DALI 输入传递的 GPU 内存。它与 CUDA Array Interface 兼容。
- dtype(self: TensorCPU) str #
表示 Tensor 的 NumPy 类型的字符串。
Warning
此方法已弃用。请使用
TensorGPU.dtype
代替。
- property __cuda_array_interface__#
返回 TensorGPU 的 CUDA Array Interface (版本 2) 表示。
- __init__(*args, **kwargs)#
重载函数。
__init__(self: nvidia.dali.tensors.TensorGPU, object: capsule, layout: str = ‘’) -> None
包装驻留在 GPU 内存中的 DLPack Tensor。
- objectDLPack 对象
Python DLPack 对象
- layoutstr
数据布局
__init__(self: nvidia.dali.tensors.TensorGPU, object: object, layout: str = ‘’, device_id: int = -1) -> None
包装驻留在 GPU 内存中,并实现了 CUDA Array Interface 的 Tensor。
- objectobject
实现了 CUDA Array Interface 的 Python 对象
- layoutstr
数据布局
- device_id: int
此张量所在的设备。如果未提供,则使用当前设备。
- copy_to_external(self: TensorGPU, ptr: object, cuda_stream: object = None, non_blocking: bool = False, use_copy_kernel: bool = False) None #
复制到 GPU 内存中的外部指针。
- ptrctypes.c_void_p
复制目标。
- cuda_streamctypes.c_void_p
在其上调度复制的 CUDA 流(如果未提供,则为默认流)。
- non_blockingbool
异步复制。
- property dtype#
TensorGPU 元素的数据类型。
- Type:
- source_info(self: TensorGPU) str #
- 获取描述 tensor 中数据来源的字符串,例如从中加载数据的文件名。
from which the data was loaded.
- squeeze(self: TensorGPU, dim: object = None) bool #
从 Tensor 的形状中移除大小为 1 的维度条目,如果形状已更改,则返回 true,如果形状保持不变,则返回 false。
- dimint
如果指定,则表示要压缩的单维度轴。
- property stream#
数据布局#
Tensor 布局字符串格式#
DALI 使用短字符串 (Python str 类型) 来描述 tensor 中的数据布局,方法是将一个字符分配给 tensor 形状中存在的每个维度。例如,shape=(400, 300, 3),layout=”HWC” 表示数据是具有 3 个交错通道、400 像素高度和 300 像素宽度的图像。
对于 TensorList,列表中的索引不被视为维度(批次中样本的数量),并且不包含在布局中。
解释 Tensor 布局字符串#
DALI 允许您处理不同性质的数据(例如,图像、视频、音频、体积图像)以及不同的格式(例如,平面配置与交错通道中的 RGB 图像)。通常,DALI 运算符可以处理不同的数据格式,并将根据输入的性质以不同的方式运行。
虽然我们不限制在 tensor 布局中使用的有效字符,但 DALI 运算符假定某种命名约定。以下是常用维度名称的列表
名称 |
含义 |
---|---|
H |
高度 |
W |
宽度 |
C |
通道 |
F |
帧数 |
D |
深度 |
以下是一些常用布局的示例
布局 |
描述 |
---|---|
HWC |
图像 (交错) |
CHW |
图像 (平面) |
DHWC |
体积图像 (交错) |
CDHW |
体积图像 (平面) |
FHWC |
视频 |
例如,接收具有交错布局 (“HWC”) 的输入的裁剪操作(Crop 运算符)将推断它应该在前两个维度 (H, W) 上进行裁剪。另一方面,如果输入具有平面布局 (“CHW”),则裁剪将改为在第二和第三维度上进行。
一些运算符本质上会修改数据的布局(例如 Transpose),而另一些运算符会将相同的数据布局传播到输出(例如 Normalize)。
每个运算符的布局限制(如果有)可通过运算符的文档获得。
值得注意的是,当使用 ExternalSource API 时,用户有责任显式填写布局信息。
常量包装器#
Constant#
- nvidia.dali.types.Constant(value, dtype=None, shape=None, layout=None, device=None, **kwargs)#
包装一个常量值,然后可以在
nvidia.dali.Pipeline.define_graph()
pipeline 定义步骤中使用。如果
value
参数是标量,并且未提供shape
、layout
或device
,则该函数将返回一个ScalarConstant
包装器对象,当在 数学表达式 中使用时,该对象会接收特殊的优化处理。否则,该函数将创建一个 dali.ops.Constant 节点,该节点生成一批常量 tensor。
- 参数:
value¶ (bool, int, float, DALIDataType DALIImageType, DALIInterpType,) – 要包装的常量值。list 或 tuple 或 numpy.ndarray。如果它是标量,则可以在数学表达式中用作标量值。否则,它将生成一个常量 tensor 节点(可选地根据
shape
参数调整形状)。如果此参数是 numpy 数组、PyTorch tensor 或 MXNet 数组,则shape
和dtype
的值将分别默认为 value.shape 和 value.dtype。dtype¶ (DALIDataType, 可选) – 常量的目标类型。
shape¶ (list 或 tuple of int, 可选) – 请求的输出形状。如果
value
是标量,则会广播它以填充请求的形状。否则,value
中的元素数必须与形状的体积匹配。layout¶ (string, 可选) – 描述常量 tensor 布局的字符串,例如 “HWC”
device¶ (string, 可选, "cpu" 或 "gpu") – 用于放置常量 tensor 的设备。如果指定,则强制该值成为给定设备上的常量 tensor 节点,而与
value
类型或shape
无关。**kwargs¶ (additional keyword arguments) – 如果存在,它会强制常量成为 Constant tensor 节点,并且参数将传递给 dali.ops.Constant 运算符
- class nvidia.dali.types.ScalarConstant(value, dtype=None)#
Note
此类不应直接实例化;请使用带有适当参数的
Constant()
函数来创建此类的实例。用于常量值的包装器,该常量值可在 DALI 数学表达式 中使用,并以元素方式应用于
nvidia.dali.Pipeline.define_graph()
步骤中表示 Tensor 的 DALI 运算符的结果。ScalarConstant 指示在类型提升方面,该值应被视为哪种类型。从 Python 传递到后端的实际值对于整数值将是 int32,对于浮点值将是 float32。Python 内置类型 bool、int 和 float 将被标记为分别指示
nvidia.dali.types.DALIDataType.BOOL
、nvidia.dali.types.DALIDataType.INT32
和nvidia.dali.types.DALIDataType.FLOAT
。- 参数:
value¶ (bool 或 int 或 float) – 要传递给 DALI 表达式的常量值。
dtype¶ (DALIDataType, 可选) – 常量在类型提升中使用的目标类型。
枚举#
DALIDataType#
- class nvidia.dali.types.DALIDataType#
表示 Tensor 数据类型的对象。
- NO_TYPE#
- UINT8#
- UINT16#
- UINT32#
- UINT64#
- INT8#
- INT16#
- INT32#
- INT64#
- FLOAT16#
- FLOAT#
- FLOAT64#
- BOOL#
- STRING#
- FEATURE#
- IMAGE_TYPE#
- DATA_TYPE#
- INTERP_TYPE#
- TENSOR_LAYOUT#
- PYTHON_OBJECT#
- nvidia.dali.types.to_numpy_type(dali_type)#
将 DALIDataType 转换为 NumPy 类型
- 参数:
dali_type¶ (DALIDataType) – 要转换的输入类型
DALIIterpType#
DALIImageType#
SampleInfo#
- class nvidia.dali.types.SampleInfo(idx_in_epoch, idx_in_batch, iteration, epoch_idx)#
描述从
nvidia.dali.fn.external_source()
请求的样本的索引- 变量:
idx_in_epoch – 样本在 epoch 中的从 0 开始的索引
idx_in_batch – 样本在 batch 中的从 0 开始的索引
iteration – 当前 batch 在 epoch 中的编号
epoch_idx – 当前 epoch 的编号
BatchInfo#
- class nvidia.dali.types.BatchInfo(iteration, epoch_idx)#
描述从
nvidia.dali.fn.external_source()
请求的 batch- 变量:
iteration – 当前 batch 在 epoch 中的编号
epoch_idx – 当前 epoch 的编号
TensorLayout#
- class nvidia.dali.types.TensorLayout#