类型#

TensorList#

TensorList 表示张量批次。TensorList 是 Pipeline.run(), Pipeline.outputs()Pipeline.share_outputs() 的返回值。

后续调用提到的函数(或 Pipeline.release_outputs())会使 TensorList(以及从中获得的任何 DALI 张量)无效,并向 DALI 指示内存可以用于其他用途。

TensorList 包装当前迭代的输出,并且仅在迭代期间有效。不允许在移动到下一次迭代后使用 TensorList。如果您希望保留数据,则需要在指示 DALI 您已释放数据之前复制它。

对于典型的用例,例如当 DALI 通过 深度学习框架插件 使用时,无需额外的内存簿记。

TensorListCPU#

class nvidia.dali.tensors.TensorListCPU#
__getitem__(self: TensorListCPU, i: int) TensorCPU#

返回列表中给定位置 i 的张量。

__init__(*args, **kwargs)#

重载函数。

  1. __init__(self: nvidia.dali.tensors.TensorListCPU, object: capsule, layout: str = ‘’) -> None

    驻留在 CPU 内存中的张量列表。

    objectDLPack 对象

    表示 TensorList 的 Python DLPack 对象

    layoutstr

    数据布局

  2. __init__(self: nvidia.dali.tensors.TensorListCPU, tl: nvidia.dali.tensors.TensorListCPU, layout: object = None) -> None

  3. __init__(self: nvidia.dali.tensors.TensorListCPU, b: Buffer, layout: str = ‘’, is_pinned: bool = False) -> None

    驻留在 CPU 内存中的张量列表。

    bobject

    要包装到 TensorListCPU 对象中的缓冲区

    layoutstr

    数据布局

    is_pinnedbool

    如果提供的内存是页锁定的(pinned)

  4. __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 在内存中是连续的,并且请求的 TensorTensorList 的体积匹配时,才能调用此函数。

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 元素的数据类型。

类型

DALIDataType

is_dense_tensor(self: TensorListCPU) bool#

检查此 TensorList 中的所有张量是否具有相同的形状(因此列表本身可以视为张量)。

例如,如果 TensorList 包含 N 个张量,每个张量的形状为 (H,W,C)(具有相同的 HWC 值),则该列表可以视为形状为 (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)#

重载函数。

  1. __init__(self: nvidia.dali.tensors.TensorListGPU, object: capsule, layout: str = ‘’) -> None

    驻留在 GPU 内存中的张量列表。

    objectDLPack 对象

    表示 TensorList 的 Python DLPack 对象

    layoutstr

    数据布局

  2. __init__(self: nvidia.dali.tensors.TensorListGPU, tl: nvidia.dali.tensors.TensorListGPU, layout: object = None) -> None

  3. __init__(self: nvidia.dali.tensors.TensorListGPU, list_of_tensors: list, layout: str = ‘’) -> None

    驻留在 GPU 内存中的张量列表。

    list_of_tensors[TensorGPU]

    TensorGPU 对象的 Python 列表

    layoutstr

    数据布局

  4. __init__(self: nvidia.dali.tensors.TensorListGPU, object: object, layout: str = ‘’, device_id: int = -1) -> None

    驻留在 GPU 内存中的张量列表。

    objectobject

    实现 CUDA Array Interface 的 Python 对象

    layoutstr

    数据布局

    device_idint

    此张量所在的设备。如果未提供,则使用当前设备。

  5. __init__(self: nvidia.dali.tensors.TensorListGPU) -> None

    驻留在 GPU 内存中的张量列表。

as_cpu(self: TensorListGPU) TensorListCPU#

返回作为此 TensorListGPU 副本的 TensorListCPU 对象。

as_reshaped_tensor(self: TensorListGPU, arg0: list[int]) TensorGPU#

返回一个张量,该张量是将此 TensorList 转换为给定形状的视图。

仅当 TensorList 在内存中是连续的,并且请求的 TensorTensorList 的体积匹配时,才能调用此函数。

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 元素的数据类型。

类型

DALIDataType

is_dense_tensor(self: TensorListGPU) bool#

检查此 TensorList 中的所有张量是否具有相同的形状(因此列表本身可以视为张量)。

