PyTorch 插件 API 参考#
- class nvidia.dali.plugin.pytorch.DALIClassificationIterator(pipelines, size=-1, reader_name=None, auto_reset=False, fill_last_batch=None, dynamic_shape=False, last_batch_padded=False, last_batch_policy=LastBatchPolicy.FILL, prepare_first_batch=True)#
用于 PyTorch 分类任务的 DALI 迭代器。它以 PyTorch 的 Tensor 形式返回 2 个输出(数据和标签)。
调用
DALIClassificationIterator(pipelines, reader_name)
等效于调用
DALIGenericIterator(pipelines, ["data", "label"], reader_name)
- 参数:
size¶ (int, default = -1) – 包裹的 pipeline 的分片中的样本数(如果多于一个,则为总和)。提供 -1 意味着迭代器将工作直到从 iter_setup() 内部引发 StopIteration。选项
last_batch_policy
和last_batch_padded
在这种情况下不起作用。它仅适用于迭代器内部的一个 pipeline。与reader_name
参数互斥reader_name¶ (str, default = None) – 读取器的名称,将查询该读取器以获取分片大小、分片数量以及正确计算迭代器需要处理的相关和填充样本数量所需的所有其他属性。它会自动设置
last_batch_padded
,以匹配读取器的配置。auto_reset¶ (string or bool, optional, default = False) –
迭代器是否为下一个 epoch 自动重置自身,或者是否需要显式调用 reset()。
它可以是以下值之一
"no"
,False
或None
- 在 epoch 结束时引发 StopIteration,并且需要调用 reset()"yes"
或"True"
- 在 epoch 结束时引发 StopIteration,但 reset() 在内部自动调用
dynamic_shape¶ (any, optional,) – 仅用于向后兼容性的参数。
fill_last_batch¶ (bool, optional, default = None) –
已弃用 请使用
last_batch_policy
代替是否用数据填充最后一个批次,直到 ‘self.batch_size’。迭代器将返回第一个整数倍的 self._num_gpus * self.batch_size 条目,该条目超过 ‘size’。将此标志设置为 False 将导致迭代器精确返回 ‘size’ 条目。
last_batch_policy¶ (optional, default = LastBatchPolicy.FILL) – 当 epoch 中没有足够的样本来完全填充最后一个批次时,如何处理最后一个批次。请参阅
nvidia.dali.plugin.base_iterator.LastBatchPolicy()
last_batch_padded¶ (bool, optional, default = False) – DALI 提供的最后一个批次是否用最后一个样本填充,或者只是包裹起来。与
last_batch_policy
结合使用时,它会告知迭代器返回的最后一个批次是否仅部分填充了来自当前 epoch 的数据,是要删除填充样本还是来自下一个 epoch 的样本。如果设置为False
,则下一个 epoch 将更早结束,因为来自它的数据已被消耗但被删除。如果设置为 True,则下一个 epoch 的长度将与第一个 epoch 相同。要使这种情况发生,还需要将读取器中的选项 pad_last_batch 设置为 True。当提供reader_name
参数时,它将被覆盖prepare_first_batch¶ (bool, optional, default = True) – DALI 是否应在创建迭代器后立即缓冲第一个批次,以便在提示迭代器获取数据时,已准备好一个批次
示例
对于数据集
[1,2,3,4,5,6,7]
和批次大小 2last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = True -> 最后一个批次 =
[7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = False -> 最后一个批次 =
[7]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = True -> 最后一个批次 =
[7, 7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = False -> 最后一个批次 =
[7, 1]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = True -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = False -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[2, 3]
- checkpoints()#
返回 pipeline 的当前检查点。
- next()#
返回下一批数据。
- reset()#
在完整 epoch 后重置迭代器。DALI 迭代器不支持在 epoch 结束前重置,并将忽略此类请求。
- property size#
- class nvidia.dali.plugin.pytorch.DALIGenericIterator(pipelines, output_map, size=-1, reader_name=None, auto_reset=False, fill_last_batch=None, dynamic_shape=False, last_batch_padded=False, last_batch_policy=LastBatchPolicy.FILL, prepare_first_batch=True)#
用于 PyTorch 的通用 DALI 迭代器。它可以从 DALI pipeline 以 PyTorch 的 Tensor 形式返回任意数量的输出。
- 参数:
output_map¶ (list of str) – 字符串列表,将 DALI pipeline 的连续输出映射到用户指定的名称。输出将作为这些名称的字典从迭代器返回。每个名称都应是不同的
size¶ (int, default = -1) – 包裹的 pipeline 的分片中的样本数(如果多于一个,则为总和)。提供 -1 意味着迭代器将工作直到从 iter_setup() 内部引发 StopIteration。选项
last_batch_policy
和last_batch_padded
在这种情况下不起作用。它仅适用于迭代器内部的一个 pipeline。与reader_name
参数互斥reader_name¶ (str, default = None) – 读取器的名称,将查询该读取器以获取分片大小、分片数量以及正确计算迭代器需要处理的相关和填充样本数量所需的所有其他属性。它会自动设置
last_batch_padded
,以匹配读取器的配置。auto_reset¶ (string or bool, optional, default = False) –
迭代器是否为下一个 epoch 自动重置自身,或者是否需要显式调用 reset()。
它可以是以下值之一
"no"
,False
或None
- 在 epoch 结束时引发 StopIteration,并且需要调用 reset()"yes"
或"True"
- 在 epoch 结束时引发 StopIteration,但 reset() 在内部自动调用
dynamic_shape¶ (any, optional,) – 仅用于向后兼容性的参数。
fill_last_batch¶ (bool, optional, default = None) –
已弃用 请使用
last_batch_policy
代替是否用数据填充最后一个批次,直到 ‘self.batch_size’。迭代器将返回第一个整数倍的 self._num_gpus * self.batch_size 条目,该条目超过 ‘size’。将此标志设置为 False 将导致迭代器精确返回 ‘size’ 条目。
last_batch_policy¶ (optional, default = LastBatchPolicy.FILL) – 当 epoch 中没有足够的样本来完全填充最后一个批次时,如何处理最后一个批次。请参阅
nvidia.dali.plugin.base_iterator.LastBatchPolicy()
last_batch_padded¶ (bool, optional, default = False) – DALI 提供的最后一个批次是否用最后一个样本填充,或者只是包裹起来。与
last_batch_policy
结合使用时,它会告知迭代器返回的最后一个批次是否仅部分填充了来自当前 epoch 的数据,是要删除填充样本还是来自下一个 epoch 的样本。如果设置为False
,则下一个 epoch 将更早结束,因为来自它的数据已被消耗但被删除。如果设置为 True,则下一个 epoch 的长度将与第一个 epoch 相同。要使这种情况发生,还需要将读取器中的选项 pad_last_batch 设置为 True。当提供reader_name
参数时,它将被覆盖prepare_first_batch¶ (bool, optional, default = True) – DALI 是否应在创建迭代器后立即缓冲第一个批次,以便在提示迭代器获取数据时,已准备好一个批次
示例
对于数据集
[1,2,3,4,5,6,7]
和批次大小 2last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = True -> 最后一个批次 =
[7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = False -> 最后一个批次 =
[7]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = True -> 最后一个批次 =
[7, 7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = False -> 最后一个批次 =
[7, 1]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = True -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = False -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[2, 3]
- checkpoints()#
返回 pipeline 的当前检查点。
- next()#
返回下一批数据。
- reset()#
在完整 epoch 后重置迭代器。DALI 迭代器不支持在 epoch 结束前重置,并将忽略此类请求。
- property size#
- class nvidia.dali.plugin.pytorch.DALIRaggedIterator(pipelines, output_map, size=-1, reader_name=None, output_types=None, auto_reset=False, fill_last_batch=None, dynamic_shape=False, last_batch_padded=False, last_batch_policy=LastBatchPolicy.FILL, prepare_first_batch=True)#
用于 PyTorch 的通用 DALI 迭代器,带有 Ragged 张量。它可以从 DALI pipeline 以每个 GPU 字典的形式返回任意数量的输出。这些字典由 PyTorch Tensor(对于标记为 DALIRaggedIterator.DENSE_TAG 的输出)、稀疏 COO PyTorch Tensor(对于标记为 DALIRaggedIterator.SPARSE_COO_TAG 的输出)和 PyTorch Tensor 列表(对于标记为 DALIRaggedIterator.SPARSE_LIST_TAG 的输出)组成。
- 参数:
size¶ (int, default = -1) – 包裹的 pipeline 的分片中的样本数(如果多于一个,则为总和)。提供 -1 意味着迭代器将工作直到从 iter_setup() 内部引发 StopIteration。选项
last_batch_policy
和last_batch_padded
在这种情况下不起作用。它仅适用于迭代器内部的一个 pipeline。与reader_name
参数互斥reader_name¶ (str, default = None) – 用于查询分片大小、分片数量以及所有其他必要属性的 reader 的名称,这些属性对于正确计算迭代器需要处理的相关和填充样本的数量至关重要。当使用 FILL 时,它会自动将
last_batch_policy
设置为 PARTIAL,并根据 reader 的配置相应地设置last_batch_padded
。output_types¶ (list of str, optional, default = None) – 指示 pipeline 输出批次是否均匀(所有样本具有相同大小)的标签列表。标记为均匀的批次输出将作为单个 PyTorch Tensor 返回,标记为不均匀的批次输出将作为指定的稀疏 PyTorch Tensor 格式返回。必须是 DALIRaggedIterator.DENSE_TAG 或 DALIRaggedIterator.SPARSE_LIST_TAG 或 DALIRaggedIterator.SPARSE_COO_TAG。output_types 的长度必须与 pipeline 的输出数量匹配。如果未设置,则所有输出都将被视为标记为 DALIRaggedIterator.DENSE_TAG。目前,稀疏模式仅支持 tensor 列表和 COO 稀疏 tensor 格式。
auto_reset¶ (string or bool, optional, default = False) –
迭代器是否为下一个 epoch 自动重置自身,或者是否需要显式调用 reset()。
它可以是以下值之一
"no"
,False
或None
- 在 epoch 结束时引发 StopIteration,并且需要调用 reset()"yes"
或"True"
- 在 epoch 结束时引发 StopIteration,但 reset() 在内部自动调用
fill_last_batch¶ (bool, optional, default = None) –
Deprecated 请使用
last_batch_policy
代替是否用数据填充最后一个批次,直到 ‘self.batch_size’。迭代器将返回第一个整数倍的 self._num_gpus * self.batch_size 条目,该条目超过 ‘size’。将此标志设置为 False 将导致迭代器精确返回 ‘size’ 条目。
last_batch_policy¶ (optional, default = LastBatchPolicy.FILL) – 当 epoch 中没有足够的样本来完全填充最后一个批次时,如何处理最后一个批次。请参阅
nvidia.dali.plugin.base_iterator.LastBatchPolicy()
last_batch_padded¶ (bool, optional, default = False) – DALI 提供的最后一个批次是否用最后一个样本填充,或者只是简单地包裹起来。与
last_batch_policy
结合使用时,它指示迭代器返回的最后一个批次,其中数据仅部分填充了来自当前 epoch 的数据,是丢弃填充样本还是来自下一个 epoch 的样本(它不是字面意义上的丢弃,而是设置 ndarray 的pad
字段,以便后续代码可以使用它来丢弃数据)。如果设置为False
,则下一个 epoch 将提前结束,因为来自它的数据已被消耗但被丢弃。如果设置为 True,则下一个 epoch 的长度将与第一个 epoch 相同。为了实现这一点,reader 中的选项 pad_last_batch 也需要设置为 True。当提供reader_name
参数时,此设置将被覆盖。prepare_first_batch¶ (bool, optional, default = True) – 指示 DALI 是否应在创建迭代器后立即缓冲第一个批次,以便在提示迭代器获取数据时,已经准备好一个批次。
示例
对于数据集
[1,2,3,4,5,6,7]
和批次大小 2last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = True -> 最后一个批次 =
[7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.PARTIAL, last_batch_padded = False -> 最后一个批次 =
[7]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = True -> 最后一个批次 =
[7, 7]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.FILL, last_batch_padded = False -> 最后一个批次 =
[7, 1]
,下一次迭代将返回[2, 3]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = True -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[1, 2]
last_batch_policy = LastBatchPolicy.DROP, last_batch_padded = False -> 最后一个批次 =
[5, 6]
,下一次迭代将返回[2, 3]
- checkpoints()#
返回 pipeline 的当前检查点。
- next()#
返回下一批数据。
- reset()#
在完整 epoch 后重置迭代器。DALI 迭代器不支持在 epoch 结束前重置,并将忽略此类请求。
- property size#
- nvidia.dali.plugin.pytorch.feed_ndarray(dali_tensor, arr, cuda_stream=None)#
将 DALI tensor 的内容复制到 PyTorch 的 Tensor。
- 参数:
dali_tensor¶ (nvidia.dali.backend.TensorCPU or nvidia.dali.backend.TensorGPU) – 要从中复制的 Tensor
arr¶ (torch.Tensor) – 复制的目标
cuda_stream¶ (torch.cuda.Stream, cudaStream_t or any value that can be cast to cudaStream_t.) – 用于复制的 CUDA 流(如果未提供,将选择内部用户流)。在大多数情况下,预计使用 pytorch 的当前流(例如,如果我们复制到使用 torch.zeros(…) 分配的 tensor)。