类型#

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)#

重载函数。

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

Type:

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#

返回 TensorListCPU 对象,该对象是此 TensorListGPU 的副本。

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

Type:

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 Interface 兼容。

dtype(self: TensorCPU) str#

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

Warning

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

property __array_interface__#

返回 TensorCPU 的 Array Interface 表示。

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

Type:

DALIDataType

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

tensor 的形状。

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

from which the data was loaded.

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 Interface 兼容。

dtype(self: TensorCPU) str#

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

Warning

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

property __cuda_array_interface__#

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

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

Type:

DALIDataType

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

tensor 的形状。

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 参数是标量,并且未提供 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 (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 内置类型 boolintfloat 将被标记为分别指示 nvidia.dali.types.DALIDataType.BOOLnvidia.dali.types.DALIDataType.INT32nvidia.dali.types.DALIDataType.FLOAT

参数:
  • value (boolintfloat) – 要传递给 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#

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 – 当前 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#

PipelineAPIType#

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

Pipeline API 类型

BASIC#
ITERATOR#
SCHEDULED#