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’。迭代器将返回第一个超过 ‘size’ 的 self._num_gpus * self.batch_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’。迭代器将返回第一个超过 ‘size’ 的 self._num_gpus * self.batch_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 的名称,将查询该 reader 以获取分片大小、分片数量以及正确计算迭代器需要处理的相关和填充样本数量所需的所有其他属性。当使用 FILL 时,它会自动将
last_batch_policy
设置为 PARTIAL,并相应地设置last_batch_padded
以匹配 reader 的配置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) –
已弃用 请使用
last_batch_policy
代替是否使用数据填充最后一个批次直到 ‘self.batch_size’。迭代器将返回第一个超过 ‘size’ 的 self._num_gpus * self.batch_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#