例如,如果 TensorList 包含 N 个张量,每个张量的形状为 (H,W,C)(具有相同的 HWC 值),则该列表可以视为形状为 (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 ProtocolNumPy Array InterfaceDLPack 兼容。

dtype(self: TensorCPU) str#

表示 Tensor 的 NumPy 类型的字符串。

Warning

此方法已弃用。请使用 TensorCPU.dtype 代替。

property __array_interface__#

返回 TensorCPU 的 Array Interface 表示。

__dlpack__(self: TensorCPU, stream: Optional[int] = None, dl_device: Optional[tuple[nvidia.dali.backend_impl.DLDeviceType, int]] = None) capsule#

将 tensor 作为 DLPack capsule 公开。

Note

当不使用动态执行时(即 pipeline 参数 exec_dynamic 未设置或未评估为 True),pipeline 输出可能会在调用 release_outputs 后被 DALI 重用和覆盖。如果您想无限期地保留输出,请使用 exec_dynamic=True

streamint, None

调用者将用于访问缓冲区的 CUDA stream。如有必要,同步事件可能会插入到该 stream 中。特殊值

  • None - 任何 stream;在主机上等待

  • -1 - 完全不同步

  • 1 - 传统默认 stream

  • 2 - 传统每个线程 stream

  • >2 - 转换为整数的 CUDA stream 句柄

  • 0 - 禁止值

__dlpack_device__(self: TensorCPU) tuple[nvidia.dali.backend_impl.DLDeviceType, int]#

以 DLPack 格式返回设备类型和设备 ID。

__init__(*args, **kwargs)#

重载函数。

  1. __init__(self: nvidia.dali.tensors.TensorCPU, object: capsule, layout: str = ‘’) -> None

    包装驻留在 CPU 内存中的 DLPack Tensor。

    objectDLPack 对象

    Python DLPack 对象

    layoutstr

    数据布局

  2. __init__(self: nvidia.dali.tensors.TensorCPU, b: Buffer, layout: str = ‘’, is_pinned: bool = False) -> None

    包装驻留在 CPU 内存中的 Tensor。

    bobject

    要包装到 TensorListCPU 对象中的缓冲区

    layoutstr

    数据布局

    is_pinnedbool

    如果提供的内存是页锁定的(pinned)

as_cpu(self: TensorCPU) TensorCPU#

直通,因为该对象已经是 TensorCPU 的实例。

copy_to_external(self: TensorCPU, ptr: object) None#

复制到 CPU 内存中的外部指针。

ptrctypes.c_void_p

复制的目标位置。

data_ptr(self: TensorCPU) object#

返回 tensor 的第一个元素的地址。

property dtype#

TensorCPU 元素的数据类型。

类型

DALIDataType

get_property(self: TensorCPU, arg0: str) object#
layout(self: TensorCPU) str#
shape(self: TensorCPU) list#

tensor 的形状。

source_info(self: TensorCPU) str#
获取描述 tensor 中数据来源的字符串,例如,文件名

数据加载自该文件。

squeeze(self: TensorCPU, dim: object = None) bool#

从 Tensor 的形状中移除大小为 1 的维度条目,如果形状已更改,则返回 true,如果形状保持不变,则返回 false。

dimint

如果指定,则表示要压缩的单维度轴。

TensorGPU#

class nvidia.dali.tensors.TensorGPU#

表示驻留在 GPU 内存中的 Tensor 的类。它可以用于访问 TensorListGPU 的单个样本,或用于包装旨在作为 DALI 输入传递的 GPU 内存。

它与 CUDA Array InterfaceDLPack 兼容。

dtype(self: TensorCPU) str#

表示 Tensor 的 NumPy 类型的字符串。

Warning

此方法已弃用。请使用 TensorGPU.dtype 代替。

property __cuda_array_interface__#

返回 TensorGPU 的 CUDA Array Interface (Version 2) 表示。

__dlpack__(self: TensorGPU, stream: Optional[int] = None, dl_device: Optional[tuple[nvidia.dali.backend_impl.DLDeviceType, int]] = None) capsule#

将 tensor 作为 DLPack capsule 公开。

Note

当不使用动态执行时(即 pipeline 参数 exec_dynamic 未设置或未评估为 True),pipeline 输出可能会在调用 release_outputs 后被 DALI 重用和覆盖。如果您想无限期地保留输出,请使用 exec_dynamic=True

streamint, None

调用者将用于访问缓冲区的 CUDA stream。如有必要,同步事件可能会插入到该 stream 中。特殊值

  • None - 任何 stream;在主机上等待

  • -1 - 完全不同步

  • 1 - 传统默认 stream

  • 2 - 传统每个线程 stream

  • >2 - 转换为整数的 CUDA stream 句柄

  • 0 - 禁止值

__dlpack_device__(self: TensorGPU) tuple[nvidia.dali.backend_impl.DLDeviceType, int]#

以 DLPack 格式返回设备类型和设备 ID。

__init__(*args, **kwargs)#

重载函数。

  1. __init__(self: nvidia.dali.tensors.TensorGPU, object: capsule, layout: str = ‘’) -> None

    包装驻留在 GPU 内存中的 DLPack Tensor。

    objectDLPack 对象

    Python DLPack 对象

    layoutstr

    数据布局

  2. __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

    此张量所在的设备。如果未提供,则使用当前设备。

as_cpu(self: TensorGPU) TensorCPU#

返回一个 TensorCPU 对象,它是此 TensorGPU 的副本。

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

异步复制。

data_ptr(self: TensorGPU) object#

返回 tensor 的第一个元素的地址。

device_id(self: TensorGPU) int#
property dtype#

TensorGPU 元素的数据类型。

类型

DALIDataType

get_property(self: TensorGPU, arg0: str) object#
layout(self: TensorGPU) str#
shape(self: TensorGPU) list#

tensor 的形状。

source_info(self: TensorGPU) str#
获取描述 tensor 中数据来源的字符串,例如,文件名

数据加载自该文件。

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 参数是标量,并且未提供 shapelayoutdevice,则该函数将返回一个 ScalarConstant 包装器对象,该对象在使用 数学表达式 时会收到特殊的优化处理。

否则,该函数将创建一个 dali.ops.Constant 节点,该节点生成一批常量 tensor。

参数:
  • value (bool, int, float, DALIDataType DALIImageType, DALIInterpType,) – 一个 listtuplenumpy.ndarray 要包装的常量值。如果它是标量,则可以在数学表达式中用作标量值。否则,它将生成一个常量 tensor 节点(可选地根据 shape 参数调整形状)。如果此参数是 numpy 数组、PyTorch tensor 或 MXNet 数组,则 shapedtype 的值将分别默认为 value.shapevalue.dtype

  • dtype (DALIDataType, 可选) – 常量的目标类型。

  • shape (listtuple of int, 可选) – 请求的输出形状。如果 value 是标量,则会广播它以填充请求的形状。否则,value 中的元素数量必须与形状的体积匹配。

  • layout (string, 可选) – 描述常量 tensor 布局的字符串,例如 “HWC”

  • device (string, 可选, "cpu""gpu") – 用于放置常量 tensor 的设备。如果指定,则强制该值成为给定设备上的常量 tensor 节点,而与 value 类型或 shape 无关。

  • **kwargs (附加关键字参数) – 如果存在,则强制常量成为 Constant tensor 节点,并且参数将传递给 dali.ops.Constant 算子

class nvidia.dali.types.ScalarConstant(value, dtype=None)#

Note

不应直接实例化此类;使用带有适当参数的 Constant() 函数来创建此类的实例。

可用于 DALI 数学表达式 的常量值的包装器,并逐元素应用于 DALI 算子的结果,这些算子表示 nvidia.dali.Pipeline.define_graph() 步骤中的 Tensor。

ScalarConstant 指示应将该值视为相对于类型提升的哪种类型。从 python 传递到后端的实际值对于整数值将为 int32,对于浮点值将为 float32。Python 内置类型 boolintfloat 将被标记为分别指示 nvidia.dali.types.DALIDataType.BOOLnvidia.dali.types.DALIDataType.INT32nvidia.dali.types.DALIDataType.FLOAT

参数:
  • value (boolintfloat) – 要传递给 DALI 表达式的常量值。

  • dtype (DALIDataType, optional) – 用于类型提升的常量的目标类型。

Enums#

DALIDataType#

class nvidia.dali.types.DALIDataType#

表示张量数据类型的对象。

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#

class nvidia.dali.types.DALIInterpType#
插值模式。

注意:对于 2D 输入,linear 和 cubic 分别与 bilinear 和 bicubic 同义。

INTERP_NN#
INTERP_LINEAR#
INTERP_CUBIC#
INTERP_LANCZOS3#
INTERP_TRIANGULAR#
INTERP_GAUSSIAN#

DALIImageType#

class nvidia.dali.types.DALIImageType#

图像类型

RGB#
BGR#
GRAY#
YCbCr#
ANY_DATA#

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 – epoch 内当前 batch 的编号

  • epoch_idx – 当前 epoch 的编号

BatchInfo#

class nvidia.dali.types.BatchInfo(iteration, epoch_idx)#

描述从 nvidia.dali.fn.external_source() 请求的 batch

变量:
  • iteration – epoch 内当前 batch 的编号

  • epoch_idx – 当前 epoch 的编号

TensorLayout#

class nvidia.dali.types.TensorLayout#

PipelineAPIType#

class nvidia.dali.types.PipelineAPIType(value)#

Pipeline API 类型

BASIC#
ITERATOR#
SCHEDULED#